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;
    }
    }
}

jueves, 21 de abril de 2016

Prueba de cambio de estado de pinza, cerrado-abierto, con pulsador

Prueba de cambio de estado de pinza cerrado abierto con pulsador
#include <Servo.h>
Servo servo4;
//veriables a copiar
int pasopinza=0,estant=0;
boolean pinza_cerrada=false;
//
void setup() 
{
  pinMode(5,INPUT);
  servo4.attach(11);
  Serial.begin(9600);
}

void loop() 
{
  boton_pinza();
  comparacion_pinza();
  servo4.write(pasopinza);
}
void boton_pinza()
{
  if((digitalRead(5))==false&&(estant==0))
  {
    delay(20);
    if((digitalRead(5))==true)
    {
      estant=1;
      pinza_cerrada=true;
    }
  }
  else if((digitalRead(5))==false&&(estant==1))
  {
    delay(20);
    if((digitalRead(5))==true)
    {
      estant=0;
      pinza_cerrada=false;
    }
  }
}
void comparacion_pinza()
{
  if(pinza_cerrada==false)
  {
    pasopinza=180;
  }
  else if(pinza_cerrada==true)
  {
    pasopinza=0;
  }

}

miércoles, 20 de abril de 2016

Medición de limites analógicos potenciometro (para 180grds de un servomotor)

Medición de limites analógicos potenciometro.
esta prueba la realice para saber un punto aproximado para delimitar los puntos de un potenciometro y hacer mas preciso el movimiento de un servomotor.
#include <Servo.h>
Servo servo1;
int paso=0;
void setup() {
 servo1.attach(9);
 Serial.begin(9600);

}

void loop() {
  float pot=analogRead(A1);
  paso=map(pot,157,873,0,180);
 servo1.write(paso);
 Serial.print("angulo:");
 Serial.print(paso);
  Serial.print("pot:");
 Serial.print(pot);
 delay(25);

}

Lectura de un potenciometro (entradas analogicas)

Lectura de un potenciometro
int i=0,j=0;
void setup() {
 Serial.begin(9600);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
}

void loop() {
 if(digitalRead(6)==true)
 {
  delay(250);
  if(digitalRead(6)==false)
  {
    i++;
   
    Serial.print("\na");
    Serial.print(i);
    delay(25);
   
  }
 }
 if(digitalRead(7)==true)
 {
  delay(250);
  if(digitalRead(7)==false)
  {
    j++;
    Serial.print("b");
    Serial.print(j);
    delay(25);
  }
 }

}

Contador de pulsos

Contador de pulsos
int i=0,j=0;
void setup() {
 Serial.begin(9600);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
}

void loop() {
 if(digitalRead(6)==true)
 {
  delay(250);
  if(digitalRead(6)==false)
  {
    i++;
   
    Serial.print("\na");
    Serial.print(i);
    delay(25);
   
  }
 }
 if(digitalRead(7)==true)
 {
  delay(250);
  if(digitalRead(7)==false)
  {
    j++;
    Serial.print("b");
    Serial.print(j);
    delay(25);
  }
 }

}