Advertisement
Villalba2006

POST_71_Emisor

Nov 29th, 2016
7,090
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.96 KB | None | 0 0
  1. /*  TITULO: Comunicación unidireccional entre Arduinos con módulos NRF24L01
  2.             >> NRF24L01_Unidireccional_Emisor
  3.            
  4.     AUTOR:
  5.    
  6.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  7.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  8.     - TWITTER: https://twitter.com/MarianoCampoGa
  9.     - CORREO: marianodc83@gmail.com
  10.    
  11.    
  12.     DESCRIPCIÓN DEL PROGRAMA
  13.    
  14.     Con este programa controlamos el encendido y apagado de un LED con un solo pulsador, mediante una
  15.     conexión por radiofrecuencia (RF) entre dos Arduinos, a través de módulos NRF24L01.
  16.     Cada vez que presionamos el pulsador se envía mediante RF el valor de la variable estado_pulsador[0],
  17.     si es la primera vez que lo presionamos se envía un "1" y si es la segunda vez un "0", repitiéndose
  18.     el proceso contínuamente, para que se encienda o apage un LED conectado al Arduino Receptor, que es el
  19.     que obtiene, a través de RF, el valor de la variable estado_pulsador[0]. En el supuesto de que nunca
  20.     presionemos el pulsador, no se envía ningún valor mediante RF y como consecuencia el LED permanecerá
  21.     apagado.
  22.    
  23.    
  24.     ESQUEMA DE CONEXION
  25.    
  26.                                       +-----+
  27.          +----[PWR]-------------------| USB |--+
  28.          |                            +-----+  |
  29.          |         GND/RST2  [ ][ ]            |
  30.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |    
  31.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |    
  32.          |                             AREF[ ] |
  33.          |                              GND[ ] |
  34.          | [ ]N/C                    SCK/13[ ] |   Pin "SCK" del módulo NRF24L01
  35.          | [ ]IOREF                 MISO/12[ ] |   Pin "MISO" del módulo NRF24L01
  36.          | [ ]RST                   MOSI/11[ ]~|   Pin "MOSI" del módulo NRF24L01
  37.          | [ ]3V3    +---+               10[ ]~|   Pin "CSN" del módulo NRF24L01
  38.          | [ ]5v    -| A |-               9[ ]~|   Pin "CE" del módulo NRF24L01
  39.          | [ ]GND   -| R |-               8[ ] |  
  40.          | [ ]GND   -| D |-                    |
  41.          | [ ]Vin   -| U |-               7[ ] |   PA
  42.          |          -| I |-               6[ ]~|  
  43.          | [ ]A0    -| N |-               5[ ]~|  
  44.          | [ ]A1    -| O |-               4[ ] |  
  45.          | [ ]A2     +---+           INT1/3[ ]~|  
  46.          | [ ]A3                     INT0/2[ ] |  
  47.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  48.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  49.          |            [ ] [ ] [ ]              |
  50.          |  UNO_R3    GND MOSI 5V  ____________/
  51.           \_______________________/
  52.  
  53.   NOTAS:
  54.    - Alimentación del módulo NRF24L01:
  55.      - GND del módulo NRF24L01--> GND de Arduino.
  56.      - VCC del módulo NRF24L01--> +3.3V de Arduino.
  57.    -  El pin "IRQ" del modulo NRF24L01 no se conecta a nuestro Arduino.
  58.    - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  59.    - Conexión PULL-DOWN del pulsador.
  60.        - PB conectado a VCC.
  61.        - PA conectado a GND a través de una R=10K ohms.      
  62. */
  63.  
  64.   // Incluimos las librerías necesarias
  65.   #include <SPI.h> // Librería para la comunicación SPI
  66.   // Librerías para el funcionamiento del módulo NRF24L01
  67.   #include <nRF24L01.h>
  68.   #include <RF24.h>
  69.  
  70.   // Declaramos los pines de control del módulo NRF24L01
  71.   #define CE 9
  72.   #define CSN 10
  73.  
  74.   // Se crea el objeto tipo RF24
  75.   RF24 radio(CE, CSN);
  76.  
  77.   // Se declara el canal (64 bits en hexadecimal) para transmisión RF
  78.   const uint64_t canal = 0xE8E8F0F0E1LL;
  79.  
  80.   // Variable que enviamos mediante RF (de tipo string siempre)
  81.   unsigned int estado_pulsador[1];
  82.  
  83.   int pulsador = 7; // Pin digital 7 para el pulsador
  84.  
  85.   // Inicializamos las variables internas para el pulsador
  86.     int encender = 0;
  87.     int anterior = 0;
  88.     int estado = 0;
  89.    
  90.   void setup()
  91.   {
  92.     pinMode(pulsador, INPUT); // Pin digital del pulsador como entrada 
  93.     radio.begin();  // Inicialización de la comunicación RF  
  94.     radio.openWritingPipe(canal); // Se abre el canal para escritura   
  95.   }
  96.  
  97.   void loop()
  98.   {
  99.     estado = digitalRead(pulsador); // Guardamos el estado actual del pulsador
  100.      
  101.     if(estado && anterior == 0) // Comparamos el estado actual y el anterior del pulsador
  102.     {
  103.       encender = 1 - encender;
  104.       delay(300); // Evita los posibles rebotes del pulsador.
  105.     }
  106.    
  107.     anterior = estado; // Actualizamos el estado del pulsador.
  108.    
  109.     if(encender) // Si el estado interno del pulsador pasa de "LOW" a "HIGH".
  110.     {
  111.       estado_pulsador[0] = 1; // La variable vale 1
  112.     }
  113.    
  114.     else // Si el estado interno del pulsador pasa de "HIGH" a "LOW".
  115.     {
  116.       estado_pulsador[0] = 0; // La variable vale 0
  117.     }  
  118.          
  119.     // Se envía el valor de la variable estado_pulsador[0] a través de RF
  120.     radio.write(estado_pulsador, sizeof(estado_pulsador));
  121.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement