Zmiana diody przyciskiem. Wiele funkcji przycisku . - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Zmiana diody przyciskiem. Wiele funkcji przycisku . (/watek-zmiana-diody-przyciskiem-wiele-funkcji-przycisku) |
Zmiana diody przyciskiem. Wiele funkcji przycisku . - pioter994 - 15-12-2021 Witajcie, mam problem z kodem. Potrzebuje aby po wciśnięciu swicha zapalała się dioda 1 , po kolejnym wciśnięciu gasiła się 1 a zapalała 2 , kolejne gasi się 2 a zapala 3 itd. Oprócz tego w dowolnym momencie przytrzymanie przycisku powoduje reset arduino . Doszedłem do tego momentu gdzie sekcja pierwsza (z diodami) działa poprawnie. Ale dłuższe przytrzymanie nie działa . Znaczy działa ale dopiero kiedy sekwencja diód jest na końcu ( musi przejść cały program). Możecie zerknąć i coś podpowiedzieć ? Korzystam z biblioteki OneButton Kod: #include <OneButton.h> RE: Zmiana diody przyciskiem. Wiele funkcji przycisku . - kaczakat - 15-12-2021 Naucz się używać millis. Masz bibliotekę do obsługi przycisków i potem wstawiasz to: "while (digitalRead(2) == HIGH) {} //Czekaj na wciśnięcie przycisku"? Tu jest potrzebny Switch case i po kolei przechodzisz kolejne stany przełączane zmienną w funkcji singleclick(), może być inna konstrukcja sterowana taką zmienną jeśli "itd" jest dużo. Zmiana diody przyciskiem. Wiele funkcji przycisku . - pioter994 - 15-12-2021 Czyli dokształcić się w funkcji millis i switch case ? Chodzi Ci o tą bibliotekę co załączyłem czy inną? Funkcji "itd" jest dokładnie 5 . Czy potem edytować obecny kod czy pisać od nowa ? Wysłane z mojego M2007J3SY przy użyciu Tapatalka RE: Zmiana diody przyciskiem. Wiele funkcji przycisku . - kaczakat - 15-12-2021 Wystarczy poprawić. Spokojnie może zostać setup, loop i nazwy funkcji, trzeba im tylko zmienić treść. W funkcji od przyciśnięcia wystarczy jakaś zmienna k++ po każdym naciśnięciu przycisku i przy każdej wartości k inny zestaw stanów led. Akurat tu millis jest zbędne tak samo jak delay. W funkcji długiego naciśnięcia można zrobić reset Watchdog'iem, domyślam się, że podpiąłeś 12 pod RST jakimś kablem, co jest zupełnie zbędne, nadmiarowe, więc i błędne. Docelowo i tak każdy program powinien zawierać WD, więc i tak warto go umieć użyć. Po prostu w tym wypadku wymuszasz jego zadziałanie ustawiając krótki czas i instrukcje while(1), co oczywiście "zawiesi" program i spowoduje programowy reset. Chodzi o to, że millis jest na końcu kursu Arduino, jakbyś go zrobił to miałbyś pewną paletę narzędzi i instrukcji opanowaną do wykorzystania, na razie nie wiesz o ich istnieniu, lub się zapomniało, za mało przećwiczyło. Każdą lekcję z kursu można zrobić na pierdyliard wariantów, a po dojściu do millis od nowa bez delay. Jeśli jest to jakiś klon i WD nie działa prawidłowo to trzeba wgrać aktualny bootloader. RE: Zmiana diody przyciskiem. Wiele funkcji przycisku . - pioter994 - 16-12-2021 Więc tak. Posiedzialem trochę i posiłkując się przykładami z internetu zbudowałem licznik(nowy kod). Działa prawidłowo. Próbując połączyć licznik z kodem OneButton już się robią schody . Na tą chwile kod wygląda tak : Kod: #include<OneButton.h> WD zostawmy narazie w spokoju . Pozdrawiam RE: Zmiana diody przyciskiem. Wiele funkcji przycisku . - kaczakat - 16-12-2021 Sprawdziłem przykładowy kod z tej biblioteki i u mnie działa w każdej opcji - zwykle/długie. Ale w nim jest: void loop() { button.tick(); // You can implement other code in here or just wait a while delay(1); } Bez tego button.tick() u mnie nie działa. Może przeczytaj cokolwiek o tej bibliotece, naucz się jej używać https://github.com/mathertel/OneButton . Dodaj w każdej funkcji drukowanie zmiennych na serial, widzisz co się dzieje z twoimi zmiennymi lub w ogóle że funkcja została wywołana. Przycisk musi być jakoś podłączony przez rezystor wew/zew ((np. 10k) do jednego stanu logicznego, przeciwnego do wymuszonego tym zwarciem przycisku, ma to być zgodne z tym co deklarujesz bibliotece. Zmiana diody przyciskiem. Wiele funkcji przycisku . - pioter994 - 16-12-2021 Przykładowy kod u mnie też działa normalnie (krótkie, podwójne i długie ) , problem zaczyna się kiedy w krótkim próbuje umieścić licznik . Spróbuję wieczorem przepisać na serial print i zobaczymy . Pozdrawiam Wysłane z mojego M2007J3SY przy użyciu Tapatalka Zmiana diody przyciskiem. Wiele funkcji przycisku . - MadMrQ - 16-12-2021 Zamieść cały kod, bo tak na prawdę nie wiemy, co robisz. Ogólnie Onebutton wymaga button.tick() w pętli do poprawnego działania. Co takiego chcesz osiągnąć przez licznik = licznik = 0? Bałagan Twoim własnym wrogiem. Pomysł z serialem jak najbardziej trafiony. Wrzucasz w programie Serial.print z jakimś komunikatem i wiesz, co się dzieje. Wysłane z mojego POCOPHONE F1 przy użyciu Tapatalka |