Virtual Wire oder char macht probleme

Hallo zusammen,

Ich bastel seit einiger zeit mit ein Paar Arduino Nano’s herum und habe gestern ein 433Mhz Sender und Empfänger bekommen welche ich über Virtual Wire ansteuer. Das Klappt soweit ganz gut, mein Sender sendet und der Empänger gibt den “Hallo Welt” satz über den Seriellen Monitor aus.

Jetzt zu meinem Problem:

Ich wollte den Text der versendet wird per Knopfdruck ändern z.b soll solange der Knopf gedrückt ist ein “a” versendet werden und wenn er nicht gerdrückt ist ein “b”

Die Empfängerseite soll darauf reagieren also bei “a” einen anderen Text als bei “b” in den Seriellen Monitor schreiben.

Empängerseitig klappt alles nur Senderseitig nicht, meine Char variable ändert sich nicht auf Knopfdruck. Mein Button funktioniert das Teste ich ebenfalls über den Seriellen Monitor.

Sender:

#include <VirtualWire.h>

const int buttonPin = 3;
int buttonState = 0;
char *msg = “a”;// Nachricht

void setup() {
pinMode(7, OUTPUT);
vw_setup(5000); // Bits pro Sekunde
vw_set_tx_pin(7); // Datenleitung
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}

void loop(){

// Auslesen des Buttonstatus
buttonState = digitalRead(buttonPin);

// ISt der Button gedrückt
if (buttonState == HIGH) {
char *msg = “a”; // Nachricht
Serial.println(“i.O”);
} else {
char *msg = “b”; // Nachricht
Serial.println(“n.i.O”);
}

vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // warten bis alles übertragen ist
delay(1000);
}

Empfänger:

#include <VirtualWire.h>

int i;
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

void setup() {
Serial.begin(38400);
pinMode(5, INPUT);
vw_setup(5000); // Bits pro Sekunde
vw_set_rx_pin(5); // Datenleitung
vw_rx_start(); // Empfänger starten
}

void loop() {
if (vw_get_message(buf, &buflen)) { // überprüfen ob eine Nachricht eingegangen ist
for (i=0;i< buflen;i++) {

if (buf == ‘a’) {

  • Serial.println(“Button gerückt”);*

  • }*

  • else {*

  • Serial.println(“Finger zu dick zum drücken”);*

  • }*

  • }*

  • }*

  • }[/quote]*
    Hoffe ihr könnt mir helfen
    Grüsse Dennis

Ohne jetzt großartig deinen Sketch zu betrachten, mit 5000 Bit/sek wird das mit den Funkmodulen nicht funktionieren. Nimm 2000, dan sollte das klappen.
Wenn der Sketch ok ist, da schau ich noch mal drüber.

Edit:

  1. Anmerkung zum Sender. So wie der jetzt aufgebaut ist, machst du alle Sekunde eine Aussendung. Da bekommst du evtl. Probleme, weil du alles um dich herum störst.

HotSystems: Ohne jetzt großartig deinen Sketch zu betrachten, mit 5000 Bit/sek wird das mit den Funkmodulen nicht funktionieren. Nimm 2000, dan sollte das klappen. Wenn der Sketch ok ist, da schau ich noch mal drüber.

Also Senden an sich Klappt ja nur der wechsel nicht. Habe jetzt Trotzdem mal auf 2000Bit/sek runtergestellt leider ohne erfolg.

DeBran: Also Senden an sich Klappt ja nur der wechsel nicht. Habe jetzt Trotzdem mal auf 2000Bit/sek runtergestellt leider ohne erfolg.

Klar funktioniert das Senden, nur die Daten werden für die Technik zu schnell gesendet. Das schafft diese Technik nicht. Hast du dich mal nach den Beispielen der Library orientiert? Was möchtest du damit überhaupt erreichen?

Ist auch völlig logisch dass das nicht geht. Du überdeckst mit deinen lokalen Variablen die globale! Deine lokalen Version von msg existieren nur in ihrem { } Block auf dem Stack! Die globale Version die du versendest wird nie geändert.

Deklariere das global als Array (2 Bytes da es terminiert sein muss). Und nicht als Zeiger:

char msg[2];

Das wird automatisch mit 0 initialisiert (lokal geschieht das nicht!)

Und schreibe lokal nur das erste Zeichen neu:

msg[0] = 'a';

...

msg[0] = 'b'

P.S.:
Für Code “code” nehmen und nicht “quote”. Oder auf den </> Knopf klicken

Das mit den Variablen habe ich tatsächlich übersehen.
Allerdings frage ich mich immer noch, was du mit dieser Schaltfunktion erreichen möchtest.
Zum Schalten gibt es die RC-Switch, die dafür sehr viel effektiver ist.

Ja so klappt es danke schön werde mir das mit den Globalen und Lokalen variablen wohl mal genau durchlesen danke schön für die schnelle Hilfe!

Die Variablen im Sender und Empfänger sind doch von einander unabhängig. Da solltest du kein Problem bekommen.