Hi,
ich habe mir folgenden Sketch gebastelt, dazu habe ich den RC-Switch-Simple-Receiver-Sketch erweitert:
/*
Simple example for receiving
https://github.com/sui77/rc-switch/
*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("Unknown encoding");
}
else if(value == 1064977){
Serial.print("Entsperren...");
}
else {
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
}
mySwitch.resetAvailable();
}
}
Nur das else if(value == 1064977){
Serial.print("Entsperren...");
}
Ist von mir.
Der Arduino soll mir "Entsperren ..." ausgeben, wenn value 1064977 entspricht.
Leider passiert das nicht (Es wird das aus dem else-Teil ausgeführt) und ich als Arduino-Neuling weiß ich nicht weshalb.
Würde mich über jede Hilfe freuen.
LG
Rudolf :D
Kenne den sketch nicht, aber ich denke, die Daten kommen als String...
1064977 ist auf einem normalen Arduino außerdem zu groß für int. int geht von -32768 bis 32767.
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 09 März 2017, 17:18:55
1064977 ist auf einem normalen Arduino außerdem zu groß für int. int geht von -32768 bis 32767.
Gruß,
Thorsten
Hast du irgendeine Idee wie ich dieses Problem lösen/umgehen kann ?
Hi,
ja, aber möglicherweise ist das gar nicht Dein Problem. Mach doch mal ein print rein, so dass Du den Wert siehst. Wie KernSani schon sagt kommt das möglicherweise als String rein.
Wie sieht denn die Methode getReceivedValue aus?
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 09 März 2017, 17:35:00
Hi,
ja, aber möglicherweise ist das gar nicht Dein Problem. Mach doch mal ein print rein, so dass Du den Wert siehst. Wie KernSani schon sagt kommt das möglicherweise als String rein.
Wie sieht denn die Methode getReceivedValue aus?
Gruß,
Thorsten
getReceivedValue gibt eine Zahl aus, wenn etwas mit 433mhz empfangen wurde.
Und in diesem Fall ist das
1064977.
Wie kann ich den prüfen, ob die Daten per int oder per String kommen?
LG
Rudolf
Schau mal hier https://github.com/sui77/rc-switch/blob/master/RCSwitch.h, Zeile 90. Da kommt ein long zurück. Also einfach
int value = mySwitch.getReceivedValue();
ersetzen durch
long value = mySwitch.getReceivedValue();
Serial.print("Rückgabewert: ");Serial.println(value); //zum debuggen, dann siehst du was ankommt.
Dann sollte das funktionieren.
Zitat von: eiten am 09 März 2017, 18:07:14
Schau mal hier https://github.com/sui77/rc-switch/blob/master/RCSwitch.h, Zeile 90. Da kommt ein long zurück. Also einfach
int value = mySwitch.getReceivedValue();
ersetzen durch
long value = mySwitch.getReceivedValue();
Serial.print("Rückgabewert: ");Serial.println(value); //zum debuggen, dann siehst du was ankommt.
Dann sollte das funktionieren.
Jetzt geht es !
Der Code sieht jetzt so aus:
/*
Simple example for receiving
https://github.com/sui77/rc-switch/
*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
long wert = mySwitch.getReceivedValue();
if (value == 0 && wert == 0) {
Serial.print("Unknown encoding");
}
else if(wert == 1064977){
Serial.print("Entsperren...");
delay(500);
}
mySwitch.resetAvailable();
}
}
Es wurde aber immer 2x "Entsperren..." ausgedruckt.
Das konnte ich aber mit dem delay() unterdrücken.
Danke für eure Hilfe.
LG
Rudolf :D