Funkempfang auf Nano (pin/interrupt problem?)

Hallo zusammen,

ich habe ein empfangsproblem mit meinem Nano. Auf dem Arduino Mega läuft alles.

Ziel ist eine Kommunikation mit virtualwire, da ich aber aktuell probleme habe, wollte ich die Kommunikation erst einmal grundsätzlich mit der RC-Switch Library hinbekommen, da es hier sendende und empfangende Demo Sketches gibt, sodass ich Fehler im Sketch mehr oder weniger ausschließen kann.

So, nun zur Situation. Ich habe auf meinem Mega einen Sketch welcher Sendet und Empfängt und dabei wunderbar funktioniert. Nun habe ich an meinem Nano ebenfalls einen Empfänger angeschlossen. VCC auf 5V, GND auf GND und einen der beiden DATA Pins an D2 (sollte doch interrupt 0 sein oder?).

Verwendet habe ich Funkempfänger/Sender wie diese hier, also die ganz billigen 433MHz. Zwischen Sender und Empfänger sind gerade einmal 2-3 cm, daran kann es also nicht liegen und geht beim Mega ja auch über diese Distanz.

Als sketch verwende ich folgenden Demo Sketch aus der Library. Mein Nano empfängt jedoch absolut gar nichts. Könnt ihr mir vielleicht weiterhelfen?

/*
  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();
  }
}

Danke und viele Grüße
Karl

Was soll dein Nano empfangen ?
Und wo geht dein "Output" hin ?
Eine Anzeige fehlt bei dir oder wie soll das funktionieren.

Im übrigen gibt es für die VirtualWire auch Beispiel-Sketche, die damit wunderbar funktionieren.

Was soll das den jetzt genau werden du hast die RCSwitch Lib genommen die ist für die Funksteckdosen. Also du musst schon dann ein der Lib bekanntes und definiertes Protokoll senden. Es funktioniert nicht Virtual Wire zu senden und mit der RCSwitch zu empfangen, da die RC Switch nicht auf "alles" was da über 433Mhz kommt reagiert.
Auf beiden Seiten mit VirtalWire arbeiten und schon gehts. RCSwitch um auf Steckdosen Fernbedienungen zu reagieren oder mit dem Arduino Steckdosen zu steuern.
Schau mal hier: >>Klick<<
Hier die "originale" Seite >>KLICK<<

Gruß
DerDani

Danke schonmal für die Antworten.
Ich sende natürlich auch mit der rc-switch library. Ein anderer Grund, warum ich die genommen hatte war, dass ich damit schon erfolgreich Funktsteckdosen gesteuert hatte und daher Grundlegende Bedienungsfehler ausschließen konnte. Zu Testzwecken hängt der Nano per USB am Computer und sollte die empfangenen Daten eigentlich über die serielle Schnittstelle ausgeben.

Wenn ich die Funkmodule grundsätzlich am laufen habe ist der Plan über virtual wire eine Kommunikation aufzubauen und darüber beispielsweise Relais zu steuern. Aber dafür muss ich die Funkmodule erstmal am Nano zum funktionieren bringen.

karlj:
Nun habe ich an meinem Nano ebenfalls einen Empfänger angeschlossen. VCC auf 5V, GND auf GND und einen der beiden DATA Pins an D2 (sollte doch interrupt 0 sein oder?).

Verwendet habe ich Funkempfänger/Sender wie diese hier, also die ganz billigen 433MHz. Zwischen Sender und Empfänger sind gerade einmal 2-3 cm, daran kann es also nicht liegen und geht beim Mega ja auch über diese Distanz.

Versuche mal das Beispiel Button aus den Beispielen mit Pin2 als Button. Du siehst dann am rhythmischen Blinken von LED13 wenn gesendet wird, ob der Empfänger läuft.
Bei dem geringen Abstand könnte der Empfänger übersteuern und nicht mehr sauber empfangen. Falls du hast, probiere auch mal eine Funkfernbedienung aus.

Das war eine gut Idee, danke für den Tipp!
Aber die Lampe blinkt wie verrückt, auch ohne Sender. Die Fernbedienung der Funksteckdosen bringt auch mit dem normalen Receive Sketch keinen Erfolg.

Ich habe das Blinken der LED mal zusätzlich auf der seriellen Schnittstelle ausgeben lassen. Ist alles andere als regelmäßig und ich konnte keine Änderung der Blinkgeschwindigkeit feststellen.

Habe das gleiche auch beim Mega getestet. Der blinkt zwar auch ohne das ich selbst sende, reagiert aber auf einen Tastendruck der Fernbedienung.

Das ist normal, dass man zufälliges empfängt, wenn nicht gesendet wird. Das ist ähnlich dem Rauschen im Radio, wenn man keinen Sender eingestellt hat. Es können auch Signale anderer 433Mhz Sender in der weiteren Entfernung sein. Wichtig ist das rhythmische Blinken, wenn du was sendest.

Das ist klar, dass auf 433MHz Rauschen zu erwarten ist. Allerdings stellt sich kein Rythmisches Blinken ein während ich sende und auch auf die Fernbedienung zeigt die LED am Nano keine Reaktion. Wenn ich das gleiche mit dem Mega mache schon.

Ist es denn richtig, dass ich den Empfänger beim Nano am Pin D2 angeschlossen habe? Das sollte meines Wissens nach der Interrupt 0 sein.

Bei Platinen mit dem ATmega328 ist Interrupt 0 am Pin 2; Das ist richtig.
Welchen NANO Hast Du?

Grüße Uwe

Hast du vielleicht Kontaktprobleme (defektes Kabel/kalte Lötstelle, schlechtes Breadboard) auf Pin2? Wenn der Eingang offen ist, floated der Eingang und kann auch zufälliges geblinke erzeugen.

Ich habe einen Nano V3.0 mit Mega328P. Habe jetzt mal das Breadboard und Kabel am Data Pin des Empfängers gewechselt, sowie pin 3 ausprobiert. Sowohl mit dem Button Sketch als auch mit RC Receive Demo und Fernbedienung. Dann auf interrupt 1. alles ohne Reaktion auf die Fernbedienung.

Gibt es da noch irgendwas mit Pull-Up/down widerständen um das floaten zu verhindern bzw macht das bei einem Funkmodul sinn?

Entweder empfängt das Modul am Nano nichts oder das Signal kommt am 328 nicht an. Für das Empfangsmodul braucht man keine Pullups. Im Zweifelsfall würden die sogar stören.

karlj:
Gibt es da noch irgendwas mit Pull-Up/down widerständen um das floaten zu verhindern bzw macht das bei einem Funkmodul sinn?

Kommt immer darauf an welchen Ausgang das Modul hat.

Du kannst ja probeweise einen 10k-100kOhm Widerstand als Pullup dazugeben uns schauen wie's fuktioniert. Aber prinzipiell ist das nicht anders als wie beim MEGA; wenn's dort funktioniert müßte es mit den NANO auch funktionieren.

Grüße Uwe

Damit du uns nicht länger raten lässt, solltest du uns mal ein Foto deines Aufbaus posten.
In meinem ersten Post #1 hatte ich dich gefragt, was in deinem Sketch "output" heißt, keine Antwort.
Wie willst du denn den empfangenen Code anzeigen.

Ich sehe da keine Anweisung, die es auf den SerialMonitor schreibt.
Bitte lese unsere Kommentare auch komplett.

Nimm doch mal das Beispiel "ReceiveDemo_Simple".

Edit:
Wenn du per Funk Relais steuern möchtest, ist die RCSwitch sowieso besser geeignet.
Warum willst du das mit der VirtualWire machen ?

Ich vermute, du machst am Nano etwas grundlegendes falsch, wenn es am Mega läuft, aber am Nano nicht.

Ich habe mir für meine Projekte einen eigenen Empfänger mit Display aufgebaut. Dieser kann beides, die VirtualWire und RCSwitch empfangen und auf dem Display anzeigen. Da weiß ich immer wo dran ich bin.

So, hier kommt mal das Bild. Habe es jetzt gezeichnet, da es so denke ich deutlich besser zu erkennen ist.

In dem Code oben wird die Output Funktion des RC-Switch Beispiels aufgerufen. In der ist die Ausgabe über Serial.print geregelt.

Aktuell versuche ich es zusätzlich mit diesem Sketch:

/*
  Button

 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3;     // the number of the pushbutton pin
const int ledPin =  12;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    Serial.println("on");
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    Serial.println("off");
  }
}

Aus dem Button beispiel, nach dem Tipp von Theseus. Ich vermute auch, dass ich irgendetwas grundlegendes falsch mache, aber kann gerade einfach nicht finden was.

Die Virtual Wire lib hatte ich ausgesucht, da die Relais später unter anderem Pumpen und UV Lampen an unserem Pool steuern sollen und ich dann gerne ein "OK Pumpe an" zurücksenden möchte, bevor der Befehl zum einschalten an die UV Lampe geht. Zum Schutz vor Überhitzung bei stehenden Wasserkreislauf. Und ich mir vor der Virtual Wire, mehr Flexibilität in der Kommunikation verspreche,

karlj:
So, hier kommt mal das Bild. Habe es jetzt gezeichnet, da es so denke ich deutlich besser zu erkennen ist.

Ein Foto ist nicht zu sehen.

Poste es bitte hier im Forum als Attachment.

In dem Code oben wird die Output Funktion des RC-Switch Beispiels aufgerufen. In der ist die Ausgabe über Serial.print geregelt.

Ja, stimmt, habe ich übersehen, bei mir funktioniert es so auch.

Aktuell versuche ich es zusätzlich mit diesem Sketch:

In dem Sketch sehe ich aber kein RCSwitch.

Die Virtual Wire lib hatte ich ausgesucht, da die Relais später unter anderem Pumpen und UV Lampen an unserem Pool steuern sollen und ich dann gerne ein "OK Pumpe an" zurücksenden möchte, bevor der Befehl zum einschalten an die UV Lampe geht. Zum Schutz vor Überhitzung bei stehenden Wasserkreislauf. Und ich mir vor der Virtual Wire, mehr Flexibilität in der Kommunikation verspreche,

Das geht mit RCSwitch genau so, da sendest du keinen Text zurück, sondern Zahlen, die du auch auswerten kannst.

HotSystems:
In dem Sketch sehe ich aber kein RCSwitch.

In dem Sketch geht es ja nur darum zu prüfen, ob der Empfänger überhaupt was sinnvolles empfängt. Wenn schon die Led nicht rhythmisch, während gesendet wird, blinkt, dann empfängt RCSwitch erst recht nichts.

Theseus:
In dem Sketch geht es ja nur darum zu prüfen, ob der Empfänger überhaupt was sinnvolles empfängt. Wenn schon die Led nicht rhythmisch, während gesendet wird, blinkt, dann empfängt RCSwitch erst recht nichts.

Das verstehe ich, aber dann muss auch ein Empfänger ran, den sehe ich nicht.

Und ob man was sinnvolles empfängt, kann man besser auf einem Display bzw. Monitor sehen.

Oder wie wird der Sketch dann angesteuert ?

Aber ohne Bild und Foto sehe ich hier kein Fortkommen !!

Sorry, da hat wohl was mit dem Bild nicht funktioniert. Hoffe das klappt hier jetzt.

karlj:
Sorry, da hat wohl was mit dem Bild nicht funktioniert. Hoffe das klappt hier jetzt.

Ja, das Bild ist jetzt da.
so willst du es aufbauen, damit wissen wir aber nicht, ob du es so aufgebaut hast.

Du solltest mal den anderen Demo-Sketch testen.

Was und womit sendest du denn ?
Bist du sicher, dass das Senden auch richtig funktioniert ?

Es wurde schon mal nach einer Funk-Fernbedienung gefragt, hast du so eine ?