433MHz Fernbedienung soll Arduino steuern

Hallo zusammen,

bin neu im Thema Arduino und Microcontroller.

Habe vor mit meinem Arduino ein Relais zu steuern, wenn der Arduino einen bestimmten 24Bit Wert empfängt.

Habe den 24Bit Wert vorher mit rc-switch ausgelesen.

Leider stehe ich komplett auf dem schlauch und weiß nicht, wie ich Arduino sagen soll, dass wenn er diesen Wert empfängt dies und jenes tun soll.

Habe auf funduino den Artikel über 433 MHz gelesen und mir folgenden Code angeschaut:

#include <RCSwitch.h>
int LED=13;
RCSwitch mySwitch = RCSwitch();
void setup() 
{
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Empfänger ist an Interrupt-Pin "0" - Das ist am UNO der Pin2
  pinMode(LED, OUTPUT); //Der Pin mit der LED (Pin13) ist jetzt ein Ausgang.
}

void loop() {
  if (mySwitch.available()) // Wenn ein Code Empfangen wird...
  {
  int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.
  if (value == 0) // Wenn die Empfangenen Daten "0" sind, wird "Unbekannter Code" angezeigt.
    {
      Serial.println("Unbekannter Code");
    } 
    
    else // Wenn der Empfangene Code brauchbar ist, wird er hier an den Serial Monitor gesendet.
    {
      Serial.print("Empfangen: ");
      Serial.println( value );
        if (value == 5678)   //Verarbeitung: Wenn der Arduino die Zahl "5678" empfängt, dann... 
        {   //Programmabschnitt des IF-Befehls öffnen.
        digitalWrite(LED, HIGH); //dann soll die LED leuchten
        delay (500);   //und zwar für 0,5 Sekunden (500 Millisekunden).
        digitalWrite(LED, LOW); //danach soll die LED aus sein.
        }   //Programmabschnitt des IF-Befehls schließen.   
    }
    mySwitch.resetAvailable(); // Hier wird der Empfänger "resettet"
  
  }
  }

In diesem Beispiel soll er eine LED auf PIN 13 einschalten. Wie ändere ich den Code so, dass anstatt "value 5678", mein 24Bit Wert von der Fernbedienung die LED schaltet?

Würde über jede Hilfe dankbar sein.

na wie lautet den dein 24bit Wert?

und wenn du 24bit bekämst ... warum liest du dann den Wert in ein int mit 16bit ein?

du hast die verwendete lib nicht verlinkt, aber geraten lautet die Signatur von get.ReceivedValue wie folgt:

Hast du dir die Beispiele deiner verwendeten Library mal angesehen ?
Da wird dir auch gezeigt, wie du deinen gesendeten Wert ansehen kannst.
Dann musst du den nur in deinem Sketch einsetzen.

Was für eine Fernbedienung verwendest du ?
Zeige uns mal einen Link der FB.

Hallo zusammen,

entschuldigt bitte das meine Antwort so lange gedauert hat, hatte leider zu tun.

@noiasca
Ich habe den Wert wie gesagt per rc-swtich mit dem Beispielen aus der Bibliothek ausgelesen einmal mit "ReceiveDemo_Simple" und "ReceiveDemo_Advanced".
Und habe folgende Werte erhalten:

16:57:33.962 -> Received 13629377 / 24bit Protocol: 1

17:13:19.897 -> Decimal: 13629377 (24Bit) Binary: 110011111111011111000001 Tri-State: 101111F1100F PulseLength: 296 microseconds Protocol: 1
17:13:20.027 -> Raw data: 9232,828,360,820,364,232,952,236,948,820,364,824,360,820,360,824,368,816,364,828,360,824,360,820,368,236,944,820,364,816,368,816,368,812,372,812,372,220,964,220,964,220,960,224,956,228,956,816,368,
17:13:20.253 -> 

Der Code oben den ich als Beispiel genannt habe habe ich nur von einer Seite übernommen, dieser soll ja abgeändert werden damit ich mit meinem Signal etwas bestimmtes schalten kann.

Leider kann ich dir nicht ganz folgen, den Code den du Zitiert hast ist also genau das was hinter "get.ReceivedValue" passiert?

@HotSystems
Ja habe mir die Beispiele angeschaut leider finde ich nicht das was ich brauche, oder ich verstehe es einfach nicht.
Also Fernbedienung habe ich eigentlich einen Türklingel Sender, um genau zu sein diesen hier:

Ich habe den Sender einmal geöffnet auf der Platine kann ich sehen das dort als Sender "LR433T2" verbaut ist.

So ist das leider, wenn einfach nur die Hälfte erklärt wird.
Ich versuche es mal:
Der 24Bit Code passt nicht in einen int.
Ein int ist nur 16 bit.
Aber was noch wichtiger ist: Der 24Bit Code wird in einer unsigned Variablen zurück gegeben.

  • signed mit Vorzeichen
  • unsigned ohne Vorzeichen / immer positiv
    Zu finden in der Lib in Zeile 584

Baue Deinen Sketch um:
alt:

int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.

neu:

unsigned long value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.

Das wird helfen.

Ein Foto vom inneren Aufbau, wo der Sender genau zu sehen ist, würde auch helfen.
Und da du den gesendeten 24Bit-Code schon ausgelesen hast, darfst du uns den auch gern zeigen.

Hallo zusammen,

habe nun alles erfolgreich hinbekommen.

Habe folgenden Script abgewandelt:

Und nun sieht mein Script wie folgt aus:

#include "RCSwitch.h"

RCSwitch mySwitch = RCSwitch();


void setup() {

Serial.begin(9600);

mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2

pinMode(13,OUTPUT);

}

void loop() {
  
if (mySwitch.available()>0) {  
unsigned long int RF_data =  mySwitch.getReceivedValue() ;
Serial.println(RF_data);

switch(RF_data){
  case 5592512: mySwitch.disableReceive();
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
                break;             

}

    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);

unsigned long time_now = millis();
int ck = 500;
while(millis()<time_now + ck){;}
  mySwitch.resetAvailable();
  mySwitch.enableReceive(0);
  }
}

Na, das ist doch prima, hätte mit der anderen Lib auch funktionieren müssen.
Danke für die Rückmeldung.

1 Like

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