Hola!
Estoy intentando transmitir con un Arduino Uno R3 y un emisor de 433,92 MHz, un paquete de código que contiene 64 grupos de silencio y señal de tal forma que cada pareja de silencio y señal contiguas tienen la misma longitud (30 milisegundos) y cada elemento puede ser de 10 ó 20 milisegundos. Es decir, cada pareja es de uno de los dos siguientes tipos:
silencio de 10 mlsg. y señal de 20 mlsg.
o silencio de 20 mlsg. Y señal de 10 mlsg.
como puede verse en la primera imagen.
He marcado cada pareja con colores alternativos (rojo y verde).
El grupo de 64 parejas (quizá esto sea una perogrullada para muchos de vosotros, pero es la primera vez que intento transmitir una señal elaborada en Arduino por mí a través de un transmisor de 433 MHz). Este paquete de ondas corresponde a un mando a distancia de RF.
Aparentemente el envío parece correcto, pero al estudiar la línea de tiempos, veo que es de mayor duración a lo que correspondería ser.
Entonces me he dado cuenta de que recibo una señal que contiene algo no previsto, como se puede ver en la segunda imagen .
En efecto, podemos ver que además de los silencios (franja correspondiente al color magenta)y señales (franja correspondiente al color verde) hay una especie de zona de tránsito (franja correspondiente al color rojo) de unos 24 milisegundos de duración que no consigo saber como se produce. Esas franjas indeseadas, están flanqueando las franjas de señal.
Dejo el código de Arduino que he utilizado por si alguien puede ayudarme.
El módulo transmisor de 433 Mhz es el típico de los chinos. Dejo una imagen del modelo (lógicamente..el de la izquierda).
Muchas gracias
#include <VirtualWire.h>
char *controller;
byte tren129 [] = {1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1};
void setup()
{
pinMode(12,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4000);// speed of data transfer Kbps
byte t;
byte vuelta;
byte eslabon;
int duracion;
int silencio;
for (vuelta=1; vuelta<7; vuelta++)
{ for (eslabon=0; eslabon<64; eslabon++)
{
t = tren129[eslabon];
if (t == 1) {
duracion=10;
silencio=20;
}
if (t == 2) {
duracion=20;
silencio=10;
}
controller="0" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(12,0);
delay(silencio);
controller="1" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(12,1);
delay(duracion);
}
digitalWrite(12,0);
delay(2000);
}
eslabon=0;
}
void loop(){
}