Skocz do zawartości

Sterowanie oświetleniem z pilota IR


klimek13

Pomocna odpowiedź

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();
  }
}
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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

Link do komentarza
Share on other sites

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,

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.