Hola Chicos.
Son las 00.04H y llevo todo el santo sábado atascado con un código.
Para proyecto de complejidad superior, he pretendido hacer la base que necesitaré para empezar.
Como novato ya me he atascado en el primer paso.
Pretendo enviar mensajes de 8 dígitos de TX433 a RX433. El RX al recibir los dígitos programados en el su código, debe encender un led. Luego hará otras cosas, pero para empezar me conformo con le led.
Si recibe otros números, no debe hacer nada (De momento).
En el lado RX, por serial recibo los numeros correctos, pero el hardware no obedece a pesar de verse los numeros correctos.
He buscado en la red, pero me encuentro cientos de codigos y proyectos con las librerias rc-swith y VirtualWire. Esta, la RadioHead que me han recomendado, me dicen que es mucho más segura a la hora de enviar y recibir los paquetes de datos completos.
El codigo es copiado y pegado pero con adaptaciones mías para poder mandar numero largos y diferentes desde según qué TX.
Bueno al codigo, a ver si alguien ve donde la estoy piciando:
/*
Capitulo 46 de Arduino desde cero en Español.
Programa que mediante dos pulsadores en un modulo emisor RF de 433 Mhz
permite enviar el caracter 1 o 2.
Requiere instalar libreria RadioHead.h
Autor: bitwiseAr
*/
/// Programa 2 lado Emisor ////
#include <RH_ASK.h> // incluye libreria RadioHead.h
#include <SPI.h> // incluye libreria SPI necesaria por RadioHead.h
RH_ASK rf_driver; // crea objeto para modulacion por ASK
#define PULSADOR2 3 // reemplaza ocurrencia de PULSADOR2 por el numero 3
void setup(){
pinMode(PULSADOR2, INPUT_PULLUP); // pin 3 como entrada con resistencia de pull-up
rf_driver.init(); // inicializa objeto con valores por defecto
}
void loop(){
if (digitalRead(PULSADOR2) == LOW){ // si se presiona PULSADOR1
const char *msg = "12345678"; // carga numero 12345678 en mensaje a enviar
rf_driver.send((uint8_t *)msg, strlen(msg)); // envia el mensaje
rf_driver.waitPacketSent(); // espera al envio correcto del mensaje
}
delay(200); // demora de 200 mseg.
}
Y este es el receptor:
/*
Capitulo 46 de Arduino desde cero en Español.
Programa que enciende LED rojo y apaga el mismo al recibir el numero 1 y
enciende LED verde por 5 segundos y apaga al recibir el numero 2.
Ver: Capitulo46-Programa2-Emisor.txt
Requiere instalar libreria RadioHead.h
Autor: bitwiseAr
*/
//// Programa 2 lado Receptor ////
#include <RH_ASK.h> // incluye libreria RadioHead.h
#include <SPI.h> // incluye libreria SPI necesaria por RadioHead.h
RH_ASK rf_driver; // crea objeto para modulacion por ASK
#define LEDROJO 2 // reemplaza ocurrencia de LEDROJO por el numero 2
void setup(){
pinMode(LEDROJO, OUTPUT); // pin 2 como salida
rf_driver.init(); // inicializa objeto con valores por defecto
Serial.begin(9600); // inicializa monitor serie a 9600 bps
}
void loop(){
uint8_t buf[8]; // espacio para mensaje recibido de 8 caracteres
uint8_t buflen = sizeof(buf); // longitud de buffer
if (rf_driver.recv(buf, &buflen)) // si se recibieron datos correctos
{
if((char)buf[0]=='12345678') // si los caracteres son el numero 12345678
{
digitalWrite(2,HIGH); } // estado del LED rojo
Serial.println((char*)buf); // imprime buffer de mensaje
{
delay(1000); // demora de 1 segundos
digitalWrite(2, LOW);
}
}
Algo me llama la atención. El original de este codigo, era para enviar un solo digito con uno u otro botón, el 1 o el 2.
Por eso la linea
uint8_t buf[8]; // espacio para mensaje recibido de 8 caracteres
Yo he cambiado el valor a 8, estaba en 1.
Por algun motivo que desconozco, en la linea
if((char)buf[0]=='12345678') // si los caracteres son el numero 12345678
Antes había solo un caracter y en color azul, al escribir el segundo caracter, se cambia a negro...Incluso habiendo cambiado la linea citada antes de 1 a 8.
Alguien ve el fallo, por favor.
Gracias de antemano.