Hola Chicos/as.
Llevo varios días buscado como salir del atasco..SOY NOVATO.
Dispongo de un código que me permite mostrar en serial los datos recibidos de la mayoría de controles remotos de RF. Con un modulo RF 433 o de otra frecuencia, arduino recibe la transmisión y muestra los cambios de estado en milisegundos.
Para mi objetivo, es mejor que la biblioteca RCswitch en sus diferentes versiones, ya que recibe e interpreta muchos más tipos de protocolos que la citada librería.
Lo que me gustaría implementar y debido a mi bajo nivel de programación es que arduino, basándose en los datos recibidos los muestre como unos y ceros.
Si yo conozco que pulsos componen un estado 0 o 1, conozco cuanto dura la cabecera y la cola, quiero poderselo definir en el código y quye e en cada transmisión me lo muestre ya en bin, dec o hex. En principio bin, ya me vale.
Aquí pongo el código y debajo un resultado de lectura de pulsos.
#define SAMPLESIZE 500
static unsigned int timings[SAMPLESIZE];
static unsigned int pos = 0;
static unsigned long lastTime = 0;
static int receiverPin = 2;
static int interruptPin = 0;
void setup() {
interruptPin = digitalPinToInterrupt(receiverPin);
Serial.begin(9600);
attachInterrupt(interruptPin, handleInterrupt, CHANGE);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
for (int i = 5; i>0; i--) {
Serial.print(i);
Serial.print("... ");
delay(900);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
}
Serial.println();
detachInterrupt(interruptPin);
int finalstate = digitalRead(receiverPin);
char s = Serial.read();
for (unsigned int i = pos + finalstate; i< SAMPLESIZE; i++) {
Serial.print( timings[i] );
Serial.print(",");
}
for (unsigned int i = 0; i < pos; i++) {
Serial.print( timings[i] );
Serial.print(",");
}
Serial.println("");
Serial.println("Resetea para volver a obtener datos...");
while(true) {}
}
void handleInterrupt() {
const long time = micros();
timings[pos] = time - lastTime;
lastTime = time;
if (++pos > SAMPLESIZE-1) {
pos = 0;
}
}
La lectura en el serial muestra varias tramas iguales de una misma pulsación del control remoto. Para no sobrecargar, solo mostraré el final de una trama, trama completa y principio de la siguiente:
236,1436,1052,616,1060,616,2084,8216,244,1428,252,1416,1068,604,1064,604,252,1420,1068,604,252,1416,248,1440,1068,600,1068,604,1064,604,248,1424,1064,608,244,1424,1068,604,244,1440,252,1420,252,1416,1076,596,248,1420,1072,600,1072,596,252,1420,1072,612,252,1420,1080,588,252,1420,252,1416,1076,596,1076,596,1068,600,252,1432,252,1420,1072,596,1076,596,252,1420,1068,600,252,1420,1072,596,1076,608,1072,600,248,1420,252,1420,252,1416,1076,592,1076,596,256,1416,252,1432,252,1420,256,1412,1076,596,252,1416,1080,592,1072,596,1080,592,256,1428,256,1412,1080,592,256,1416,1080,592,256,1412,256,1412,260,1412,260,1424,260,1412,260,1408,268,1404,1088,580,1084,588,260,1412,1084,584,264,1420,268,1404,1088,580,1092,580,268,1404,264,1404,264,1408,1088,584,1084,592,2108,8192,272,1400,276,1392,1092,580,1088,580,268,1404,1088,580,268,1404,264,1420,1088,584,1088,580,1096,572,268,1404,1092,580,268,1404,
Como novato, permitirme que lo explique a mi manera:
Pasándolo a onda cuadrada y comparando con el resultado en un analizador lógico, descubro que cada trama comienza con un pulso de unos 8216 us.
Cada trama termina con un tiempo de unos 2100 us.
Los 80 bits de la trama están compuestos por 2 parejas de tiempos.
Pareja 1, se forma con mas menos 244 us y 1428 us ...
Pareja 2, se forma con mas menos 1068 us y 604 us ...
La duración de cada pareja es la misma, mas menos 1670 us.
Ya veremos qué pareja conforma un cero y qué pareja conforma un uno.
Bien, pues con estos datos, me gustaría decirle a arduino que muestre unos y ceros...
He buscado por todas partes y nada... He probado varios setch de RCswitch de Martin Lackaustra y otros pero no hay forma.
Agradecería alguna sugerencia por donde buscar.
Saludos cordiales y mucha salud a todos desde el confinamiento hogareño.