Skocz do zawartości

Włącznik do lampki - problem z millis()


Mechano

Pomocna odpowiedź

Cześć.

Jak mogliście przeczytać w innym temacie buduję lampkę nocną dla mojego siostrzeńca. Lampka jest już zbudowana, został mi tylko kod do napisania. I tu pojawia się problem, z którym nie mogę sobie poradzić. 

Co chcę osiągnąć? Mam jeden przycisk wbudowany w enkoder, chcę go użyć do włączania i wyłączania lampki oraz poruszania się po trybach świecenia. Gdy lampka jest wyłączona (diody nie świecą) przytrzymanie przycisku przez 2 sekundy ma włączać świecenie, jednorazowe przyciśnięcie i puszczenie ma zmieniać tryb (to na później). Mam do włączania kod który działa tak jak powinien ale używa on delaya ale ten byłby tam za każdym naduszeniem, również tylko przy zmianie trybu (a nie może tak być). Próbowałem zrobić to w oparciu o millis() ale jak na razie z miernym skutkiem. Przeczytałem odcinek kursu o użyciu millis() i znalazłem ten przykład i działa prawie jak powinien, tylko że dioda włącza się dopiero jak puszczam przycisk i po dodatkowym czasie.

https://www.arduino.cc/en/tutorial/debounce

Jeżeli dobrze rozumiem to powinno wyglądać to mniej więcej tak:

-jeżeli przycisk jest wciśnięty to zaczynam liczyć czas,

-jeżeli czas minął to sprawdzam czy przycisk nadal jest wciśnięty, jeżeli tak to włączam lampkę,

Czu rozumuje dobrze? Tak zrobiony kod z użyciem delay działa jak chcę ale czeka przy każdym naciśnięciu przycisku a to nie jest jego jedyna funkcja (kod dla zobrazowania o czym myślę).

if(digitalRead(buttonPin) == false){ //warunek do wlaczenia lampki
    Serial.println("czekam");
    delay(2000);
    if(digitalRead(buttonPin) == false) {
      swiecenie = !swiecenie;
      Serial.println("zmieniam stan");
    }
  }
  digitalWrite(ledPin, swiecenie);

 

Mam na to czas do piątku, myślę, że z Waszą pomocą się to uda. Z góry dziękuję za wszelką pomoc.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.