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.
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.
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?
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;
}
sorry für die späte Rückmeldung. Komme wie die meisten leider nur in hobbymäßigen Zeiten zum Arduino basteln... 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. 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...