Go Down

Topic: VirtualWire 433Mhz integer in char umwandeln oder integer senden (Read 1 time) previous topic - next topic

ASommer

Hallo,

ich habe ein Problem beim senden von Daten über VirtualWire !
Ich habe ein Arduino Uno und eine Arduino Nano . Beide sind mittels 433Mhz verbunden.

Wenn ich die Examples der Virtuell Wire nehme, funktioniert der Aufbau.


Ich habe mich an diese Anleitung gehalten
http://www.macherzin.net/Drahtlose+Kommunikation#Senden_einfach.

Bei folgenden Code bekomme ich einen Fehler, weil er den Wert integer nicht senden kann.
Ich bekomme die Umwandlung von int in char nicht hin, oder eigentlich will ich den Wert per Integer senden.
Habe auch mit dem zweiten Beispiel herumprobiert, aber irgenwie bekomme ich es nicht hin, das er den Integer Wert sendet.



Code: [Select]

/* Senden (Transmit), einfaches Beispiel

   Üebertraegt kurzen Text mittels der VirtualWire-Bibliothek von Mike McCauley
   http://www.open.com.au/mikem/arduino/
   
   Transmitter-Datenpin an D12 (gemaess Library)
   
   Inspiriert durch das Arduino-Kochbuch von Michael Margolis
   http://www.oreilly.de/catalog/arduinockbkger/#top
   modifiziert 2012-09-20 durch fribbe/http://macherzin.net
*/

#include <VirtualWire.h>
int wert
void setup()
{
  vw_setup(2000); // initialisiere, 2000 Bits/Sekunde
}

void loop()
{
  wert = 55;
  sende(wert);
  delay(1000);
}

void sende(char *mitteilung)
{
  vw_send((uint8_t *)mitteilung, strlen(mitteilung));
  vw_wait_tx(); // warte bis Mitteilung gesendet
}



Hintergrund ist, dass ich mir gerade einen Stromzähler baue, der mittels Diode die Helligkeit beim drehen der Schiebe des Stromzählers ausliest und dann einen Wert an einen anderen Arduino senden soll.
Die erfassung klappt auch nur wie gesagt nicht das Senden von integer werten.

Ich danke im Voraus für eure Hilfe

uwefed

#1
May 27, 2013, 08:51 am Last Edit: May 27, 2013, 10:12 am by uwefed Reason: 1
Prinzipiell werden bei Schnittstellen immer 1 Byte versendet.
Du mußt den Integer 2-Byte Wert in 2 Byte umwandeln und dannn wieder zusammensetzen.

low = Wert%256
high = Wert/256
übertragen von low und high
Wert = high * 356 + low
Wert = high * 256 + low

Grüße Uwe

michael_x

Quote
Wert = high * 356 + low

Der Compiler ist schon klasse und weiss was du eigentlich willst, wenn du "/256" schreibst, aber bei dem Code grinst er heimlich und legt dich rein.  ;) SCNR

Ich empfehle immer die ungeliebte union

Code: [Select]
union { byte b[2]; int i;} x;
x.i = 1234;
Serial.write(x.b[0]);
Serial.write(x.b[1]);


Code: [Select]
union { byte b[2]; int i;} x;
int received;
if (Serial.available() >1 ){
x.b[0] = Serial.read();
x.b[1] = Serial.read();
received = x.i;
}

Go Up