Skocz do zawartości

Sterowanie za pomocą podczerwieni


kubajas

Pomocna odpowiedź

Cześć, mam problem z programem. W domyśle ma działać następująco:

1. Przycisk "5" na pilocie włącza i wyłącza działanie układu.

2. Wciśnięcie na pilocie przycisków od 0 do 4 określa ile diod ma się świecić. 

I tu jest problem, nie wiem jak z resztą programu połączyć to włączanie i wyłączanie układu. Ponadto, jeśli świeciły się 3 diody, a ja wyłączę układ przyciskiem "5" to po ponownym włączeniu układu układ powinien znowu mieć zapalone te 3 diody. Jak rozwiązać te 2 problemy? Z góry dziękuję za każde wskazówki. 

#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int LED1= 2;
int LED2= 3;
int LED3= 4;
int LED4= 5;
int IRpin= 8;
IRrecv irrecv(IRpin);
decode_results wyniki;
unsigned long key_value= 0;

void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
irrecv.enableIRIn();

}
void loop() {
if (irrecv.decode(&wyniki)){

 switch (wyniki.value) // unsigned long odczyt= wyniki.value;
{
case 0xFF6897: //0
Serial.println("0");
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
break;
case 0xFF30CF: //1
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
break;
case 0xFF18E7: //2
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
break;
case 0xFF7A85: //3
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
break;
case 0xFF10EF: //4
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
break;
case 0xFF38C7: //5
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
break;
}

irrecv.resume();
}
}

 

Link do komentarza
Share on other sites

@kubajas witam na forum 🙂

Dnia 18.11.2022 o 18:12, kubajas napisał:

I tu jest problem, nie wiem jak z resztą programu połączyć to włączanie i wyłączanie układu

Opisz proszę co dokładnie masz na myśli pod hasłem włączenie/wyłączanie układu. Co wtedy ma się dziać? Bo brzmi, jakbyś mówił o całkowitym wyłączeniu z prądu, ale chyba nie o to chodzi 🙂

Link do komentarza
Share on other sites

W case 0-4 powinieneś zapisać do zmiennej, że ten case był ostatni, czyli zmienna będzie miała wartości 0-4, w case 5 zapisać czy poprzedni stan (zmienna bool globalna) był załączony/wyłączony i aktualnie przełączyć na przeciwny stan^=1; , potem jeśli (! stan)  to wyłączasz wszystkie else włącz tyle ile zapamiętano w zmienna. (!stan) oznacza przeciwny, if wykona się jeśli stan=0; stan^=1 przypisuje do bool stan 0 jeśli był 1 i 1 jeśli był 0. Ledy są po kolei więc można użyć for(;;) do zmiany ich stanu, a jak mają być dowolne to można je wpisać do tablicy i też użyć for by nie klepać tyle linii.

  • Pomogłeś! 1
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.