Serieller Monitor keine Ausgabe bei 433 Mhz Empfänger Projekt

Hallo zusammen,

ich bin langsam am verzweifeln und hoffe, ihr könnt mir helfen. Ich bastle gerade interessehalber an dem 433 Mhz Projekt Funksteckdosen schalten und Codes auslesen von 433,920 Mhz Signalen. Das bekannte Projekt lautet rc-switch. Ist bestimmt jemand hier ein Begriff. Folgendes ich habe einen Arduino Uno, COM Port erkannt und Treiber installiert. Alles in bester Ordnung. Ich bekomme bei folgendem Sketch keine Ausgabe am Seriellen Monitor, sobald ich die Fernbedienung drücke. Ich habe bereits zwei neue unterschiedliche 433 Mhz Empfänger gekauft und angeschlossen. Immer dasselbe Spiel, rein weisser Bildschirm am seriellen Monitor, keine Reaktion. Baudrate ist auf 9600 Standard. Hier mal der Sketch, vielleicht könnt ihr mir weiterhelfen, bitte...

Sketch:

/*
 Example for receiving
 
 https://github.com/sui77/rc-switch/
 
 If you want to visualize a telegram copy the raw data and 
 paste it into http://test.sui.li/oszi/
*/

#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()) {
   output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
   mySwitch.resetAvailable();
 }
}



Und der "Output" Reiter:

static const char* bin2tristate(const char* bin);
static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength);

void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw, unsigned int protocol) {

 const char* b = dec2binWzerofill(decimal, length);
 Serial.print("Decimal: ");
 Serial.print(decimal);
 Serial.print(" (");
 Serial.print( length );
 Serial.print("Bit) Binary: ");
 Serial.print( b );
 Serial.print(" Tri-State: ");
 Serial.print( bin2tristate( b) );
 Serial.print(" PulseLength: ");
 Serial.print(delay);
 Serial.print(" microseconds");
 Serial.print(" Protocol: ");
 Serial.println(protocol);
 
 Serial.print("Raw data: ");
 for (unsigned int i=0; i<= length*2; i++) {
   Serial.print(raw[i]);
   Serial.print(",");
 }
 Serial.println();
 Serial.println();
}

static const char* bin2tristate(const char* bin) {
 static char returnValue[50];
 int pos = 0;
 int pos2 = 0;
 while (bin[pos]!='\0' && bin[pos+1]!='\0') {
   if (bin[pos]=='0' && bin[pos+1]=='0') {
     returnValue[pos2] = '0';
   } else if (bin[pos]=='1' && bin[pos+1]=='1') {
     returnValue[pos2] = '1';
   } else if (bin[pos]=='0' && bin[pos+1]=='1') {
     returnValue[pos2] = 'F';
   } else {
     return "not applicable";
   }
   pos = pos+2;
   pos2++;
 }
 returnValue[pos2] = '\0';
 return returnValue;
}

static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength) {
 static char bin[64]; 
 unsigned int i=0;

 while (Dec > 0) {
   bin[32+i++] = ((Dec & 1) > 0) ? '1' : '0';
   Dec = Dec >> 1;
 }

 for (unsigned int j = 0; j< bitLength; j++) {
   if (j >= bitLength - i) {
     bin[j] = bin[ 31 + i - (j - (bitLength - i)) ];
   } else {
     bin[j] = '0';
   }
 }
 bin[bitLength] = '\0';
 
 return bin;
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter oder gehe in der IDE auf Bearbeiten - Für Forum kopieren und füge es hier ein).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hast du denn zuvor mal einen Test mit einem Beispielsketch aus der Library gemacht ?
Das wäre sicher die einfachste Möglichkeit zu einem Ergebnis zu kommen.

Dein Sketch ist so schwer lesbar.

Ich bekomme bei folgendem Sketch keine Ausgabe am Seriellen Monitor, sobald ich die Fernbedienung drücke.

Das ist normal, wenn RCSwitch die kodierung nicht kennt.

Habe dein Programm gegengetestet!

Bei unbekannten Codes keine Ausgabe.
Bekannte zeigt es.

Na das is ja doller code der einfach gar nichts ausgibt.

Könnte man denn wenigstens mit einem 24 MHz 8 Kanal logic analyser dem BitBanging am Ausgang des 433 MZh-Moduls "zuhören" und die Impulse von PulseView analysieren lassen?

vgs

Ich kann den Code nun mal posten, mit der Umwandlungsfunktion "Fürs Forum kopieren":

/*
  Example for receiving
  
  https://github.com/sui77/rc-switch/
  
  If you want to visualize a telegram copy the raw data and 
  paste it into http://test.sui.li/oszi/
*/

#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()) {
    output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
    mySwitch.resetAvailable();
  }
}

Output Reiter:

static const char* bin2tristate(const char* bin);
static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength);

void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw, unsigned int protocol) {

  const char* b = dec2binWzerofill(decimal, length);
  Serial.print("Decimal: ");
  Serial.print(decimal);
  Serial.print(" (");
  Serial.print( length );
  Serial.print("Bit) Binary: ");
  Serial.print( b );
  Serial.print(" Tri-State: ");
  Serial.print( bin2tristate( b) );
  Serial.print(" PulseLength: ");
  Serial.print(delay);
  Serial.print(" microseconds");
  Serial.print(" Protocol: ");
  Serial.println(protocol);
  
  Serial.print("Raw data: ");
  for (unsigned int i=0; i<= length*2; i++) {
    Serial.print(raw[i]);
    Serial.print(",");
  }
  Serial.println();
  Serial.println();
}

static const char* bin2tristate(const char* bin) {
  static char returnValue[50];
  int pos = 0;
  int pos2 = 0;
  while (bin[pos]!='\0' && bin[pos+1]!='\0') {
    if (bin[pos]=='0' && bin[pos+1]=='0') {
      returnValue[pos2] = '0';
    } else if (bin[pos]=='1' && bin[pos+1]=='1') {
      returnValue[pos2] = '1';
    } else if (bin[pos]=='0' && bin[pos+1]=='1') {
      returnValue[pos2] = 'F';
    } else {
      return "not applicable";
    }
    pos = pos+2;
    pos2++;
  }
  returnValue[pos2] = '\0';
  return returnValue;
}

static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength) {
  static char bin[64]; 
  unsigned int i=0;

  while (Dec > 0) {
    bin[32+i++] = ((Dec & 1) > 0) ? '1' : '0';
    Dec = Dec >> 1;
  }

  for (unsigned int j = 0; j< bitLength; j++) {
    if (j >= bitLength - i) {
      bin[j] = bin[ 31 + i - (j - (bitLength - i)) ];
    } else {
      bin[j] = '0';
    }
  }
  bin[bitLength] = '\0';
  
  return bin;
}

Ich kann die Aussage von combie bestätigen.
Der Sketch funktioniert und zeigt den von mir gesendetet Code auf dem seriellen Monitor an.

Somit liegt das Problem an deiner Hardware.

Poste mal ein Foto von deinem Aufbau.
Was für einen Empfänger verwendest du ?

Hast du ein Antenne am Empfänger angeschlossen.

Evtl. sendet deine FB keinen kompatiblen Code, dann kann man auch nix sehen.

Was sagt dein serieller Monitor, zeigt der schon etwas an ?

Wenn du noch unsere Fragen beantwortest, können wir sicher weiter helfen.

Hallo zusammen,

sorry für die späte Rückmeldung. Komme wie die meisten leider nur in hobbymäßigen Zeiten zum Arduino basteln... :slight_smile: Also kurzes Update. Die Hardware ist in Ordnung, die FB hat lediglich keine kompatiblen Codes (in dem Fall Funksteckdose von HAMA) gesendet, so blieb der serielle Monitor leer. Habe bei meinem Schwiegervater testweise mal seinen Funktaster von Intertechno versucht einzulesen und das klappte dann. Konnte den Binärcode dann in den Sende-Sketch einfügen und siehe da, der Arduino schaltete sogar die Deckenleuchte ein und aus. :slight_smile: Zumindest mal ein kleines Erfolgserlebnis. Anscheinend passt seiten "rc-witch" das Übertragungsprotokoll.

Ich habe im Netz ein für mich doch klasse Software Tool namens "URH-Universal Radio H....r" gefunden. Die meisten denke ich hier, wissen was ich meine. Das Tool hilft mir unwahrscheinlich bspw. die HAMA Sendecodes zu dekodieren. Das Programm macht dies sogar selbst und rechnet es in Binär und HEX um. Allerdings habe ich mit der Auswertung der 1 und 0 in dem ellenlangen Code Probleme herauszufinden, was der tatsächliche Sendecode ist. Ferner weiß ich nicht wie ich den Arduino dazu bewege in der richtigen Modulation zu senden sodass auch die Zeiten der Übertragung stimmen. Und wie ich das Übertragungsprotokoll das verwendet wird heraus bekomme. Vielleicht kann mir jemand helfen... Ich stelle dann auch klaro die Fotos der Auswertungen und den Versuchsaufbau ein... Wäre klasse, wenn sich jemand rühren könnte und mich ein wenig unterstützt. Möchte das Handling lernen...

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.