[Gelöst] Verständnis-Problem mit simplen Arduino Sketch

Begonnen von Radikant, 09 März 2017, 17:10:42

Vorheriges Thema - Nächstes Thema

Radikant

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
Aller Anfang ist schwer...

KernSani

Kenne den sketch nicht, aber ich denke, die Daten kommen als String...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Thorsten Pferdekaemper

1064977 ist auf einem normalen Arduino außerdem zu groß für int. int geht von -32768 bis 32767.
Gruß,
   Thorsten
FUIP

Radikant

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 ?
Aller Anfang ist schwer...

Thorsten Pferdekaemper

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
FUIP

Radikant

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
Aller Anfang ist schwer...

eiten

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.

Radikant

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
Aller Anfang ist schwer...