Witam, posiadam klon Arduino Uno, chciałem zaprogramować reakcję na dany przycisk z pilota IR, wgrałem kilka bibliotek, ale w monitorze zdarzeń, otrzymuję albo ciąg wpisów, nawet gdy pilot nie wysyła sygnału, lub żadnych informacji, w zależności, jaki program wgram z internetu. Jako odbiornika używam TSOP31236, układ działa, sprawdzałem pisząc prosty program z migającą diodą w rytm sygnału z odbiornika. Co może być przyczyną braku kodów z pilota w rejestrze ?
Szukam też odpowiednich komend, które umożliwiały by np. wykonanie programu, typu: jeśli przycisk będzie wciśnięty określoną ilość czasu - wykonaj daną pętlę Używałem formy "delay", ale program sumował czas wszystkich naciśnięć przycisku, mi zależy natomiast żeby każde zwolnienie switcha resetowało zegar.
Zastanawiam się też, jakiej komendy użyć, żeby w przypadku niespełnienia jakiegoś warunku zatrzymać działanie pętli i wrócić na jej początek, lub wykonywać alternatywną pętlę. Używałem komend "if", "break", ale mam problem z zaprogramowaniem układu, tak, aby program wracał na początek pętli
Szukam też informacji, jak zrealizować opcję zaprogramowania np. wykonania danego programu, jeśli będzie wciśnięty przycisk, a, lub przycisk b. Umieszczałem dwie komendy "while", jedna pod drugą, wtedy program wogóle nie reagował na przyciski
Samodzielnie udało mi się np. taki działający program napisać
Film przedstawiający działanie programu
https://filmy.elektroda.pl/89_1614850531.mp4
Szukam też odpowiednich komend, które umożliwiały by np. wykonanie programu, typu: jeśli przycisk będzie wciśnięty określoną ilość czasu - wykonaj daną pętlę Używałem formy "delay", ale program sumował czas wszystkich naciśnięć przycisku, mi zależy natomiast żeby każde zwolnienie switcha resetowało zegar.
Zastanawiam się też, jakiej komendy użyć, żeby w przypadku niespełnienia jakiegoś warunku zatrzymać działanie pętli i wrócić na jej początek, lub wykonywać alternatywną pętlę. Używałem komend "if", "break", ale mam problem z zaprogramowaniem układu, tak, aby program wracał na początek pętli
Szukam też informacji, jak zrealizować opcję zaprogramowania np. wykonania danego programu, jeśli będzie wciśnięty przycisk, a, lub przycisk b. Umieszczałem dwie komendy "while", jedna pod drugą, wtedy program wogóle nie reagował na przyciski
Samodzielnie udało mi się np. taki działający program napisać
void setup() { // Ustawienia parametrów
pinMode(3, OUTPUT);
pinMode(6, OUTPUT); // Ustawienia pinów 3,6 i 8, jako wyjścia
pinMode(8, OUTPUT);
pinMode(7, INPUT_PULLUP); // Ustawienia pinu 7 jako wejścia z podciągnięciem do Vin
digitalWrite(3, LOW);
digitalWrite(6, LOW); // Ustawienie na pinach 3,6 stanu niskiego, po włączeniu zasilania
}
void loop() { // Docelowy program
delay(500); // Opóźnienie niwelujące skutkti drgania syków przycisku
while(digitalRead(7) == HIGH) {} // Odbiór sygnału z przycisku
digitalWrite(3, HIGH); // Załączenie niebieskiej dioody
if(digitalRead(3) == HIGH) // Jeśli niebieska dioda świeci
digitalWrite(8, HIGH); // Włączenie brzęczyka
delay(100); // Czas 0,1s
digitalWrite(8, LOW); // wyłączenie brzęczyka po czasie 0,1s
delay(300); // Opóźnienie niwelujące skutkti drgania syków przycisku
while (digitalRead(7) == HIGH) {} // Odbiór sygnału z przycisku
digitalWrite(6, HIGH); // Załączenie pomarańczowej dioody
if(digitalRead(6) == HIGH) // Jeśli pomarańczowa dioda świeci
for ( int i=0 ; i<2 ; i++) { // Ustawienie dwukrotnego wykonania poniższego zadania
digitalWrite(8, HIGH); // Włączenie brzęczyka po czasie 0,1s
delay(100); // Czas 0,1s
digitalWrite(8, LOW); // Wyłączenie brzęczyka po czasie 0,1s
delay(100); } // Czas 0,1s
delay(300); // Opóźnienie niwelujące skutkti drgania syków przycisku
while(digitalRead(7) == HIGH) {} // Odbiór sygnału z przycisku
digitalWrite(3, LOW); // Wyłączenie diody niebieskiej
delay(300); // Opóźnienie niwelujące skutkti drgania syków przycisku
while (digitalRead(7) == HIGH) {} // Odbiór sygnału z przycisku
for ( int i=0 ; i<5 ; i++) { // Ustawienie 5 krotnego wykonania poniższego zadania
digitalWrite(3, HIGH); // Włączenie niebieskiej diody
delay(500); // 0,5s
digitalWrite(3, LOW); // Wyłączenie niebieskiej diody po czasie 0,5s
delay(500); // Czas 0,5s
if(digitalRead(7) == LOW) break; // Wcześniejsze zakończenie programu
// jeśli przycisk zostanie wciśnięty na co najmniej 1s
};
digitalWrite(3, HIGH); // Włączenie niebieskiej diody po czasie 0,5s
delay(500); // Czas 0,5s
digitalWrite(6, LOW); // Wyłączenie pomarańczowej diody po czasie 0,5s
digitalWrite(3, LOW); // Wyłączenie niebieskiej diody po czasie 0,5s
if(digitalRead(3) == LOW)
if(digitalRead(6) == LOW) // Jeśli obydwie diody zgasły
digitalWrite(8, HIGH); // Włączenie brzęczyka
delay(300); // Czas 0,3s
digitalWrite(8, LOW); // Wyłączenie brzęczyka, po czasie 0,3s
}
Film przedstawiający działanie programu
https://filmy.elektroda.pl/89_1614850531.mp4