Проблема зажатия кнопки.

Hozord
Offline
Зарегистрирован: 19.06.2020
  • #include <SPI.h> // Подключаем библиотеку SPI
    #include <nRF24L01.h> // Подключаем библиотеку nRF24L01
    #include <RF24.h> // Подключаем библиотеку RF24

    int data[1]; // Создаём массив для приёма данных
    RF24 radio(9,10); // Указываем номера выводов nRF24L01+ (CE, CSN)
    int button = 3; // Создаем переменную button и указываем номер вывода

    void setup(void){
    pinMode(button, INPUT); // Устанавливаем вывод 7 на вход
    radio.begin(); // Инициируем работу nRF24L01+
    radio.setChannel(100); // Указываем канал передачи (от 0 до 126)
    radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи (250KBPS, 1MBPS, 2MBPS)
    radio.setPALevel(RF24_PA_HIGH); // Указываем мощность передатчика (MIN=-18dBm, LOW=-12dBm, HIGH=-6dBm, MAX=0dBm)
    radio.openWritingPipe(0x0123456789LL);// Задаем идентификатором 0x0123456789LL для передачи данных данных
    }

    void loop(void)
    {
    if (digitalRead(button) == HIGH){ // Считываем переменную "button", если HIGH идем дальше, если LOW зацикливаемся
    data[0] = 123; // Записываем значение 123 в массив data
    radio.write(data, 1);} // Отправляем данные из массива data
    }

  •  
     
    //приемник

    #include <SPI.h> // Подключаем библиотеку SPI
    #include <nRF24L01.h> // Подключаем библиотеку nRF24L01
    #include <RF24.h> // Подключаем библиотеку RF24
    #include <Servo.h>

    Servo servo;

    int data[1]; // Создаём массив для приёма данных
    RF24 radio(9,10); // Указываем номера выводов nRF24L01+ (CE, CSN)
    int ser = 5; // Создаем переменную SW1 и указываем номер вывода

    void setup(void){

    servo.attach(5);
    delay(1000); // Ждем 1с
    pinMode(ser,OUTPUT); // Устанавливаем вывод 3 на выход
    radio.begin(); // Инициируем работу nRF24L01+
    radio.setChannel(100); // Указываем канал передачи (от 0 до 126)
    radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи (250KBPS, 1MBPS, 2MBPS)
    radio.setPALevel(RF24_PA_HIGH); // Указываем мощность передатчика (MIN=-18dBm, LOW=-12dBm, HIGH=-6dBm, MAX=0dBm)
    radio.openReadingPipe(1,0x0123456789LL);// Задаем идентификатором 0x1234567890LL для передачи данных данных
    radio.startListening ();
    }

    void loop(void)
    {
    if (radio.available()){ // Если в буфере поступили данные
    radio.read(data, 1); // Считываем данные с массива data и задаем количество считываемых байт
    if(data[0] == 123){ // Если в массиве data значение 123

    servo.write(140);} // 
    }

    }

    Добрый день! По примерам из сети собрал такой код. Цель в том что бы при нажатие кнопки на пульте двигалась серва на приемнике. Но при зажатие кнопки ничего не происходит. Не можете подсказать в чем ошибка?

b707
Offline
Зарегистрирован: 26.05.2017

а у вас хотя бы стандартные примеры из библиотеки NRf работают? а то мы тут сейчас будем думать над кодом - а окажется что вы или подключили неверно, или вообще у вас модули поддельные или дохлые

Hozord
Offline
Зарегистрирован: 19.06.2020

При обычном нажатие он совершает нужное движение. Но при повторном нажатии команда прерывается.  Как можно сделать так что бы при исполнении цикла он не прерывался если зажать кнопку или нажать дважды. 

 

b707
Offline
Зарегистрирован: 26.05.2017

используйте переменную-флаг. Сначала переменная = false, один раз повернули серву - выставите флаг = true и пока он true - больше серву не поворачивайте

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

Hozord пишет:
Но при зажатие кнопки ничего не происходит.

.....

При обычном нажатие он совершает нужное движение.

Так всё-таки, "ничего не происходит" или "совершает нужное движение"?

Ты, уж определись и перестань в показаниях путаться.

Hozord пишет:
Не можете подсказать в чем ошибка?

Можем.

Для начала, неправильно вставлен код. В таком виде его никто серьёзно обсуждать не будет. Во-вторых, проблема толком не описана. Ты предлагаешь нам самим догадываться чего ты хотел, что получилось и чем отличается первое от второго.

Вставь нормально код, опиши проблему, тогда поговорим.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

используйте переменную-флаг. Сначала переменная = false, один раз повернули серву - выставите флаг = true и пока он true - больше серву не поворачивайте

Логичнее наоборот, но это я просто придираюсь!