Interessant ist, dass die Störung nur auftritt, wenn der Receiver eine Zeitlang kein Signal empfangen hat. Wenn ich regelmässig Funksignale sende(ca. jede Sekunde) , tritt der Fehler nicht auf.
Hier noch den Sketch:
#include <AltSoftSerial.h>
AltSoftSerial altSerial;
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(115200);
// Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(3);
// Optional set pulse length.
// mySwitch.setPulseLength(320);
mySwitch.enableReceive(0); // Empfänger ist an Interrupt-Pin "0" - Das ist am UNO der Pin2
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("AltSoftSerial Test Begin");
altSerial.begin(115200);
altSerial.println("Hello World");
}
void loop() {
char c;
if (Serial.available()) {
c = Serial.read();
altSerial.print(c);
}
if (altSerial.available()) {
c = altSerial.read();
Serial.print(c);
}
if (mySwitch.available()) // Wenn ein Code Empfangen wird...
{
int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.
Serial.print("Empfangen: ");
Serial.println( value );
if (value == 5800) //Verarbeitung: Wenn der Arduino die Zahl "5678" empfängt, dann...
{ //Programmabschnitt des IF-Befehls öffnen.
mySwitch.switchOn('a', 1, 1);
}
if (value == 5796)
{
mySwitch.switchOff('a', 1, 1);
}
mySwitch.resetAvailable(); // Hier wird der Empfänger "resettet"
}
}
Habt Ihr Ideen, wie das lösen könnte?
Besten Dank und Grüße
Inwiefern denkst du, dass sich diese Zeilen auf das Auslesen des Datensatzes auswirkt?
Ich habe folgende Zeilen gelöscht. Der Fehler im Datensatz bleibt trotzdem bestehen.
Ich habe den Verdacht, dass der Receiver elektronische Störsignale sendet.
Bei der Beschreibung der Bibliothek AltSoftSerial finde ich Hinweise auf mögliche Beeinflussungen durch andere Bibliotheken. Wäre auch eine Möglichkeit.
Das Prolem taucht nur auf, wenn gleichzeitig
Receiver und Transmitter angeschlossen sind. Wenn ich einen von beiden abklemme, ist der Datensatz wieder i.o..
Ok, also nur per Kabel.
Dann solltest du verhindern, dass die Schnittstelle zu den Funkmodulen während des lesens der seriellen. Angesprochen wird. Also nicht ständig RCSwitch auslesen.
#include <AltSoftSerial.h>
AltSoftSerial altSerial;
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
unsigned long Timer = 0;
.....
if (altSerial.available()) {
c = altSerial.read();
Serial.print(c);
**Timer = millis();**
}
if (mySwitch.available() && **(millis() - Timer <= 9000)**) // Wenn ein Code Empfangen wird...
{
int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.
Serial.print("Empfangen: ");
Serial.println( value );
if (value == 5800) //Verarbeitung: Wenn der Arduino die Zahl "5678" empfängt, dann...
{ //Programmabschnitt des IF-Befehls öffnen.
mySwitch.switchOn('a', 1, 1);
}
if (value == 5796)
{
mySwitch.switchOff('a', 1, 1);
}
mySwitch.resetAvailable(); // Hier wird der Empfänger "resettet"
}
}