Go Down

Topic: Problem mit RF-Modul beim Senden von Daten (Read 811 times) previous topic - next topic

arduino_noob

Hallo,

ich benutze folgendes RF-Modul von Watterott: http://www.watterott.com/de/RF-Link-Sender-434MHz

der Code für Sender und empfänger hängt unten an...das kleine Testprogramm funktioniert auch super...nur jezt hab ich ein Problem...

Ich lese über einen Sensor Werte aus...bekomme also Integer Werte die um 1000 herum sind...wenn ich jetzt mit Serial.print(val) versuche die Werte zu übertragen, kommt nur Mist auf der anderen Seite an, weil es ja in Bytes konvertiert wird...und wenn was größeres als 255 kommt gehts ned so wirklich anscheinend...

Wenn ich jetzt aber Serial.print("1000"); mach, dann geht es wieder ohne Probleme, weil dann jeder Charakter einzeln gesendet wird...

Nur wie mach ich das jetzt mit meine int val?...

Falls jmd ne Ahnung davon hat bitte antworten

MfG & Thx

Code: [Select]
/*
* Simple Transmitter Code
* This code simply counts up to 255
* over and over
* (TX out of Arduino is Digital Pin 1)
*/
byte counter;
 
void setup(){
  //2400 baud for the 434 model
  Serial.begin(2400);
  counter = 0;
}
void loop(){
  //send out to transmitter
  Serial.print(counter);
  counter++;
  delay(10);
}


Code: [Select]
/*
* Simple Receiver Code
* (TX out of Arduino is Digital Pin 1)
* (RX into Arduino is Digital Pin 0)
*/
int incomingByte = 0;
void setup(){
  //2400 baud for the 434 model
  Serial.begin(2400);
}
void loop(){
  // read in values, debug to computer
  if (Serial.available() > 0) {
     incomingByte = Serial.read();
     Serial.println(incomingByte, DEC);
  }
incomingByte = 0;
}

Joghurt

Ich kanns jetzt hier nicht testen, daher frage ich Dich: Was kommt denn an, wenn Du 1000 als Zahl verschickst? Rein theoretisch sollten es eigentlich 2 Bytes sein...

arduino_noob

#2
Aug 19, 2010, 10:10 am Last Edit: Aug 19, 2010, 10:11 am by real_hunter Reason: 1
es komme 4 Sonderzeichen..irgendwie verhaut das das modul also 4 bytes eigentlich, weil der serial monitor das ja in DEC umwandelt...

Joghurt

#3
Aug 19, 2010, 10:22 am Last Edit: Aug 19, 2010, 10:24 am by Joghurt Reason: 1
Also Integer in Bytes teilen kannst Du über Bitwise Operators, z.B. macht Dir "value & 0xff" die eine Hälfte des 2-Bytigen Integers zum 1-Bytigen Wert, und "value >>8 & 0xFF" die andere.

Wenn dann "3" und "232" auf der Empfängerseite ankommen, dann stimmts. :)

Zusammenbauen kannst Du das dann über etwas wie "value2 << 8 | value1"...

arduino_noob

geht nicht auch einfach der befehl byte(val);? Ist haltnur komisch, dass Arduino einen String ohne Probleme umwandeln kann aber ein Integer ned....hatte auch versucht mein int val als string auszugeben..aber die konvertierung klappt ned...nur was man in "" schreibt konvertiert arduino ohne probleme...

Joghurt

#5
Aug 19, 2010, 12:54 pm Last Edit: Aug 19, 2010, 12:56 pm by Joghurt Reason: 1
Nein, byte(val) würde ja ein Byte aus Deinem Integer machen, und damit würdest Du Daten verlieren.

Ein String ist nur eine andere Schreibweise für ein Array aus chars, und die sind jeweils nur ein Byte lang.

Wie hast Du versucht, Dein Integer als String auszugeben? Per sprintf?

Du könntest auch ein char[2] oder einen String mit mindestens zwei Zeichen anlegen, per Bitoperationen füllen/überschreiben, und das dann komplett an die Serielle übergeben...

arduino_noob

hatte es mit String stringOne =  String(val); probiert...

Joghurt

#7
Aug 19, 2010, 02:50 pm Last Edit: Aug 19, 2010, 02:52 pm by Joghurt Reason: 1
Das geht definitiv nicht.

Such mal auf www.arduino.cc nach sprintf, das muss irgendwie so ähnlich laufen wie "sprintf(buffer, "%d", val);" ...

Go Up