hola buenas, tengo un problema de codigo que no puedo resolver, lo que sucede es que con la libreria virtualwire estoy comunicando dos Arduinos mediante un transmisor y receptor de RF (433Mhz)
les adjunto el codigo para que se pueda entender mejor :
Transmisor :
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // abre el puerto de serie
Serial.println("Transmisor listo"); // Imprime "listo" en el monitor serial
pinMode(13, OUTPUT); //configura el pin 13 como salida, se usara el led integrado.
vw_set_tx_pin(12); // Configura el pin 12 como TX
vw_set_ptt_inverted(true); // Requerido para DR3100
vw_setup(4000); // Bits por segundo
}
void loop()
{
digitalWrite(13, HIGH); // Parpadeo para mostrar actividad
char msg[] = "hello"; // Mensaje a enviar
vw_send((uint8_t *)msg, strlen(msg)); //Enviando...
vw_wait_tx(); // espera hasta que el mensaje se haya enviado
Serial.println("Transmitiendo..."); // Imprime transmitiendo en el monitor serial
delay(125); // Pausa antes repetir el ciclo
digitalWrite(13, LOW); // Parpadeo para mostrar actividad
delay(125); // Pausa antes repetir el ciclo
}
Receptor:
#include <VirtualWire.h>
int count;
void setup()
{
Serial.begin(9600); // abre el puerto de serie
Serial.println("Receptor listo"); //Imprime "listo" en el monitor serial
pinMode(13, OUTPUT); //configura el pin 13 como salida, se usara el led integrado.
vw_set_rx_pin(12); //Configura el pin 12 como TX
vw_set_ptt_inverted(true); //Requerido para DR3100
vw_setup(4000); // Bits por segundo
vw_rx_start(); // Inciar el receptor
}
void loop()
{
digitalWrite(13, HIGH); // Parpadeo para mostrar actividad
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Almacenar en buffer los datos recibidos
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Determina el numero de caracteres recibidos
if (vw_get_message(buf, &buflen)) // Si hay un mensaje recibido ejecuta...
{
int i;
int valor;
valor = buflen;
char c[valor];
Serial.print(valor); // imprime la cantidad de caracteres del mensaje
Serial.print(" Rx: "); //imprime Rx en el monitor serial
for (i = 0; i <= valor; i++) //rutina para impresion del mensaje recibido
{
c[i] = {buf[i]}; // guarda el caracter recibido para despues imprimirlo
Serial.print(c); //imprime el caracter recibido en el monitor serial
// Serial.print(""); //deja un espacio en el monitor serial
}
// Serial.print(c);
count++; //incrementa contador
Serial.print(count); //imprime el contador en el monitor serial
Serial.println(" "); // salto de linea monitor serial
if (strcmp(c, "hello") == 0)
{
Serial.println("correcto");
digitalWrite(13, LOW);
delay(5000);
};
}
// Pausa antes repetir el ciclo
digitalWrite(13, HIGH); // Parpadeo para mostrar actividad
delay(5000); // Pausa antes repetir el ciclo
}
Como pueden ver en el Receptor almaceno el mensaje en un string para posteriormente comparar y realizar una acción si es correcto, pero lo que al final se imprime en el monitor serial es :
“5 Rx: hRÞhelloheRÞhellohelÞhellohellÞhellohellohellohello105
correcto”
pero y si quito el print que esta dentro del for , recibo esto del monitor serial :
"5 Rx: 3 "
y ahora ni si quiera me aparece el mensaje de qye esta correcta la comprobación.
hay muchas cosas que estoy haciendo mal, ojala que alguien me pudiera orientar .
Saldudos
PCS