Sensor de Radio ATmega328P-PU nRF24L01 + (10 / 11 paso)

Paso 10: Modifica el bosquejo de ejemplo: led_remote.cpp

Archivo: RF24/examples/Usage/led_remote/led_remote.pde

 /*Copyright (C) 2011 J. Coliz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. * * * modified 11/7/2015 ST * * Using pins D2 and D3 * * A2 to GND sets board as receiver (LED Board) * * * * * * Example LED Remote * * This is an example of how to use the RF24 class to control a remote * bank of LED's using buttons on a remote control. * * On the 'remote', connect any number of buttons or switches from * an arduino pin to ground. Update 'button_pins' to reflect the * pins used. * * On the 'led' board, connect the same number of LED's from an * arduino pin to a resistor to ground. Update 'led_pins' to reflect * the pins used. Also connect a separate pin to ground and change * the 'role_pin'. This tells the sketch it's running on the LED board. * * Every time the buttons change on the remote, the entire state of * buttons is sent to the led board, which displays the state. */ 

Preámbulo de la norma, con nota de modificación.

 #include #include "nRF24L01.h" #include "RF24.h" #include "printf.h" 

Las bibliotecas de la carga

 // // Hardware configuration // Set up nRF24L01 radio on SPI bus plus pins 7 & 8 (CE & CS) RF24 radio(7,8); 

CE y CSN el perno asignaciones, estos he modificado como utilizo los pines 7 y 8 no 9 y 10.

 // sets the role of this unit in hardware. Connect to GND to be the 'led' board receiver // Leave open to be the 'remote' transmitter const int role_pin = A2; 

He modificado el Role_pin, como me gustaría usar A0 de una fotorresistencia, pero mantienen cierta compatibilidad con este código modificado.

 // Pins on the remote for buttons const uint8_t button_pins[] = { 2,3 }; const uint8_t num_button_pins = sizeof(button_pins); 

Estoy usando sólo dos botones, más que suficiente para mis propósitos y también tienen algún propósito futuro.

 // Pins on the LED board for LED's const uint8_t led_pins[] = { 2,3}; const uint8_t num_led_pins = sizeof(led_pins); 
 // // Topology // Single radio pipe address for the 2 nodes to communicate. const uint64_t pipe = 0xE8E8F0F0E1LL; 
 // // Role management // // Set up role. This sketch uses the same software for all the nodes in this // system. Doing so greatly simplifies testing. The hardware itself specifies // which node it is. // // This is done through the role_pin // The various roles supported by this sketch typedef enum { role_remote = 1, role_led } role_e; // The debug-friendly names of those roles const char* role_friendly_name[] = { "invalid", "Remote", "LED Board"}; // The role of the current running sketch role_e role; // // Payload // 
 uint8_t button_states[num_button_pins]; uint8_t led_states[num_led_pins]; 
 // // Setup // 
 void setup(void) { // // Role // // set up the role pin pinMode(role_pin, INPUT); digitalWrite(role_pin,HIGH); delay(20); // Just to get a solid reading on the role pin // read the address pin, establish our role if ( digitalRead(role_pin) ) role = role_remote; else role = role_led; 
 // // Print preamble // 
 Serial.begin(57600); printf_begin(); printf("\n\rRF24/examples/led_remote/\n\r"); printf("ROLE: %s\n\r",role_friendly_name[role]); 
 // // Setup and configure rf radio // 
 radio.begin(); 
 radio.setDataRate(RF24_250KBPS); // options are; RF24_250KBPS, RF24_1MBPS, RF24_2MBPS 
 // // Open pipes to other nodes for communication // 
 // This simple sketch opens a single pipes for these two nodes to communicate // back and forth. One listens on it, the other talks to it. 
 if ( role == role_remote ) { radio.openWritingPipe(pipe); } else { radio.openReadingPipe(1,pipe); } 
 // // Start listening // 
 if ( role == role_led ) radio.startListening(); 
 // // Dump the configuration of the rf unit for debugging // 
 radio.printDetails(); 
 // // Set up buttons / LED's // 
 // Set pull-up resistors for all buttons if ( role == role_remote ) { int i = num_button_pins; while(i--) { pinMode(button_pins[i],INPUT); digitalWrite(button_pins[i],HIGH); } } 
 // Turn LED's ON until we start getting keys if ( role == role_led ) { int i = num_led_pins; while(i--) { pinMode(led_pins[i],OUTPUT); led_states[i] = HIGH; digitalWrite(led_pins[i],led_states[i]); } pinMode(4,OUTPUT); digitalWrite(4,LOW); } } 
 // // Loop // 
 void loop(void) { // // Remote role. If the state of any button has changed, send the whole state of // all buttons. // if ( role == role_remote ) { // Get the current state of buttons, and // Test if the current state is different from the last state we sent int i = num_button_pins; bool different = false; while(i--) { uint8_t state = ! digitalRead(button_pins[i]); if ( state != button_states[i] ) { different = true; button_states[i] = state; } } 
 // Send the state of the buttons to the LED board if ( different ) { printf("Now sending..."); bool ok = radio.write( button_states, num_button_pins ); if (ok) printf("ok\n\r"); else printf("failed\n\r"); } 
 // Try again in a short while delay(20); } 
 // // LED role. Receive the state of all buttons, and reflect that in the LEDs // 
 if ( role == role_led ) { // if there is data ready if ( radio.available() ) { // Dump the payloads until we've gotten everything while (radio.available()) { // Fetch the payload, and see if this was the last one. radio.read( button_states, num_button_pins ); 
 // Spew it printf("Got buttons\n\r"); digitalWrite(4,HIGH); delay(20); digitalWrite(4,LOW); delay(30); digitalWrite(4,HIGH); delay(20); digitalWrite(4,LOW); delay(30); digitalWrite(4,HIGH); delay(20); digitalWrite(4,LOW); 

Indicar una lectura en el pin digital 4, a parpadear el indicador de lectura led, antes de cambiar el estado de los otros dos led según la prensa del botón.

 // For each button, if the button now on, then toggle the LED int i = num_led_pins; while(i--) { if ( button_states[i] ) { led_states[i] ^= HIGH; digitalWrite(led_pins[i],led_states[i]); } } } } } } // vim:ai:cin:sts=2 sw=2 ft=cpp 

Artículos Relacionados

Frambuesa Pi nRF24L01 + colector de datos con formularios de Google

Frambuesa Pi nRF24L01 + colector de datos con formularios de Google

Un Pi de frambuesa sin cabeza con un nRF24L01 + transceptor de radio de 2,4 GHz, conexión a internet. Recibir paquetes de datos de sensores remotos y la presentación de los datos a un formulario de Google para posterior visualización y presentación.L
Registrador de temperatura de frambuesa Pi por Radio

Registrador de temperatura de frambuesa Pi por Radio

Este proyecto hace uso de una frambuesa pi, para leer la temperatura de varios sensores de radio y almacenarlos en una base de datos Sqlite.El mismo frambuesa pi se utiliza para servir páginas web con la gráfica de la temperatura adquirida.Ver demost
Inalámbrico infrarrojo rojo dispositivo de detección perimetral

Inalámbrico infrarrojo rojo dispositivo de detección perimetral

Este Instructable le proporcionará las instrucciones para construir un Infra rojo perímetro detección dispositivo Wireless. El dispositivo consta de dos partes: el transmisor y el receptor. El transmisor detecta movimiento, parpadea un LED infra rojo
Silla de ruedas eléctrica controlador

Silla de ruedas eléctrica controlador

Historia:Mi amigo vino a mí con una simple petición. Para reparar su silla de ruedas eléctrica después de que fue dañado por rayo en el cargo.La silla estaba equipada con un controlador de tiburón, y de apertura, hubo graves flash-overs visible en el
BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

Hola, soy David y en este instructable te voy a mostrar cómo hice este hexápodo cuyo nombre es Hexdrake.Desde los 16 me interesé en electrónica y más tarde en robótica. Después de conseguir algún nivel y programación con arduino que decidí construir
Control remoto bricolaje para Hexdrake

Control remoto bricolaje para Hexdrake

Hola, soy David y este es mi segundo instructable :).Es una continuación de mi primer instructable, donde me muestra cómo construí mi pequeño hexápodo, Hexdrake:En este nuevo instructivo te voy a mostrar cómo hice este controlador protoype para Hexdr
Smart Sockets

Smart Sockets

Hoy en día Internet es uno de lo más emocionante de alta tecnología. Internet de las cosas - siguiente paso de la misma. Este verano yo y mis compañeros de equipo encontraron Intel IoT Roadshow y decidieron a probar esto. Habíamos hecho nuestro prime
Aerodeslizador RC + mando a distancia personalizado

Aerodeslizador RC + mando a distancia personalizado

¿Te gusta RC vehículos? ¿Es usted quiere volar pero es miedo a las alturas? O ¿te gusta solo el desafío de controlar un vehículo con fricción de tierra baja?... o quizás te apetece sólo aerodeslizadores para algunas o ninguna razón en particular...Si
Rave Rover - etapa de danza Mobile

Rave Rover - etapa de danza Mobile

Rover Rave fue diseñado y construido para ser una plataforma de danza portátiles para fiestas, raves y otros problemas podemos entrar! Voy a entrar en tanto detalle como pueda explicar el proceso entero y donde encontrar piezas y otros accesorios. Co
Pintura de camion bombero

Pintura de camion bombero

y otro proyecto desde hace mucho tiempo, que comenzó con nosotros pintando el cuarto de mi hijoMi hijo también quería tener un carro de bombero pintado en su pared. Pero tuve algunas cosas de electrónica en mi mente que quería probar de todos modos,
Hacer un coche RC 4WD

Hacer un coche RC 4WD

este es mi primer instructables estoy escribiendo acerca de cómohacer su coche RC. La mayoría de nosotros quiere hacer nuestros propios coches RC por encargo por lo que podríamos ser capaces de añadir diferentes motores con RPM alta o baja RPM con to
Probador de la célula Solar de Arduino

Probador de la célula Solar de Arduino

cuando estoy construyendo arbustos Solar y otras creaciones de energía solar, a menudo limpian las células de varios dispositivos estándares tales como lámparas solares de jardín o de seguridad. Pero estas células raramente están etiquetadas como su
NRF24L01 mayor radio con una modificación de DIY antena dipolo.

NRF24L01 mayor radio con una modificación de DIY antena dipolo.

La situación fue que pude sólo transmitir y recibir a través de 2 o 3 paredes con una distancia de aproximadamente 50 pies, utilizando módulos estándar nRF24L01 +. Esto fue suficiente para mi uso.Antes había Intenté agregar condensadores recomendados
Primeros pasos con Arduino - Nordic NRF24L01 Radios

Primeros pasos con Arduino - Nordic NRF24L01 Radios

En este tutorial, usaremos un par de Nordic NRF24L01 Radios para comunicarse entre dos Arduinos separados.NRF24L01 radios son tablas muy baratos, ideales para la comunicación de corto alcance entre dispositivos múltiples.Vamos a establecer una Arduin