eu inventei de fazer um sensor via radio e né que o fi duma mãe deu certo
só que eu encontrei dois problemas:

Para passar os dados via radio (Estou usando um RF 433Mhz AM) e para esse equipamento transmitir os dados ele só envia um byte por vez e para isso eu preciso passar uma String com o nome do sensor, quantidade de dados capturados.
Isso ele ja esta fazendo.

mas eu nao consigo passar esse valor para uma variavel, quando eu tento montar esse valor ele vem caracteres estranhos e nao consigo resolver esse problema

o formato dessa String é o seguinte:
"&sensor=1&ppm="+sVal;

sao duas aplicaçoes
uma para o sensor que esta transmitindo e e outra para o receptor

(esse trecho ta fazendo o papel correto)
//Função que monta a string e envia os dados
void sendSensor(){
dadosSensor = "&sensor=1&ppm="+sVal;
Serial.println(dadosSensor);
char senCharMsg[25];
dadosSensor.toCharArray(senCharMsg, 25);
// itoa(dadosSensor, senCharMsg, 20);
send(senCharMsg);
}
//Funçao que pega o vetor de char e envia para o terminal
void send (char *sen1){
vw_send((uint8_t *)sen1, strlen(sen1));
vw_wait_tx(); // Aguarda o envio de dados
}
**************************************************************************************
(Aqui é onde eu me ferro)
//Recebe os dados transmitido pelos sensores
void recebeDadosSensor(){
uint8_t message[VW_MAX_MESSAGE_LEN];
uint8_t msgLength = VW_MAX_MESSAGE_LEN;

if (vw_get_message(message, &msgLength)){ // Non-blocking
Serial.println("Recebido: ");
for (int i = 0; i < msgLength; i++){
Serial.write(message[i]);
// mq += message[i];
}
// Serial.println("");
// Serial.print("MQ: ");
// Serial.println(mq);
// mq ="";
}
}

Exibições: 820

Anexos

Responder esta

Respostas a este tópico

Edmilson, boa noite!

Parece que o seu programa está certo e ficou muito bom.

Posso estar falando besteira, mas não seria só trocar Serial.write por Serial.print dentro do for? Pode haver diferenças na hora de exibir texto e números na serial.

José Augusto

Serial.write vai escrever um byte de cada vez, isso é bom para enviar dados brutos 0x00 até 0xFF.

Serial.print usa  Serial.write, mas tem um controle maior pois os dados são interpretados como ASCII, então acaba enviando diversos bytes por vez.

Como o  Edmilson falou "ele só envia um byte por vez".

Edmilson,

creio que você deva criar uma estrategia para receber seus dados, pense um protocolo, por exemplo:

#d1d2d3d4d5d6d7d8$

com o simbolo # o seu código interpreta com inicio de string

d1 até d8 são bytes de dados validos

$ é o ultimo caractere

Tive um dúvida, esse módulo de RF não é sensível ao ruído?

Tem detector de erro ou CRC?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço