Crea, comparte, aprende y disfruta
Virtual Wire: comunicación por radio frecuencia
Si quieres comunicar dos Arduinos de manera inalámbrica usando módulos de radio frecuencia la librería Virtual Wire te ayudará enormemente a la hora establecer la comunicación.
Lo primero que necesitas es descargar la librería, puedes hacerlo desde nuestra sección de descargas e instalarla. Si no tienes claro como hacer esto ultimo puedes consultar nuestro tutorial Instalar librerías para Arduino.
Esta librería nos provee de una serie de funciones que nos serán muy útiles a la hora de crear nuestros proyectos:
Funciones de configuración
- vw_set_tx_pin(transmit_pin) : Configuración del pin de transmisión (Por defecto el 12)
- vw_set_rx_pin(receive_pin) : Define el pin de recepción (Por defecto el 11)
- vw_set_ptt_pin(transmit_en_pin) : Activa y configura el módulo «push to talk». Esto significa que el pin seleccionado deberá estar en un determinado estado para que se realice la recepción de un mensaje. El pin por defecto para esto es el 10.
- vw_set_ptt_inverted(true) : Configura la polaridad del pin «push to talk»
- vw_setup(2000) : Inicia la comunicación a la velocidad indicada.
Funciones de transmisión
- vw_send(message, length) : Envía el mensaje indicado en message de la longitud indicada en length
- vw_tx_active() : Devuelve TRUE si el mensaje ha sido enviado. Puede usarse para verificar si se ha terminado de enviar el mensaje.
- vw_wait_tx() : Genera un tiempo de espera hasta que el mensaje se ha terminado de enviar.
Funciones de recepción
- vw_rx_start() :Comenzar la recepción.
- vw_have_message() : Devuelve TRUE si se ha recibido un mensaje.
- vw_wait_rx() : Espera a recibir un mensaje entrante.
- vw_wait_rx_max(timeout_ms) : Se mantiene a la espera de recibir un mensaje el tiempo indicado.
- vw_get_message(buf, &buflen)): lee y almacena en un buffer el mensaje recibido.
- vw_rx_stop() : Detiene la recepción de mensajes.
Veamos un ejemplo de como usar esta librería:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include #include const int led_pin = 13; const int transmit_pin = 12; const int receive_pin = 11; const int transmit_en_pin = 3; void setup(){ delay(1000); Serial.begin(9600); Serial.println("setup"); // Initialise the IO and ISR vw_set_tx_pin(transmit_pin); vw_set_rx_pin(receive_pin); vw_set_ptt_pin(transmit_en_pin); vw_set_ptt_inverted(true); vw_setup(2000); // Bits per sec vw_rx_start(); // iniciamos la recepcion pinMode(led_pin, OUTPUT); } void loop(){ uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)){ int i; digitalWrite(led_pin, HIGH); // encendemos el led cuando recibimos Serial.print("mensaje: "); //bucle que muestra el contenido del array recibido for (i = 0; i < buflen; i++){ Serial.print(buf[i],DEC); Serial.print(' '); } Serial.println(); digitalWrite(led_pin, LOW); } } |
Ahora es el turno del emisor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include const int sensor = 6; const int led_pin = 11; const int transmit_pin = 12; const int receive_pin = 2; const int transmit_en_pin = 3; void setup(){ // Initialise the IO and ISR vw_set_tx_pin(transmit_pin); vw_set_rx_pin(receive_pin); vw_set_ptt_pin(transmit_en_pin); vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec pinMode(led_pin, OUTPUT); } byte count = 1; //inicializamos el contador de envios void loop(){ int msg[1] = {1,2,3,4,5,6}; //Creamos un array de numeros que enviaremos msg[6] = count;//Colocamos el contador de envios en la posicion 6 del array digitalWrite(led_pin, HIGH); // Encendemos el Led mientras transmitimos vw_send((uint8_t *)msg, 7); //Enviamos el array vw_wait_tx(); // Esperamosa a que el mensaje se envie digitalWrite(led_pin, LOW); //Apagamos el led una vez el envio esta completo delay(1000); //Esperamos antes de volver a emitir count = count + 1; //sumamos uno al contador de envios } |
Deja una respuesta