Радиомодули nRF24L01+

Радиомодули nRF24L01+ и Arduino, часть 4, работа с прерыванием
код из видео



Код и видео с сайта





#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> // https://github.com/maniacbug/RF24
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const uint64_t pipe01 = 0xF0F1F2F3F4LL; 
volatile boolean flag_tx, flag_fail, flag_rx;

int i; ////

RF24 radio(9, 10); // CE, CSN
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){
        // настраиваем прерывание на 3 ноге
  attachInterrupt(1, check_radio, FALLING);
 
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  radio.begin(); 

  delay(2);
  radio.setChannel(9); // канал (0-127)
  radio.setDataRate(RF24_250KBPS);     
  radio.setPALevel(RF24_PA_HIGH); 
   
  radio.openReadingPipe(1,pipe01); // открываем трубу с индитификатором "pipe01"
   radio.startListening(); // включаем приемник, начинаем слушать трубу
}

//  radio.stopListening(); // останавливает приём (нужно перед началом передачи)

void check_radio(){ // обработчик прерывания
  bool tx, fail, rx;
    radio.whatHappened(tx,fail,rx); // читаем регистр
  flag_tx = tx; // 1 если успешно отправили данные
  flag_fail = fail; // 1 если данные не отправленны 
  flag_rx = rx;  // 1 если пришли данные для чтения
}

void loop(){ 
 
   if (flag_rx){ // если пришли данные для чтения
     float temperature = 0; // забераем их и выводим на экран
     radio.read(&temperature, sizeof(temperature));   

       lcd.setCursor(0, 0);
       if (temperature > 0) lcd.print("+");
       lcd.print(temperature);
       lcd.print("   ");
     
//       Serial.println(temperature);
//       Serial.println();
     
     flag_rx = 0;
  }
 
  if (flag_fail){ // если данные не отправленны
    flag_fail = 0;
 
  }
 
  if (flag_tx){ // если данные отправленны
  flag_tx = 0;
 
  }
 
 /////////////////// 
      // можно занятся другими делами.     
   lcd.setCursor(0, 1);
   i++;
   lcd.print(i);
   delay(250);
}

Комментарии

Популярные сообщения из этого блога

Перенос Armbian на SSD

Установка Home Assistants на Orange pi

Радиореле 220В 433МГц c кодировкой сигнала eV1527