Existen diferentes dispositivos que permiten la comunicación en base a Radio Frecuencia. Más de una vez hemos visto drones manejados con comandos a distancia, o apertura y cierre de portones automatizados. Bueno, esos dispositivos se manejan con Radio Frecuancia.
Nosotros podemos usar esa tecnología utilizando dos placas Arduino para conformar un emisor y un receptor.
En nuestro caso, vamos a utilizar este tipo de emisores/ receptores. El más largo es el receptor.
Códigos
/*
EMISOR
Envia los mensajes "Apagar" y "Encender" en intervalos de segundos
Conexion
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 12 – Módulo DATA
Escrito por Nano en beneficio de los seres humanos
www.robologs.net
*/
#include <VirtualWire.h>
void setup()
{
//Iniciamos el Serial y la comunicacion por radio
Serial.begin(9600);
Serial.write("Sistema encendido\n");
vw_setup(2000);
}
void loop()
{
send("Encender");
delay(2000);
send("Apagar");
delay(1000);
}
//Funcion para enviar el mensaje
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message)); //Envia el mensaje
vw_wait_tx(); //Espera hasta que se haya acabado de transmitir todo
Serial.println(message); //Muestra el mensaje por Serial
}
/*
RECEPTOR
Apaga el LED 13 si recibe el mensaje "Apagar"
Enciende el LED 13 si recibe el mensaje "Encender"
Conexion
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 11 – Módulo DATA (tiene dos pines DATA: cualquiera de los dos vale)
*/
#include <VirtualWire.h>
//Creamos un mensaje
//La constante VW_MAX_MESSAGE_LEN viene definida en la libreria
byte message[VW_MAX_MESSAGE_LEN];
byte messageLength = VW_MAX_MESSAGE_LEN;
void setup()
{
pinMode(13, OUTPUT); //Configuramos el pin 13
Serial.begin(9600);//Iniciamos el Serial
Serial.println("Iniciando...");
vw_setup(2000);
vw_rx_start();
}
void loop()
{
if (vw_get_message(message, &messageLength))
{
if(comparar("Encender") == 0){
digitalWrite(13, HIGH);
Serial.write("LED Encendido\n");
}
else if(comparar("Apagar") == 0)
{
digitalWrite(13,LOW);
Serial.write("LED Apagado\n");
}
}
}
char comparar(char* cadena) {
//Esta funcion compara el string cadena con el mensaje recibido.
//Si son iguales, devuelve 1. Si no, devuelve 0.
for(int i = 0; i<messageLength; i++)
{
if(message[i] != cadena[i])
{
return 1;
}
}
return 0;
}