RF 433 MHz + LM 35

Olá pessoal, estou escrevendo um post para meu blog e nele gostaira de deixar um tutorial mostrando como enviar o valor da temperatura via RF 433MHz.

Aparentemente, o transmissor está funcionando corretamente, mas do lado receptor não consigo ler os dados.

Já pesquisei bastante pela web e aqui no forum, mas não estou conseguindo achar o problema.

Desde já grato pela atenção.

Abaixo estão os código:

TRANSMISSOR

/*--------------------------------------------------------------------------------
 * Medidor de Temperatura com LM35, RF 433 MHz
 *
 * RF TX - 433 MHz
 * 
* www.binarycodec.blogspot.com
 * Data: 06/08/2013
 * v.1.0
---------------------------------------------------------------------------------*/
#include <VirtualWire.h>

// Declarando pinos para transmissao (RF TX 433 MHz)
const int led_pin = 13;
const int transmit_pin = 10;

// Declarando o Sensor LM35
int SENSOR = 0;
int D = 0;
int T = 0;
int ResultadoSensor;
char ResultadoSensorCharMsg[10];

void setup() {

 // Comunicacao com o Serial Monitor
 Serial.begin(9600); // baud-rate
 Serial.println("Transmissor");

 // Inicializando E/S do transmissor
 vw_set_tx_pin(transmit_pin);
vw_set_ptt_inverted(true); // Requerido para DR3100
 vw_setup(2000); // Bits por segundos

}

void loop() {

 // Funcoes do Sensor - Calculos 
 D = analogRead(SENSOR);
 T = (D * 5 * 100)/1023;

 Serial.print(T);
 Serial.println(" C");
 delay(1000);

 // Funcoes para transmissao

 //Lendo e armazenando o valor da temperatura
 //ResultadoSensor = analogRead(T);

// Convertndo int para char
 itoa(T, ResultadoSensorCharMsg,10); 

 digitalWrite(led_pin, HIGH); // Pisca LED no pino 13 enquanto esta transmitindo
 vw_send((uint8_t *)ResultadoSensorCharMsg, strlen(ResultadoSensorCharMsg));

 vw_wait_tx(); // Espera o envio da informacao
 digitalWrite(led_pin, LOW);
 delay(1000);

}

RECEPTOR

/*---------------------------------------------------------------------------
 * Medidor de Temperatura com LM35, RF 433 MHz
 *
 * RF RX - 433 MHz
 * 
* www.binarycodec.blogspot.com
 * Data: 06/08/2013
 * v.1.0
-------------------------------------------------------------------------------*/
#include <VirtualWire.h>

const int led_pin = 13;
const int receive_pin = 12;

int T; //resultado sensor

char ResultadoSensorCharMsg[10]; // conteudo da transmissao

void setup() {

 // Comunicacao com o Serial Monitor
 Serial.begin(9600);
 Serial.println("Receptor");

 // Inicializando E/S do receptor
vw_set_rx_pin(receive_pin);
vw_set_ptt_inverted(true); // Requerido para DR3100
 vw_setup(2000); // Bits por segundo

 vw_rx_start(); // Inicia a recepcao
}

void loop()
{
 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;

 if (vw_get_message(buf, &buflen)) // Sem bloqueios na recepcao
 {
 int i;

 digitalWrite(led_pin, HIGH); // Pisca LED no pino 13 se receber a mensagem integra

 Serial.print("OK: "); // Verifica checksum. Se mensagem integra, escreve OK:

 for (i = 0; i < buflen; i++)
 {
 ResultadoSensorCharMsg[i] = char(buf[i]);
 }

//verifica se terminou a transmissao
ResultadoSensorCharMsg[buflen] = '\0';

//Convertendo char para inteiro
T = atoi(ResultadoSensorCharMsg);

 Serial.print("temp.: C");
 Serial.println(T);
 digitalWrite(led_pin, LOW);
 }
}

coloca um fio ligando tx e rx, assim elimina qualquer problema do RF, verifique se seu codigo esta correto, de pois de fdazer funcionar legal ai sim coloque de volta o rf

Olá,
Com uma pequena modificação neste código consegui enviar via rf uma frase.

Penso que o problema está na conversão de int para char ou char para int. Tentei reescrever a parte de conversão nos dois lados (trasmissor/receptor), mas sem sucesso.

Hoje a noite vou implementar sua sugestão.

Obrigado.

Vou testar esse código hoje mas ja verifiquei q neste modulo rf realmente ha problemas na conversao de int para char.

A temperatura deve estar como Float ao inves de Inteiro..... Tente o codigo abaixo:

No inicio (declaracoes):
ao inves de
int T; //resultado sensor
ponha
float T; //resultado sensor

E em VOID LOOP() use atof, ao inves de atoi
ao inves de
//Convertendo char para inteiro
T = atoi(ResultadoSensorCharMsg);
troque por
//Convertendo char para float
T = atof(ResultadoSensorCharMsg);