Skocz do zawartości

Sterowanie oświetleniem z pilota IR


Pomocna odpowiedź

Napisano

Hej, mam problem z kodem do sterowania światełkami led które pełnią rolę ozdoby świątecznej.

W konstrukcji switch dałem opcje że jednym przyciskiem włączam, drugim wyłączam a trzecim włączam na określony w programie czas. Wszystko mi działa tylko chciałbym żeby dało sie wyłączyć oswietlenie podczas gdy wykonuje sie instrukcja dla 3 warunku. W tej chwili jest tak że gdy włączę opcje trzecią to nie mogę jej wyłączyć dopóki nie minie czas określony w programie. Muszę czekać aż samo sie wyłączy i wtedy dopiero mam kontrolę nad sterowaniem. Ma ktoś pomysł jak to rozwiązać?

Poniżej wstawiam kod:

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(6, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {

     switch (results.value) {
        case 0xFF30CF:
           digitalWrite(6, HIGH);
           break;

        case 0xFF18E7:
           digitalWrite(6, LOW);
           break;

        case 0xFF7A85:
        int czas=0;
        while (czas<1800) {
         digitalWrite(6, HIGH);
         czas=czas+1;
         delay(1000);
        }
        digitalWrite(6, LOW);
        break;



     }

  irrecv.resume();
  }
}

Niestety dopiero sie ucze i nic mi to nie mówi. Byłbym wdzięczny gdyby ktoś zaproponował rozwiązanie i chyba w ten sposób najlepiej sie nauczę. Próbowałem sam dłuższy czas, różnymi warunkami, pętlami i nie wiem. Proszę o pomoc

  • 2 tygodnie później...

Niestety dalej nie mogę sobie z tym poradzić. Mógłby mi ktoś powiedzieć jak to rozwiązać? Dużo kombinowalem i nie potrafię tego wykonać używając funkcji millis

Kolego poczytaj ten wątek(używałeś szukajki?):

https://www.forbot.pl/forum/topics74/zmienne-millis-prosba-o-pomoc-vt14844.htm

tam koledzy mi wyjaśnili co nieco w tym temacie. Też jestem początkującym ale myślę, ze udało mi się opanować tą kwestię. Teraz już nie używam delay(), chyba, że na szybko żeby coś sprawdzić...

Używane są tam zmienne cMillis i pMillis i dodatkowo oczywiście funkcja millis(). Ja teraz wolę używać tylko zmienną np."time" to oznaczania startu stopera i millis() jako oczywiście czasomierz. Łatwiej. Jak równocześnie trzeba wiele stoperów to time1, time2, time3....

Poczytaj przykład o zegarze i lodówce to kapniesz:-)

Pozdrawiam

A może zobacz (z przykładami) biblioteki: leOS ( http://www.leonardomiliani.com/en/2012/leos-un-semplice-so-per-arduino/#wpfb-file-38 ), Timers ( https://starter-kit.nettigo.pl/2016/04/biblioteka-timers-16-4-0/ ), MsTimer2 (jest w IDE) itp. Bardzo prosto da się obsłużyć klawisze i "swiecenie" bez blokowania za pomocą delay(). Oczywiście milis() lub micros() też jest dobre, ale czy prostsze dla początkującego - sprawdź i powiedz sam.

Pozdrawiam,

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