433MHz Funk - Funktionert nicht richtig

Guten Tag,

ich (Anfänger) bin gerade dabei eine Funkverbindung mithilfe der 433MHz-Frequenz und einem Magnetschalter eine LED zu schalten. Als Sender nutze ich einen ProMini, als Empfänger einen Uno.

Mein Ziel: sobald der Magnetschalter am Sender geöffnet ist, soll die LED am Empfänger leuchten. Wenn der Kontakt wieder geschlossen wird, soll die LED aufhören.

Problem: wenn der Schalter geschlossen ist, ist alles gut. Ich erhalte dann im Seriellen Monitor nur den richtigen Wert (in meinem Fall 2).
Doch wenn ich den Schalter öffne, "blinkt" die LED, und das in einem unregelmäßigen Takt.

Code des Senders:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
void setup() {
  mySwitch.enableTransmit(8);
  pinMode(9, INPUT);
  Serial.begin(9600);
}
int state;
void loop() {
  state = digitalRead(9);
  if(state == HIGH){
    mySwitch.send(1, 24);
    delay(50);
  }
  else// if(state == LOW)
  {
    mySwitch.send(2, 24);
  }
  //delay(250);
}

Code des Empfängers:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
void setup() 
{
  Serial.begin(9600);
  mySwitch.enableReceive(0);
  pinMode(12, OUTPUT);

}

void loop() {
  if (mySwitch.available())
  {
    int value = mySwitch.getReceivedValue();
    if (value == 1){
      Serial.println(mySwitch.getReceivedValue());
      digitalWrite(12, HIGH);
      //delay(100);
    }
    else
    {
     Serial.println(mySwitch.getReceivedValue());
     digitalWrite(12, LOW);
    }
    mySwitch.resetAvailable();
  }
}

Am Magnetschalter kann's nicht liegen, denn ohne Funkmodule funktioniert er (auch schon ausgetauscht). Die Funkmodule habe ich auch schon ausgewechselt.

Was ist das Problem?

Danke im Voraus.

mySwitch.enableReceive(0);

Wo ist der Funk-Empfänger angeschlossen?
Wenn D0, könnte die serielle Ausgabe der Arduino Dir einen Streich spielen.
Selber spiele ich gerade mit NRF24L01-Modulen, bin Da aber auch noch komplett am Anfang - hier muß man sich selber nicht darum kümmern, ob das Empfangene 'richtig' ist, auch 'schwätzen' die Module miteinander oder senden die Nachricht öfter (Das ist allerdings nur WWW-Nachgeplapper :slight_smile: )

MfG

Eine Schaltung deines Aufbaus (Sender) wäre schon wichtig.
Ich rate mal, du verwendest am Eingangspin keinen Pulldown-Widerstand.

postmaster-ino:
mySwitch.enableReceive(0);

Wo ist der Funk-Empfänger angeschlossen?
Wenn D0, könnte die serielle Ausgabe der Arduino Dir einen Streich spielen.
....

Hier ist es die Angabe des Interrupt 0, welches der Pin D2 am Arduino ist. also kein Problem.

So ist der Sender aufgebaut.

Ich rate mal, du verwendest am Eingangspin keinen Pulldown-Widerstand.

Falls du den Eingangspin des Schalters meinst - habe versucht einen Widerstand (5k) zu verwenden, hat jedoch nichts verändert.

Davex81:
Falls du den Eingangspin des Schalters meinst - habe versucht einen Widerstand (5k) zu verwenden, hat jedoch nichts verändert.

Da du nur einen Eingangspin verwendest, kann nur der gemeint sein.
Und du musst es nicht nur versuchen, sondern du musst ihn def. verwenden.
Der wird zwingend gebraucht.

Aber deine Schaltung ist falsch, oder der Sketch.
Wenn du auf HIGH abfragst, musst du den Pin auch gegen HIGH schalten, oder deine Logik ändern.
Dann brauchst du einen Pulldown-Widerstand.

Bei deiner Schaltung musst du auf LOW abfragen und brauchst einen Pullup-Widerstand.

Dein nächstes Problem ist, dein Sender sendet ständig. Damit handelst du dir u.U. großen Ärger ein.
Mit den Nachbarn oder mit den Behörden.
Ein Sender im ISM-Band darf sollte nur kurz senden, um andere nicht zu stören.

HotSystems:
Bei deiner Schaltung musst du auf LOW abfragen und brauchst einen Pullup-Widerstand.

Hier ginge auch der interner Pullup des Arduino, so hab ich zumindest an meinem Tacho so gemacht und es funktioniert hervorragend.

wapjoe:
Hier ginge auch der interner Pullup des Arduino, so hab ich zumindest an meinem Tacho so gemacht und es funktioniert hervorragend.

Natürlich geht der auch, nur der TO muss sich erst mal klar darüber werden, worauf er abfragt und wie er den Kontakt beschaltet.
Im Moment ist es nur Gebastel ohne zu Wissen was da läuft.

HotSystems:
Wenn du auf HIGH abfragst, musst du den Pin auch gegen HIGH schalten, oder deine Logik ändern.
Dann brauchst du einen Pulldown-Widerstand.

Bei deiner Schaltung musst du auf LOW abfragen und brauchst einen Pullup-Widerstand.

Hab ich gemacht, verändert jedoch nichts. LED blinkt weiterhin.

Davex81:
Hab ich gemacht, verändert jedoch nichts. LED blinkt weiterhin.

Dann machst du wieder etwas falsch.
Zeige den aktuellen Sketch und die Schaltung.

Wenn du unsere Vorschläge nicht berücksichtigst, kann es nichts werden.

Hat sich erledigt.
Ich frage nun nach LOW ab, benutze den 5k Widerstand und habe zusätzlich was an der Verkablung verändert.
Natürlich ziemlich einfach - wenn man's kann. ::slight_smile:
Danke für die Hilfe!

Na prima....ist doch gut, wenn es jetzt funktioniert.
Danke für die Rückmeldung.

Ist jedoch merkwürdig, dass du nach Low abfragst und einen Pulldown-Widerstand verwendest. Der geht ja auch auf GND.
Also da ist noch etwas nicht ganz sauber.

Üblich ist ein Pullup-Widerstand, wenn nach Low abgefragt wird.
Dann musst du nur die Logik umdrehen.

Davex81:
Hat sich erledigt.
Ich frage nun nach LOW ab, benutze den 5k Widerstand und habe zusätzlich was an der Verkablung verändert.
Natürlich ziemlich einfach - wenn man's kann. ::slight_smile:
Danke für die Hilfe!

Du hättest du Verkabelung wie zuvor lassen können und den internen Pullup des Uno einschalten können:

Im Setup pinMode(9, INPUT); ändern auf pinMode(9, INPUT_PULLUP);

HotSystems:
Ist jedoch merkwürdig, dass du nach Low abfragst und einen Pulldown-Widerstand verwendest. Der geht ja auch auf GND.
Also da ist noch etwas nicht ganz sauber.

Üblich ist ein Pullup-Widerstand, wenn nach Low abgefragt wird.
Dann musst du nur die Logik umdrehen.

Wenn ich nach Pullup umbauen will, muss ich doch den Widerstand an VCC, und am anderen Ende des Widerstands dann den Schalter, richtig?

Davex81:
Wenn ich nach Pullup umbauen will, muss ich doch den Widerstand an VCC, und am anderen Ende des Widerstands dann den Schalter, richtig?

Ja, stimmt.
Oder du nimmst den internen Pullup-Widerstand, wie es wapjoe vorgechlagen hat.
Und du musst dann gegen GND schalten und auf Low abfragen.

Und zum Schluss nochmal der Tipp von mir, baue deinen Sketch so um, dass der Sender nur kurz sendet.
Zum Ein- bzw. Ausschalten.
Du ersparst dir viel Ärger.

Okay, werde ich machen.

Super, danke euch beiden! Wieder was dazu gelernt. :slight_smile:

Davex81:
Okay, werde ich machen.

Super, danke euch beiden! Wieder was dazu gelernt. :slight_smile:

Alles klar, gerne.

HotSystems:
Und zum Schluss nochmal der Tipp von mir, baue deinen Sketch so um, dass der Sender nur kurz sendet.
Zum Ein- bzw. Ausschalten.
Du ersparst dir viel Ärger.

Zum Verständnis, hat 433 MHz nicht nur eine sehr geringe Reichweite, solange man keine passende Antenne installiert hat? Ich hab mal was von einer Antennengröße von 17,4 cm gelesen, sonst wäre die Reichweite nur auf wenige cm oder m geschränkt?!

Davex81:
Okay, werde ich machen.

Super, danke euch beiden! Wieder was dazu gelernt. :slight_smile:

Gern geschehen! :slight_smile: