Mehrere Wetterdaten senden (Virtual Wire)

Hallo liebe Arduino Gemeinde,
ich habe ein kleines Problem mit dem versenden von mehreren Wetterdaten.

Aufbau:
2x Arduino Uno
1x 433 Mhz Rf Sender
1x 433 Mhz Rf Empfänger
1x Temperatur-, Luftfeuchtigkeits-, Helligkeits-, Regensensor

Sender + Wetterstation

#include <VirtualWire.h>

#include "DHT.h"

char buffer [10];

//Wetterstation Temperatur und Luftfeuchtigkeit


#define DHTPIN 9     

#define DHTTYPE DHT22



DHT dht(DHTPIN, DHTTYPE);

// Fotowiderstand

int helligkeit = A0;

int sensorWert = 0;

// Regensensor

int wertRegen = A1;




void setup ()

{

Serial.begin(9600); // Serieller Monitor


    vw_setup(1000);                 // Transmitter Bits per sec

    vw_set_tx_pin(3);     


dht.begin(); // Temp-/Feuchtigkeitssensor starten

}

void loop ()

{

  sensorWert = analogRead(helligkeit);



  Serial.print("Helligkeitswert = ");

  Serial.print(sensorWert);



 delay (500);

//Regensensor

wertRegen=analogRead(A1);


  Serial.print("Regen-Messwert:");

  Serial.print(wertRegen);



  delay(500);



// Temperatur-/Feuchtigkeitssensor  

  float h = dht.readHumidity();     //Luftfeuchte auslesen

  float t = dht.readTemperature();  //Temperatur auslesen



    Serial.print("Luftfeuchte: ");

    Serial.print(h);

    Serial.print(" %\t");

    Serial.print("Temperatur: ");

    Serial.print(t);

    Serial.println(" C");



  delay (1000);






// Transmitter!

Serial.println(t);
itoa (t,buffer,10);
sendString(buffer,true);
delay(100);


}

void sendString(String message, bool wait)
{
   byte messageLength = 6; 
   char t[messageLength]; 
   
   message.toCharArray(t, messageLength);
   vw_send((uint8_t *)t, messageLength); 
   
   if (wait) vw_wait_tx(); 

   Serial.println("sent: " + message); 
 }

Das ist der Sketch (er ist noch nicht ganz fertig).

Empfänger

#include <VirtualWire.h>

 byte message[VW_MAX_MESSAGE_LEN]; 
 byte messageLength = VW_MAX_MESSAGE_LEN; 
 int ledPin = 13;

 void setup()
 {
   Serial.begin(9600);
   Serial.println("device is ready...");
   pinMode(ledPin, OUTPUT); 
   vw_set_rx_pin(4);
   vw_setup(1000); // bps
   vw_rx_start();
 }

 void loop()
 {
   if (vw_get_message(message, &messageLength)) // non-blocking
   {
     //Serial.print("rec");
     for (int i = 0; i < messageLength; i++)
     {
       Serial.write(message[i]);
     }
     Serial.println();
   }
   digitalWrite(ledPin, HIGH);  
   // stop the program for <t> milliseconds:
   delay(200);          
   // turn the ledPin off:        
   digitalWrite(ledPin, LOW);   
   // stop the program for for <t> milliseconds:
   delay(message[3]*10);  
 }

Nun zu meinem Problem:
Ich wollte, dass die alle Daten (Temp, usw.) zum Empfängermonitor übermittelt und angezeigt werden. Dies funktioniert jedoch nicht wie erhofft. Hat jemand eine Idee was falsch ist?

Eine weitere (bessere) Idee war von mir, die Daten nicht (nur) auf dem Monitor anzeigen zu lassen, sondern auf einem externen Display (Crystal). Ist es mit einem Display einfacher? Wenn ja hat jemand eine Idee für einen Sketch? Fand hierzu keine Lösungsansätze. :frowning:

Dickes Merci für die Antworten im Voraus! :kissing:

Ich hätte zuerst mal die delay() in Verdacht, daß sie die Datenübertragung stören.

Mit einem LCD Display wird man unabhängig vom PC, das würde ich bevorzugen. Vorausgesetzt man hat die Pins für die Ansteuerung des Displays noch frei.

Hallo Simatar,

wenn ich deinen Sende Sketch richtig verstehe, versuchst du den float Wert t mit itoa in ein char Wert zu wandeln und diesen dann zu übertragen.

Was kommt denn bei deinem Empfänger an?

Float nach C String geht mit dtostrf():
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42
http://www.mikrocontroller.net/topic/86391