Autor Tema: APORTE - Receptor 433MHz usando Interrupción de Arduino  (Leído 1268 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado humberto 02

  • PIC16
  • ***
  • Mensajes: 190
APORTE - Receptor 433MHz usando Interrupción de Arduino
« 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ú.



Código: [Seleccionar]
// 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;}

« Última modificación: 06 de Marzo de 2021, 18:28:02 por humberto 02 »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re:APORTE - Receptor 433MHz usando Interrupción de Arduino
« Respuesta #1 en: 08 de Marzo de 2021, 17:40:50 »
Muchas gracias por el aporte  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything