sábado, 23 de septiembre de 2017

Arduino Ejemplos: El modulo NRF2401 comunicación Bidireccional

Como vimos en la entrada anterior: Arduino Ejemplos: El modulo NRF2401 comunicación Unidireccional se pueden enviar datos de un módulo nRF2401 a otro. Bien, esta comunicación puede realizarse en los dos sentidos, es decir, cada modulo tiene la capacidad de enviar y recibir datos.
Para ello necesitaremos dos canales, uno para enviar y otro para escuchar.
Esta comunicación es de tipo Half-Duplex ya que no transmite ni recibe los datos por el mismo canal, si no que abre un canal para enviar y lo cierra para escuchar. Un buen ejemplo de este tipo de comunicación son las emisoras de radio de tipo civil, donde el operador pulsa un botón para hablar y tiene que soltarlo para escuchar.
con este diagrama se entiende mucho mejor lo que quiero explicar:


La configuración en ambos Arduinos es prácticamente la misma, solo cambian algunas cosas como el canal donde recibimos y enviamos que tienen que estar al contrario en cada programa, eso lo configuramos en el void setup().
También tendremos que poner a la escucha en el setup el modulo receptor, si no, no funcionara.

Setup del emisor:

   nRF.begin();
  nRF.setRetries(15, 15);     // Retardo y numero máximo de reintentos.
  nRF.openWritingPipe(pipes[0]); //Abrimos el canal 0 para escribir.
  nRF.openReadingPipe(1, pipes[1]); //Abrimos el canal 1 para leer.

Setup del receptor:

  nRF.begin();
  nRF.setRetries(15, 15);     // Retardo y numero máximo de reintentos.
  nRF.startListening();       //Ponemos el modulo en escucha.
  nRF.openWritingPipe(pipes[1]); //Abrimos el canal 1 para escribir.
  nRF.openReadingPipe(1, pipes[0]); //Abrimos el canal 0 para leer.

La parte resaltada en negrita es lo que hay que tener en cuenta a la hora de programar los Arduinos, el canal openWritingPipe del Arduino A es el openReadingPipe del Arduino B y viceversa.

El programa en si es muy parecido al anterior, cuando presionamos el pulsador en el Arduino A, mandamos al Arduino B encender el LED y el Arduino B contesta al Arduino A si el LED esta encendido o apagado.

Aquí tenéis una captura de los monitores seriales:



Bueno aquí os dejo el programa para quien le quiera echar un vistazo, es una muy buena base para hacer proyectos mas elaborados con este tipo de módulos, como por ejemplo un mando de RC multifunción el cual ya tengo empezado y subiré próximamente cuando este un poco mas "pulido".

Descargar Ejemplo Arduino nRF2401 Comunicación Bidireccional.rar

Espero les sirva, Saludos!!!

No hay comentarios :

Publicar un comentario