24-03-2021, 22:33
Dziękuję za podpowiedź.
Już wcześniej próbowałem przypisać kody do zmiennych i stałych oraz porównywać je w warunkach.
Niestety najczęściej kończyło się to obiegiem pętli w nieskończoność.
Z tak jak wyżej napisanym kodem program działa idealnie czyli po otrzymaniu kodu "włączenia" wykonuje
jednokrotnie instrukcje pomiędzy :
if ( mySwitch.getReceivedValue() == 11858321 )
a
mySwitch.resetAvailable();
i "czeka" na następny kod.
Dokładnie o to mi chodziło ale , no właśnie.
Pomyślałem, że sterowanie tylko jednym pilotem mocno ogranicza możliwości tym bardziej, że mam trzy różne.
Przerobiłem program dodając 2 ify z kodem drugiego pilota w warunku i działa. Jednak wygląda fatalnie dlatego
poszukuję bardziej eleganckiego rozwiązania. Niestety "else" nie zadziałało. Nie mniej jednak dziękuję za zainteresowanie. Wklejam przerobiony program. Może komuś przyjdzie coś do głowy.
Już wcześniej próbowałem przypisać kody do zmiennych i stałych oraz porównywać je w warunkach.
Niestety najczęściej kończyło się to obiegiem pętli w nieskończoność.
Z tak jak wyżej napisanym kodem program działa idealnie czyli po otrzymaniu kodu "włączenia" wykonuje
jednokrotnie instrukcje pomiędzy :
if ( mySwitch.getReceivedValue() == 11858321 )
a
mySwitch.resetAvailable();
i "czeka" na następny kod.
Dokładnie o to mi chodziło ale , no właśnie.
Pomyślałem, że sterowanie tylko jednym pilotem mocno ogranicza możliwości tym bardziej, że mam trzy różne.
Przerobiłem program dodając 2 ify z kodem drugiego pilota w warunku i działa. Jednak wygląda fatalnie dlatego
poszukuję bardziej eleganckiego rozwiązania. Niestety "else" nie zadziałało. Nie mniej jednak dziękuję za zainteresowanie. Wklejam przerobiony program. Może komuś przyjdzie coś do głowy.
Kod:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
pinMode(8, OUTPUT); //Pin 8 jako wyjście
pinMode(9, OUTPUT); //Pin 9 jako wyjście
mySwitch.enableReceive(0); // Pin 2 (INT0) jako wejście sygnału z odbiornika
Serial.begin(9600); // Uruchomienie komunikacji
tone(A0, 3800, 500); // Sygnalizacja dźwiękowa informująca o włączeniu
delay(100);
tone(A0, 4500, 500);
delay(100);
tone(A0, 3800, 500);
digitalWrite(8, HIGH); // Przekaźnik załączony
}
void loop() {
if (mySwitch.available()); // Czy zostały odebrane dane
//1
if ( mySwitch.getReceivedValue() == 11858321 ) { // Jeśli odebraliśmy taki kod to:
delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu
Serial.println ("Włączony"); // Komunikat w terminalu
Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
for (int i = 0; i < 4; i++) { // Czterokrotne mignięcie diodą
digitalWrite(9, HIGH);
delay(70);
digitalWrite(9, LOW);
delay(70);
}
digitalWrite(8, HIGH); // Załączenie przekaźnika
tone(A0, 3800, 500); // Sygnalizacja dźwiękowa
delay(100);
tone(A0, 4500, 500);
delay(100);
tone(A0, 3800, 500);
mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}
//2
if ( mySwitch.getReceivedValue() == 6226433 ) { // Jeśli odebraliśmy taki kod to:
delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu
Serial.println ("Włączony"); // Komunikat w terminalu
Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
for (int i = 0; i < 4; i++) { // Czterokrotne mignięcie diodą
digitalWrite(9, HIGH);
delay(70);
digitalWrite(9, LOW);
delay(70);
}
digitalWrite(8, HIGH); // Załączenie przekaźnika
tone(A0, 3800, 500); // Sygnalizacja dźwiękowa
delay(100);
tone(A0, 4500, 500);
delay(100);
tone(A0, 3800, 500);
mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}
//3
if ( mySwitch.getReceivedValue() == 11858322 ) { // Jeśli odebraliśmy taki kod to:
delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu
Serial.println ("Wyłączony"); // Komunikat w terminalu
Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
for (int i = 0; i < 4; i++) { // Czterokrotne mignięcie diodą
digitalWrite(9, HIGH);
delay(70);
digitalWrite(9, LOW);
delay(70);
}
digitalWrite(8, LOW); // Wyłączenie przekaźnika
tone(A0, 4500, 500); // Sygnalizacja dźwiękowa
delay(100);
tone(A0, 3800, 500);
delay(100);
tone(A0, 4500, 500);
mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}
//4
if ( mySwitch.getReceivedValue() == 6226434 ) { // Jeśli odebraliśmy taki kod to:
delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu
Serial.println ("Wyłączony"); // Komunikat w terminalu
Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
for (int i = 0; i < 4; i++) { // Czterokrotne mignięcie diodą
digitalWrite(9, HIGH);
delay(70);
digitalWrite(9, LOW);
delay(70);
}
digitalWrite(8, LOW); // Wyłączenie przekaźnika
tone(A0, 4500, 500); // Sygnalizacja dźwiękowa
delay(100);
tone(A0, 3800, 500);
delay(100);
tone(A0, 4500, 500);
mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}
}