nRF24L01

Buonasera atutti, avendo ritrovato dei nRF24 (comprensivi di basette per l’alimentazione a5V) ho deciso di utilizzarli.

Per aumentare la portata ho predisposto un ponte radio, di seguito i programmi:

a) Trasmettitore (Arduino UNO):

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8);

const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  Serial.println("Trasmettitore 01");
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MAX);
  radio.stopListening();
}

int stato = 0;
void loop() {
  radio.write(&stato, sizeof(stato));
  Serial.println(stato);
  delay (1000);
  stato =! stato;
}

b) ponte radio (Arduino UNO)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8);

const byte addresses[][6] = {"00001", "00002"};
int stato = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Ricevitore Ponte 01");
  //  pinMode(led1, OUTPUT);
  radio.begin();
  radio.openReadingPipe(0, addresses[0]);
  radio.openWritingPipe(addresses[1]);
  radio.setPALevel(RF24_PA_MAX);
  delay(3000);
}

void loop() {
  delay(50);
  radio.startListening();
  if (radio.available()) {
    Serial.println("Riceve");
    while (radio.available()) {
      radio.read(&stato, sizeof(stato));
      Serial.println(stato);
    }
    delay(5);

    radio.stopListening();
    Serial.print("Trasmette: ");
    Serial.println(stato);
    radio.write(&stato, sizeof(stato));
    delay(50);
  }
}

c) ricevitore (Arduino Pro Mini a 5V - 16 MHz):

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8);

const int led1 = 4; //verde
const int led2 = 5; //rosso
const byte address[6] = "00002";
int stato = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Ricevitore 01");
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MAX);
  radio.startListening();
  digitalWrite (led1, LOW);
  digitalWrite (led2, HIGH);
}

void loop() {  
  if (radio.available()) {
    Serial.println("Riceve");
    radio.read(&stato, sizeof(stato));
    Serial.println(stato);
    delay(5);

    if (stato == 1) {
      digitalWrite (led1, HIGH);
      digitalWrite (led2, LOW);
    }
    else {
      digitalWrite (led1, LOW);
      digitalWrite (led2, HIGH);
    }
  }
}

Tutto bene per le parti a) e b), il ricevitore invece continua a stampare sulla seriale “Ricevuto” e “0” ad un intervallo di pochi decimi invece che di ca 1 secondo.

Allego collegamenti, provvisoriamente l’alimentazione viene fornita tramite programmatore YP-05.

Saluti

Enrico

RX_Avviso_01_schem.pdf (472 KB)

Saldatura sul PIN 8 difettosa!!!!