• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
hmm sam nie wiem:) licznik impulsów
#1
Witam wszystkich. Proszę o pomoc, jakich poleceń powinienem użyć aby załączyć przekaźnik na np 30s ( w sumie z tym poradzę Smile ale tylko pod warunkiem że, w ciagu np 5s wcisnę przełącznik 3 razy.
 
Odpowiedź
#2
Pkt 1. Start programu.
Pkt 2. Sprawdź czy minęło 5 sekund? Jeżeli nie to wykonaj punkt 3. Jeżeli tak, punkt 1.
Pkt 3. Czy przełącznik został wciśnięty 3 razy? Jeżeli nie to wykonaj punkt 2. Jeżeli tak, punkt 4.
Pkt 4. Załącz przekaźnik na 30 sekund. Potem wykonaj punkt 1.

Konkretnych poleceń Ci nie podam ponieważ można to rozwiązać programistycznie na wiele sposobów.

Napisz kod i jak coś Ci nie wychodzi wtedy pytaj.
Tak to możemy sobie tylko powróżyć odnośnie rozwiązań problemu Smile

Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#3
ok coś zacznę kombinować i na pewno bede pytać:0
 
Odpowiedź
#4
Poczytaj o warunkach if co to jest jak się zapisuje .
 
Odpowiedź
#5
coś znalazlem w sumie to prawie całość tylko jesli zmieniam czas delay na dłuższy to nie włącza sie dioda

Kod:
const byte btnPin = 4,
         ledPin = 13,
         dbTime = 25; // debounce time
unsigned long timeStart, // debounce timer
            cntStart; //button press timer
const int timeOut = 5000; // 5 seconds
bool btn,
   oldBtn = false, // previous button state
   btnState = true,
   timing = false;
byte cnt = 0; // button press counter

void setup()
{
Serial.begin(9600);
pinMode(btnPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
}
void loop()
{
// first, debounce the button +++++++++++++++
if(digitalRead(btnPin) != btnState)
{
  timeStart = millis();
  btnState ^= 1;
}
if(millis() - timeStart > dbTime)
  btn = !btnState;
// end debounce +++++++++++++++++++++++++++++  
if(btn != oldBtn && btn == true) // if state changed and button is pressed
{
  if(!timing) // if first press, start timer
  {
    cntStart = millis();
    timing = true;
  }
if(++cnt > 2)
  digitalWrite(ledPin,HIGH); // press reset button to clear
delay(20000);
digitalWrite(ledPin, LOW);
Serial.println(cnt);  
}
oldBtn = btn;
if(millis() - cntStart > timeOut)
{
  cnt = 0;
  timing = false;
  cntStart = millis(); // reset counter and timer
}
}
 
Odpowiedź
#6
jeśli delay wynosi 1000 ms to działa ale jeśli już jest 20000ms to nie działa
 
Odpowiedź
#7
delay to zło w czystej postaci Smile poniżej masz kod z założeniami jakie podałeś w terminalu masz 3 liczby
czas oczekiwania na 3 naciśnięcia / ilość naciśnięć / czas pracy przekaźnika po załączeniu

program działa liniowo bez pętli i delay więc nie będzie wpływał na inne funkcje programu

Kod:
long cm;
long pm,pm_1;
long licznik;
byte start;
int stat,start_1;
byte czas_oczekiwania = 5;

void setup() {
  Serial.begin(9600);
pinMode(5, INPUT_PULLUP);
}

void loop() {
  
cm = millis()/1000;

if ( digitalRead(5) == HIGH )stat = 0;

if ( digitalRead(5) == LOW and stat == 0 )
    {start ++;stat = 1;pm = cm;}

if ( start > 0 ){
  if ((cm - pm) == 1){licznik ++;pm = cm;}}

if ( licznik > czas_oczekiwania and digitalRead(13) == 0 )
    {licznik = 0;start = 0;}
      
if ( start >= 3 )
    {digitalWrite(13,HIGH);}

if ( digitalRead(13) == HIGH ){
  licznik = 0;start = 0;
  if ((cm - pm_1) > 0){start_1 ++;pm_1 = cm;}
  if ( start_1 > 30 ){digitalWrite(13,LOW);start_1 = 0;}}

Serial.print(licznik);
Serial.print(" / ");
Serial.print(start);
Serial.print(" / ");
Serial.println(start_1);
}

posprzątałem lekko w kodzie
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#8
Po wgraniu podpięta dioda tylko się żarzyła, dodałem pinMode (12, OUTPUT); i zmieniłem {digitalWrite(12,HIGH);} i teraz po 3 wciśnięciach przycisku dioda zapala się z pełną mocą i świeci się cały czas aż wcisnę reset. JasQ bardzo dziękuje za kod i pomógłbyś jeszcze?
 
Odpowiedź
#9
Bo na pinie 13 masz diodę na płytce Arduino dlatego dodatkowa Ci tylko jażyła.
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#10
dodaje delay po wlaczeniu diody jednak swieci się cały czas i nie gaśnie
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości