![]() |
|
Sterownik RGB - 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: Sterownik RGB (/watek-sterownik-rgb) |
Sterownik RGB - HeksoN - 09-12-2018 Witam, na wstępie zaznaczę (jak prawie każdy w tym dziale), że dopiero zaczynam swoją przygodę z arduino, i będę wdzięczny za wyrozumiałość. Teraz przejdę do rzeczy, borykam się z pewnym problemem, który uniemożliwia poprawną pracę sterownika (samoróbka, arduino wraz z odbiornikiem Rop02 będą odpowiedzialne za sterowanie). Ogólny zamysł jest taki: Po wciśnięciu przycisku stan na wyjściu nr. 4 powinen się zmienić z niskiego na wysoki i w nim pozostać. Przy następnym wciśnięciu pin4=LOW pin5=HIGH, następnie pin5=LOW pin6=HIGH i podczas ostatniego naciśnięcia wszystkie wyjścia cyfrowe powinny zmienić stan na niski. Niestety zamiast tego program wykonuje całą sekwencję po kolei bez zatrzymania się w pętli. W tym celu umieściłem opóznienie w pętli, które miało nie pozwolić na wykonanie wszystkich instrukcji zawartych w while, przy pojedynczym naciśnięciu przycisku. Niestety nic to nie dało, dlatego zwracam się z jednym pytaniem: Z jakiego powodu pętla wykonuje się kilkukrotnie przy pojedynczym kliknięciu? Przecież stan niski na wejściu występuje przez milisekundy (tak długo jak trzymam przycisk) a delay powinen temu skutecznie zaradzić. Wiem, wiem delay jest fe, ale aktualnie nie znam zgrabniejszego rozwiązania. Zdaje sobie sprawę, że kod który zamieszczam nie ma prawa zadziałać tak jak to opisałem, ale chodzi mi tylko o tego while, to on jest dla mnie głównym problemem. Oczywiście nie proszę o gotowca, jedynie wskazówkę. Poniżej zamieszczam kod i z góry dziękuje za wszystkie odpowiedzi, pozdrawiam. Kod: #define BUTTON 2 //PRZYCISK 2RE: Sterownik RGB - es2 - 09-12-2018 (09-12-2018, 08:03)HeksoN napisał(a): Z jakiego powodu pętla wykonuje się kilkukrotnie przy pojedynczym kliknięciu? Odpowiedź na pytanie znajdziesz w dowolnym kursie Arduino. RE: Sterownik RGB - kaczakat - 09-12-2018 Jak nie znasz lepszego podejścia do przycisków niż delay to poznaj bibliotekę bounce2: https://github.com/thomasfredericks/Bounce2 , poznaj millis w kursie na Forbot (nie zrozumiesz jak nie przejdziesz całego kursu, nawet tych elementów, które pozornie nie są Ci teraz potrzebne, bo każdy odsłania nieco niezbędnej teorii): https://forbot.pl/blog/kursy. Wciśnięcie przycisku trawa kilka ms, sprawdzenie i wykonanie poleceń kilka us. Może to zrobić tysiące razy przy jednym maźnięciu paluchem po przycisku. I żeby tego uniknąć używanie delay jest jak włożenie patyka w szprychy - jest fe. Bez zrozumienia kursu i poznania bibliotek będziesz wymyślał koło na nowo kręcąc się w kółko. Można też zrobić tak, że po pierwszym wykryciu wciśnięcia przycisku wszystkie inne są ignorowane, choć program pracuje bez blokowania pętli (przykład z millis()): Kod: const int buzzer=13; |