I'm building a weather station with two UNOs, using NRF24l01+ radios. Communications are fine. I'm sending a struct from one to the other. The struct has three elements:
struct weather {
float tempData;
float humData;
float pressData;
};
weather wData = {0, 0, 0};
I then populate the struct with values from my DHT22 Temperature Sensor and my BMP085 pressure sensor.
float c = dht.readTemperature();
wData.tempData = (c * 9/5) + 32;
wData.humData = dht.readHumidity();
sensors_event_t event;
bmp.getEvent(&event);
wData.pressData = (0.0295 * event.pressure);
Now I send it via the NRF24L01+.
radio.write(&wData, sizeof(wData);
On the receiving Uno I have this.
struct weather {
float tempData;
float humData;
float pressData;
};
weather wData = {0, 0, 0};
radio.read( &wData, sizeof(wData) );
Serial.println(wData.tempData);
Serial.println(wData.humData);
Serial.println(wData.pressData);
I get results similar to this:
Temp = 75.43
Hum = 35.76
Press = 0.00
The first two are correct. The final one is not. I can change the order and the first two will always be correct, but the last element is always 0.00. For example:
Hum = 35.76
Press = 30.14
Temp = 0.00
I know I'm missing something here with my code but I can't find it. Anyone have some suggestions?
read()
andwrite()
return abool
, did you try to get it and print it toSerial
, just to check both functions consider everything's OK? That might help.weather
on the emiiter contained a non-0 pressure beforewrite()
?radio.write(...
is missing a closing parenthesis.read()
andwrite()
return 1. Missed the closing parenthesis while moving code here but it's there in my code.Serial.println()
ofradio.getPayloadSize()
in both sketches; normally that should be32
by default, but I wonder about it...