Problem mit RF-Modul beim Senden von Daten

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

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

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...

es komme 4 Sonderzeichen..irgendwie verhaut das das modul also 4 bytes eigentlich, weil der serial monitor das ja in DEC umwandelt...

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. :slight_smile:

Zusammenbauen kannst Du das dann über etwas wie “value2 << 8 | value1”…

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...

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 *char*s, 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...

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

Das geht definitiv nicht.

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