Подскажите, вопрос про ДУ на nfr24

saulsaul
Offline
Зарегистрирован: 06.09.2018

Здравствуйте!

Пытаюсь создать 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();  // начинаем слушать эфир, мы приёмный модуль
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

saulsaul пишет:
А они моргают.

А зачем Вы их постоянно переключаете туда-сюда в строке №37? Или что по-Вашему в этой строке делается? По мне, так именно это: если постоянно приходит сигнал 1 ("гореть"), то строка №37 работает по логике: "если светится - включить, если не светится - выключить".

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ЕвгенийП пишет:
если постоянно приходит сигнал 1 ("гореть"), то строка №37 работает по логике: "если светится - включить, если не светится - выключить".

Как выражался Миша Горбачёв, "я вам даже больше скажу". Если светодиод уже горит - то единственный способ его выключить - дать ещё одну команду "гореть". По-другому он не выключится.

ТС, ты бы не ставил всяких крышечек, если не понимаешь для чего они.

saulsaul
Offline
Зарегистрирован: 06.09.2018

точняк. у меня взгляд совсем замылился, вы помогли разобраться.