Радиомодули 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);
}
код из видео
Код и видео с сайта
#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);
}
Комментарии
Отправить комментарий