sábado, 20 de mayo de 2017

Control NRF24L01

SUSCRIBETE A MI CANAL Y NO OLVIDES DARLE LIKE A MIS VÍDEOS 


Prueba 1
EMISOR_P1
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
//el emisor no necesita la librería servo (no controla ningún servo)

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL; /*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
int i=0;
//variables para prueba 3
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int p1,p2;


void setup(){
  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openWritingPipe(direccion);//canal de escritura
}

void loop(){
  //prueba 1 funcional
  ///*
  for(i=0;i<=180;i++){
    //sección de envió de datos
    radio.write(&i, sizeof(i));//escribe el mensaje a enviar por el NRF24
  }//*/

  //prueba 2 funcional
  /*
  //sección de lectura de datos
  if(Serial.available())//Lectura si hay byte almacenado en la entrada serial del IDE
  {
    comando=Serial.read(); //lectura de byte
    if(comando=='+')i+=10;
    else if(comando=='8')i+=15;
    else if(comando=='-')i-=10;
    else if(comando=='2')i-=15;
    if(i>180)i=180;
    else if(i<0)i=0;
  }
  //sección de envió de datos
  radio.write(&i, sizeof(i));//escribe el mensaje a enviar por el NRF24
  //*/
  
  //prueba 3 mover dos servos
  /*
  p1 = map(analogRead(A5),0,1023,0,180);
  p2 = map(analogRead(A4),0,1023,0,180);
  //sección de envió de datos
  radio.write(&sincro, sizeof(sincro));
  radio.write(&p1, sizeof(p1));
  radio.write(&p2, sizeof(p2));
  radio.write(&fintrama, sizeof(fintrama));
  //*/

  //NOTAS
  //los delays afectan la capacidad de transmitir del equipo...
  //

}

RECEPTOR_P1
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
#include <Servo.h>//para controlar el servomotor SG90

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL;/*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
Servo SG901;
//variables para prueba 3
boolean trama=false;
int i,j=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int p1,p2;

Servo SG902;
 
void setup(){

  SG901.attach(7);//asigna el pin 7 al servo sg90
  SG902.attach(6);

  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openReadingPipe(1,direccion);//lectura de canal (canal,dirección)
  radio.startListening();

  SG901.write(0);
  SG902.write(0);
  delay(500);
  Serial.println("INICIADO");//indica que ah iniciado a funcionar el receptor
}/*usamos radio.openReadingPipe(1,pipe) para poder leer y después radio.startListening()
    nos permite comenzar la escucha.*/
 
void loop(){
  // Pruebas 1,2
  ///*
  if(radio.available())//verifica si hay algo en espera en el radio
  {
    int angulo;
    radio.read(&angulo, sizeof(angulo));
    SG901.write(angulo);
    Serial.println(angulo);
  }
  //*/
  //Prueba 3
  /*
  if(radio.available()){
    radio.read(&i, sizeof(i));
    asignar();
  }
  //*/
}//FIN LOOP

//función para la prueba 3
void asignar()
{
    if(i==sincro){
      trama=true;
      Serial.print(i);Serial.print("-1\n");
    }
    else if(j==0&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-2\n");
        p1=i;
        j=1;
    }
    else if(j==1&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-3\n");
        p2=i;
        j=2;
     
    }
    else if(i==fintrama&&j==2&&trama==true){
        Serial.print(i);Serial.print("-4\n");
        SG901.write(p1);
        SG902.write(p2);
        j=0;
        trama=false;  
    }

}
Código de control con envió de 4 variables
CONTROL_EMISOR
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
//el emisor no necesita la librería servo (no controla ningún servo)

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL; /*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
int i=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int b1,b2,b3,b4;//enteros "bytes de datos" ENVIAR

void setup(){
  pinMode(8,INPUT);//pulsador lectura de estado led
  pinMode(7,INPUT);//pulsador lectura de estado led
  pinMode(2,OUTPUT);//pulsador lectura de estado led
  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openWritingPipe(direccion);//canal de escritura
  digitalWrite(2,HIGH);
  delay(1000);
  digitalWrite(2,LOW);
}

void loop(){
  b1 = map(analogRead(A5),0,1023,0,180);//lectura analógica asignada a un valor entero 0- 180
  b2 = map(analogRead(A4),0,1023,0,180);//lectura analógica asignada a un valor entero 0- 180
  b3 = digitalRead(8);//lectura digital asignada a un entero 0-1
  b4 = digitalRead(7);//lectura digital asignada a un entero 0-1
  //sección de envió de datos
  radio.write(&sincro, sizeof(sincro));
  radio.write(&b1, sizeof(b1));
  radio.write(&b2, sizeof(b2));
  radio.write(&b3, sizeof(b3));
  radio.write(&b4, sizeof(b4));
  radio.write(&fintrama, sizeof(fintrama));

}

CONTROL_RECEPTOR
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
#include <Servo.h>//para controlar el servomotor SG90

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL;/*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
Servo SG901;
Servo SG902;
boolean trama=false;
int i,j=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int b1,b2,b3,b4;//enteros "bytes de datos" RECIBIR Y ASIGNAR A ESTAS VARIABLES

void setup(){
  pinMode(5,OUTPUT);//led salida
  pinMode(4,OUTPUT);//led salida

  SG901.attach(7);//asigna el pin 7 al servo sg90_1
  SG902.attach(6);//asigna el pin 6 al servo sg90_2

  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openReadingPipe(1,direccion);//lectura de canal (canal,dirección)
  radio.startListening();

  SG901.write(90);
  SG902.write(90);
  digitalWrite(5,HIGH);
  digitalWrite(4,HIGH);
  delay(500);
  digitalWrite(5,LOW);
  digitalWrite(4,LOW);
  delay(250);

  Serial.println("INICIADO");//indica que ah iniciado a funcionar el receptor
}/*usamos radio.openReadingPipe(1,pipe) para poder leer y después radio.startListening()
    nos permite comenzar la escucha.*/

void loop(){
  if(radio.available()){
    radio.read(&i, sizeof(i));
    asignar();
  }
}

void asignar()
{
    if(i==sincro){
      trama=true;
      Serial.print(i);Serial.print("-1\n");
    }
    else if(j==0&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-2\n");
        b1=i;
        j=1;
    }
    else if(j==1&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-3\n");
        b2=i;
        j=2;
    }
    else if(j==2&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-4\n");
        b3=i;
        j=3;
    }
    else if(j==3&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-5\n");
        b4=i;
        j=4;
    }
    else if(i==fintrama&&j==4&&trama==true){
        Serial.print(i);Serial.print("-6\n");
        SG901.write(b1);
        SG902.write(b2);
        digitalWrite(5,b3);
        digitalWrite(4,b4);
        j=0;
        trama=false;  
    else if(i==fintrama&&j==4&&trama==true){
        j=0;
        trama=false;
    }
    }
}