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);}
Ocena wątku:
Sterowanie przez IR problem z case
|
01-09-2019, 06:16
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.
Miło być decenianym https://buycoffee.to/kaczakat
(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
01-09-2019, 20:30
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.
Ż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.
Miło być decenianym https://buycoffee.to/kaczakat
(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.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.
Ż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.
Przeglądający: 1 gości