Подскажите, вопрос про ДУ на nfr24
- Войдите на сайт для отправки комментариев
Чт, 06/09/2018 - 05:33
Здравствуйте!
Пытаюсь создать 8 канальный пульт ДУ на ардуино. В принципе все работает, но мне нужно добиться того, чтобы светодиоды горели непрерывно, пока нажата кнопка на пульте. А они моргают. Подскажите, как это сделать?
Код приемника:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(10, 9); // "создать" модуль на пинах 9 и 10 для НАНО/УНО byte pipeNo; byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; // возможные номера труб byte recieved_data[8]; // массив принятых данных const uint8_t led_pins[] = { 24,25,26,27,28,29,30,31 }; const uint8_t num_led_pins = sizeof(led_pins); uint8_t led_states[num_led_pins]; void setup() { pinMode(16, OUTPUT); pinMode(17, OUTPUT); pinMode(24, OUTPUT); pinMode(25, OUTPUT); pinMode(26, OUTPUT); pinMode(27, OUTPUT); pinMode(28, OUTPUT); pinMode(29, OUTPUT); pinMode(30, OUTPUT); pinMode(31, OUTPUT); Serial.begin(9600); radioSetup(); } void loop() { if (radio.available(&pipeNo)) { // слушаем эфир while (radio.available(&pipeNo)){ radio.read( &recieved_data, sizeof(recieved_data)); // чиатем входящий сигнал Serial.print("recieved data: "); int i = 8; while (i--){ if ( recieved_data[i] ){ led_states[i] ^= HIGH; digitalWrite(led_pins[i],led_states[i]); } } } } } void radioSetup() { // настройка радио radio.begin(); // активировать модуль radio.openReadingPipe(1, 0x1234567890LL); // хотим слушать трубу 0 radio.setChannel(5); // выбираем канал (в котором нет шумов!) radio.setPALevel(RF24_PA_HIGH); // уровень мощности передатчика radio.setDataRate(RF24_250KBPS); // скорость обмена radio.startListening(); // начинаем слушать эфир, мы приёмный модуль }
А зачем Вы их постоянно переключаете туда-сюда в строке №37? Или что по-Вашему в этой строке делается? По мне, так именно это: если постоянно приходит сигнал 1 ("гореть"), то строка №37 работает по логике: "если светится - включить, если не светится - выключить".
Как выражался Миша Горбачёв, "я вам даже больше скажу". Если светодиод уже горит - то единственный способ его выключить - дать ещё одну команду "гореть". По-другому он не выключится.
ТС, ты бы не ставил всяких крышечек, если не понимаешь для чего они.
точняк. у меня взгляд совсем замылился, вы помогли разобраться.