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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.