• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie przez IR problem z case
#1
Witam, napisałem program oparty o pętle case, działa bez zarzutu ale teraz chciałbym dołożyć sterowanie menu przez ir. Problem w tym, że wszystkie przykłady z ir także posiadają case. Nie wiem jak to połączyć, próbowałem już różnych możliwości ale bez skutku. Czy da się jakoś odczytywać przesłane kody ir za pomocą if? Tak abym mógł w case który aktualnie działa wyzwolić if jeśli odbiornik odczyta jakiś sygnał ? Np if (sygnał przejdź w prawo) {digitalWrite(LED, HIGH);}
 
Odpowiedź
#2
Case można zagnieżdżać, a by było bardziej czytelnie można wywołać funkcję, w której jest wywoływana funkcja, w której... itd., a w każdej może być case. Ifami można zrobić dokładnie to samo, case ma węższe zastosowanie.
 
Odpowiedź
#3
(01-09-2019, 06:16)kaczakat napisał(a): Case można zagnieżdżać, a by było bardziej czytelnie można wywołać funkcję, w której jest wywoływana funkcja, w której... itd., a w każdej może być case. Ifami można zrobić dokładnie to samo, case ma węższe zastosowanie.

Kod:
  switch (control) {
    case 1:  
        //CD

        if (irrecv.decode(&results)) {

          if (results.value == 0xC1A2FA05) {

            digitalWrite(AUX, HIGH);
          }
        }


        lcd.setCursor(2, 0);
        lcd.print("AUDIO SYSTEM");
        lcd.setCursor(0, 1);
        lcd.print("SEL.INPUT: CD");


        if (digitalRead(BUTTON) == LOW) {
          digitalWrite(AUX, LOW);
          digitalWrite(LAMP, LOW);
          digitalWrite(CD, HIGH);

        }
        break;
     

Chodzi mi o taki fragment kodu:
Kod:
if (irrecv.decode(&results)) {

          if (results.value == 0xC1A2FA05) {

            digitalWrite(AUX, HIGH);
          }
        }

kiedy wstawię go do pętli void loop bezpośrednio to ten kod działa zuepłnie poprawnie. Natomiast kiedy jest w case tak jak wyżej to już nie działa. Proszę o pomoc
 
Odpowiedź
#4
Zagnieżdżenie nie wpływa na logikę działania, ale czytelność jest taka sobie i łatwo o pomyłkę. Jak już to lepiej wrzucić kolejny switch case w procedurę i tylko ją wkleić do wyższego poziomu.
Żeby to  digitalWrite(AUX, HIGH)  zostało wykonane muszą równocześnie zaistnieć po kolei wszystkie warunki: control=1, musi być jakiś result i results.vaule=0xC1A2FA05.
Może po prostu opisz szerzej co zamierzasz w tym programie i czego oczekujesz. Może po prostu sterowanie powinno być równoległe, jeden case działa niezależnie używając przycisków, drugi niezależnie sterowanie IR. W obu przypadkach powinieneś też obsługiwać drgania styków, tak by jedno naciśnięcie przycisku czy to na pilocie IR czy na klawiaturze wywoływało dokładnie jedną akcję + ewentualnie serię powtórzeń po określonym czasie.
 
Odpowiedź
#5
(01-09-2019, 20:30)kaczakat napisał(a): Zagnieżdżenie nie wpływa na logikę działania, ale czytelność jest taka sobie i łatwo o pomyłkę. Jak już to lepiej wrzucić kolejny switch case w procedurę i tylko ją wkleić do wyższego poziomu.
Żeby to  digitalWrite(AUX, HIGH)  zostało wykonane muszą równocześnie zaistnieć po kolei wszystkie warunki: control=1, musi być jakiś result i results.vaule=0xC1A2FA05.
Może po prostu opisz szerzej co zamierzasz w tym programie i czego oczekujesz. Może po prostu sterowanie powinno być równoległe, jeden case działa niezależnie używając przycisków, drugi niezależnie sterowanie IR. W obu przypadkach powinieneś też obsługiwać drgania styków, tak by jedno naciśnięcie przycisku czy to na pilocie IR czy na klawiaturze wywoływało dokładnie jedną akcję + ewentualnie serię powtórzeń po określonym czasie.
Dzięki za pomoc wszystko już działa. Sterowanie enkoderem w menu na osobnym switch case i sterowanie ir na osobnym. Dodałem jeszcze wygaszenie ekranu po 60s bezczynności oraz powrót podświetlenie po uruchomieniu enkoder bądź naciśnięciu przycisku na pilocie. Mimo, że zrobiłem to wcześniej to i tak dzięki za pomoc bo nie wiedziałem, że switch case można umieszczać jeden w drugim.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości