TODOPIC
Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: humberto 02 en 06 de Marzo de 2021, 13:09:49
-
Hola, Este tema “específicamente” no lo encontré en la Web. Por tal motivo quería compartirlo con Uds.
Explicación: Estamos acostumbrados; por lo que se ve (en todos los ejemplos de la Web) usar al Receptor RF433MHz directamente en el void loop(); lo que podría llevarnos a tener “demoras o alteraciones” en la recepción de un mensaje, cuando nuestro Arduino está trabajando en otras tareas o controlando otros dispositivos. Dicho esto; vi conveniente usar el canal de Recepción por medio de una Interrupción. Pines 2 o 3 para el caso de un Arduino UNO o NANO.
Fue así que comencé a trabajar en el tema (pruebas varias, limpieza de líneas, etc., etc.) Terminándolo en este resumido Sketch ya probado y funcionando.
Espero que en algún momento tengas presente este post y puedas aplicarlo de este modo y no tengas que perder una mañana probando y probando.
Un cordial Saludo desde Gualeguaychú.
// 06/03/2021 -
// Receptor RF433MHz con INTERRUPCION en los Pines #2 o #3
#include <SoftwareSerial.h>
#include <VirtualWire.h>
#define watchDog 2 // Pin de Interrupcion
// Esto es para la pausa cada 10"
unsigned long Intervalo=10000;
unsigned long Previo;
String SN="NO";
void setup() {
Serial.begin(9600);
pinMode(watchDog,INPUT); digitalWrite(watchDog,LOW); // Receptor 433Mhz
pinMode(13,OUTPUT); digitalWrite(13,LOW); // Led #13
vw_set_rx_pin(watchDog);
vw_setup(2000);
vw_rx_start();
// LOW, HIGH , CHANGE, RISING (->+) y FALLING (+>-)
attachInterrupt(digitalPinToInterrupt(watchDog),Mensaje,CHANGE);
Serial.println("Inciando Proceso");
Previo=millis();
}
void loop() {
// Mantiene al Arduino ocupado en otra tarea
unsigned long Actual=millis();
if ((unsigned long)(Actual-Previo)>=Intervalo){
if (SN=="NO"){Serial.println("SI.."); SN="SI";}else{Serial.println(" .. NO"); SN="NO";}
Previo=millis();
}
}
void Mensaje(){
digitalWrite(13,HIGH);
String Cadena="";
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){for (int i=0; i<buflen; i++){Cadena+=char(buf[i]);}}
if (Cadena!="") {Cadena.trim(); Serial.println("Cadena Recibida: "+Cadena); Cadena="";}
digitalWrite(13,LOW);
return;}
-
Muchas gracias por el aporte :-/ :-/