lunes, 22 de julio de 2019

Comunicación Full-Duplex con ARDUINO y nRF24L01

INTRODUCCION:
No es mi intensión criticar absolutamente a nadie, pero en mi caso personal me ha ocurrido que muchos explican muy bien dejando sobre entendida muchas cosas (que en mi caso personal) ignoro.
Otro ejemplo ha sido: Explican exclusivamente las líneas determinadas del funcionamiento de “algo” y luego te pasan el video funcionando todo. Cuando yo quiero llevarlo a la práctica no funciona.
Claro falta agregar esto, aquello y lo otro. Es por ese motivo que me gusta hacer y presentar lo poquito que voy aprendiendo para que otro “no pierda un fin de semana”, como yo simplemente porque no vio lo obvio “falta agregar pinMode(5, OUTPUT)”.

Cabe aclarar que no critico los modos de enseñanza de los demás, pero al menos podrían hacer el comentario aclaratorio. Ya que siempre nos piden nuestros Like / suscribirse.

TEMA CONCRETO (Sin saraza)
La tarea que tiene el programa SERVIDOR es enviar un número aleatorio “usando millis()” al Esclavo. Por otro lado el Esclavo independientemente de lo que reciba envía un valor fijo “999” al Servidor.
Una vez logres esta comunicación podrás jugar del modo que vos quieras o lo necesites. Los mensajes son independientes sin que haya una clave o tiempo para que uno u otro deba responder.
En este caso particular no necesitaba usar Cadena de caracteres, es por eso que solo podrán trabajar con números.
Las conexiones están por todas partes, pero en mi caso solo me quiero dedicar a dejarte un Sketch/Programa/Aplicación. (Inspirado en la explicación de Prometec que me enseño mucho).
SERVIDOR / MAESTRO
// MAESTRO.ino
// Creo que no hace falta usar para este ejemplo.
// #include <SPI.h>
// *******************

#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9,10); // Rx~ y Tx~
const uint8_t pipes[2] = { 0xF0F0F0F0E1LL, 1 };
void setup(void) {
    pinMode(10, OUTPUT);
Serial.begin(9600);
    radio.begin();
radio.setRetries(15,15); // Maximos reintentos
    radio.openWritingPipe(pipes[0]);
    radio.openReadingPipe(1,pipes[0]);
}
void loop(void) {
     delay(2500); // Solo sirve para no desbordar el Visor Serial
   
     // Paramos la escucha para poder hablar
     radio.stopListening();
     unsigned long Numero = millis();
     Serial.print("Mensaje Enviado ");
     Serial.println(Numero);
     bool ok = radio.write( &Numero, sizeof(unsigned long) );
     if (ok){
         Serial.println("ok...");
     }else{  
         Serial.println("SERVIDOR:No pude enviar mi NRO.");
     }
// Volvemos a escuchar al Esclavo
     radio.startListening();
     if ( radio.available()){
          int AhoraEl;
          radio.read( &AhoraEl, sizeof(int) );
          if (AhoraEl != 0){
              Serial.print("Recibi del Esclavo ");
              Serial.println(AhoraEl);
          }
     }
}


ESCLAVO
[code]
// ESCLAVO.ino
// Creo que no hace falta usar para este ejemplo.
// #include <SPI.h>
// *******************

#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9,10); // Rx~ / Tx~
const uint8_t pipes[2] = { 0xF0F0F0F0E1LL, 2 };
void setup(void) {
     pinMode(10, OUTPUT);
Serial.begin(9600);
     radio.begin();
radio.setRetries(15,15);
     radio.openWritingPipe(pipes[0]);
     radio.openReadingPipe(1,pipes[0]);
}
void loop(void) {
     // Escuchamos al Servidor
     radio.startListening();
     unsigned long ElServidor = 0;
     radio.read( &ElServidor, sizeof(unsigned long) );
     delay(50);
     if (ElServidor !=0) {
         Serial.print("Numero Recibido del Servidor = ");
         Serial.println(ElServidor);
     }
   
     if ( radio.available() ) {
        // Dejamos de escuchar para poder hablar
        radio.stopListening();
        int AhoraYo = 999;
        Serial.print("Enviando Mensaje ");
        Serial.println(AhoraYo);
        bool ok = radio.write( &AhoraYo, sizeof(int) );
        delay(50);
        radio.startListening(); // Redundancia
        if (ok){
           Serial.println("ok...");
        }else{
           Serial.println("ESCLAVO:No pude enviar el 999");
        }
     }
}

No hay comentarios:

Publicar un comentario