Llevaba un tiempo sin jugar con los modulos NRF24L01 y ahora me apetecia hacer un mando RC. Así que ni corto ni perezoso me compré un par de NRF con amplificador y antena.
Realize la siguiente conexión:
En el emisor subí el siguiente código.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const int pinCE = 9;
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);
const uint8_t pipe[5] = "nodo1";
void setup() {
// put your setup code here, to run once:
radio.begin();
radio.openWritingPipe(pipe);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
// put your main code here, to run repeatedly:
const char text[]="Hello Wrold";
radio.write(&text, sizeof(text));
delay(1000);
}
Y en el receptor lo de aquí:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const int pinCE = 9;
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);
const uint8_t pipe[5] = "nodo1";
char data[16];
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
// put your main code here, to run repeatedly:
if ( radio.available() ) {
radio.read(data, sizeof(data));
Serial.println(data);
}
Y funcionó a las mil maravillas.
Luego probé el siguiente código:
Emisor:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 2
RF24 radio(9,10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
boolean buttonState = 0;
void setup() {
pinMode(led, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[1]); // 00002
radio.openReadingPipe(1, addresses[0]); // 00001
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
delay(5);
radio.stopListening();
int potValue = analogRead(A0);
int angleValue = map(potValue, 0, 1023, 0, 180);
radio.write(&angleValue, sizeof(angleValue));
delay(5);
radio.startListening();
while (!radio.available());
radio.read(&buttonState, sizeof(buttonState));
if (buttonState == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
Receptor:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define button 4
RF24 radio(9, 10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
Servo myServo;
boolean buttonState = 0;
void setup() {
pinMode(button, INPUT);
myServo.attach(5);
radio.begin();
radio.openWritingPipe(addresses[0]); // 00001
radio.openReadingPipe(1, addresses[1]); // 00002
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
delay(5);
radio.startListening();
if ( radio.available()) {
while (radio.available()) {
int angleV = 0;
radio.read(&angleV, sizeof(angleV));
myServo.write(angleV);
}
delay(5);
radio.stopListening();
buttonState = digitalRead(button);
radio.write(&buttonState, sizeof(buttonState));
}
}
El código no es mio, lo saque de la página HowToMecatronics, tan solo modificando los pines CE y CSN a los que yo usado. También cambien el pin "led" del emisor que en el programa estaba en el pin 12 y ya sabemos que eso es imposible puesto que es la señal MISO y lo cambié por 2.
Conecté obviamente el led, potenciometro y servo.
Subí el programa y no funcionó, me lo esperaba, así que empecé a ver donde podría estar el fallo, como no encontré nada volví a subir los dos primeros programas de emisor/receptor y me encontré que tampoco funcionaba.
Descarto una mala conexión, puesto que he utilizado la función printPrettyDetails de la libreria RF24 y me respone datos de información del chip.
¿Qué creéis que está pasando, alguna sugerencia?