I'm trying to collect sensor data using the TMP36GZ temperature sensor from Adafruit and send it to another Feather M0. The code I've used so far is from RadioHead and I've changed it a little to better suit my needs. I'm collecting the data just fine, but I can't seem to have the data send correctly. The package on the server side always just shows the same large number (not the correct temperature) when I pull up the serial monitor. For the transmitter, I display the temperature data collected and it's correct, but when I send it to the receiver it changes it somehow. I'm very new to this programming language for Arduino and I could just be missing something simple. Any help would be greatly appreciated. I'm trying to keep this as simple as possible. Here is my code for the transmitter and receiver:
Transmitter:
// rf95_client.pde
// -*- mode: C++ -*-
#include <SPI.h>
#include <RH_RF95.h>
RH_RF95 rf95(8, 3); // Adafruit Feather M0 with RFM95
byte sendLen;
char buffer[50];
void setup()
{
Serial.begin(9600);
while (!Serial) ; // Wait for serial port to be available
if (!rf95.init())
Serial.println("init failed");
else Serial.println("init OK - 915 MHz");
}
void loop()
{
int readingT = analogRead(1);
float voltage = readingT * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 37.0;
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print(voltage); Serial.println(" V");
Serial.print(temperatureC); Serial.println(" degrees C");
Serial.print(temperatureF); Serial.println(" degrees F");
//send temp
sprintf(buffer, "%f", temperatureF);
sendLen = strlen(buffer);
rf95.send((uint8_t *) buffer, sendLen);
delay(1000);
}
Receiver:
// rf95_server.pde
// -*- mode: C++ -*-
#include <SPI.h>
#include <RH_RF95.h>
RH_RF95 rf95(8, 3);
int led = 9;
char buffer[50];
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
if (!rf95.init())
Serial.println("init failed");
else Serial.println("init OK - 915 MHz");
}
void loop()
{
if (rf95.available())
{
// Should be a message for us now
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len))
{
Serial.println("Recieved:");
digitalWrite(led, HIGH);
Serial.print("Temperature: ");
Serial.print((char*)buf); Serial.println(" degrees F"); Serial.println(" ");
}
else
{
Serial.println("recv failed");
}
}
}