Передача данных при помощи модуля nrf24l01

Тема в разделе "Проводная и беспроводная связь", создана пользователем Nathan, 17 июн 2021.

  1. Nathan

    Nathan Нерд

    Здравствуйте. Подскажите, пожалуйста, почему некорректно принимаются данные при помощи модуля nRF24L01?
    Суть такова, что я хочу добавить тактовую кнопку в пульт дистанционного управления драйвера мотора.
    Использую простой скетч для передачи массива данных. Применяю плату RF-Nano, поэтому CE=10, CSN=9.
    Скетч передатчика:
    Код (C++):
    #include <SPI.h>                
    #include <nRF24L01.h>            
    #include <RF24.h>                
    RF24 radio(10,9);              
    int button = 3;                
    void setup(){
      Serial.begin(9600);            
      pinMode(button, INPUT);        
      radio.begin();                
      radio.setChannel(108);        
      radio.enableAckPayload();
      radio.enableDynamicPayloads();
      radio.openWritingPipe(0x0123456789LL);
    }

    void loop()
    {
      if (digitalRead(button) == HIGH){                  
        int data[1] = {123};
        radio.write(data, 1);
        Serial.println("INFO: Send data");
      }
    }
    Скетч приёмника:
    Код (C++):
    #include <SPI.h>                
    #include <nRF24L01.h>            
    #include <RF24.h>                

    RF24 radio(10,9);                
    int LED = 3;
    int data[1];                    
    void setup(){
      Serial.begin(9600);            

      pinMode(LED, OUTPUT);            
      radio.begin();                  
      radio.setChannel(108);          
      radio.enableAckPayload();
      radio.enableDynamicPayloads();
      radio.openReadingPipe(1,0x0123456789LL);
      radio.startListening();
    }
    void loop()
    {                      
      if (radio.available()){                
          radio.read(data, 1);                                
          if(data[0] == true){                  
             digitalWrite(LED, HIGH);        
             Serial.println("INFO: Received data");
             }
             delay(10);              
       }
      else{                          
          digitalWrite(LED, LOW);    
          delay(10);                
       }
    }
    Всё отлично отрабатывает, открываю монитор порта: данные отправляются с передатчика, получаю данные на приёмнике.

    Скетчи для передатчика и приёмника пульта вышли большими по тексту, поэтому прикрепил их к сообщению.
    Через Com порт вижу, что передатчик посылает данные, а приёмник получает некорректные данные. Pipe address одинаковый. На осциллографе вижу сигналы в несколько мс. В мониторе порта приёмника вот такое безобразие:
    [​IMG]
    Появляющиеся символы отличные от вопросов - это реакция на нажатие тактовой кнопки на передатчике.
     

    Вложения:

    Последнее редактирование: 17 июн 2021
  2. Un_ka

    Un_ka Гуру

    ...BBimage, конечно, хороший сайт, но бывали случаи, что такие сайты закрывались и потом ТС на форумах приходилось искать фотки...
    Фото можно было вставить, найдя код для вставки BBcode.
    Код (Text):
    [url=https://ibb.co/ns4ZKnF][img]https://i.ibb.co/0j18zFx/Com.png[/img][/url]
    Это выглядит так:
    [​IMG]
    А по существу в коде приёмника у вас целая головоломка с детективами компилятора, так, что попробуйте на компьютере выставить скорость 115200.
    P.S. "нет конца строки" - обычно там другая настройка.
     
  3. b707

    b707 Гуру

    Nathan, вы взяли очень сложный код для пульта и ничего в нем не понимая. банально вставили кусок из другого скетча.
    Вы реально думаете это будет работать? :)

    Наиболее точная аналогия тут - вот вы взяли кошку и пришили ей крылья дохлого орла... будет оно летать. как вы думаете?

    Что касается конкретного вопроса про мусор в мониторе порта - исходный код передатчика и приемника для пульта активно обмениваются сообщениями, значения которых вы не понимаете и потому выводите их в монитор неправильно. "Вопросы" в мониторе - это служебные сообщения пульта.

    Думаю. результатом подобного "улучшения" кода может быть только то. что у вас и остальные кнопки на пульте перестанут работать.
     
  4. b707

    b707 Гуру

    Кроме того, добавлю, что и тот простенький код передачи одной кнопки, что у вас вставлен в сообщение - вообще-то очень кривой. вы и отправляете и принимаете данные неправильно. То. что этот код работает - на самом деле чистая случайность.

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

    Потренируйтесь. для начала. на каких-то проектах попроще, этот на вашем нынешнем уровне знаний вам не осилить.
     
    Последнее редактирование: 17 июн 2021
  5. parovoZZ

    parovoZZ Гуру

    На алике доступны готовые радиомашинки со всем кнопками и даже программируются. Я думаю, надо начать с этого.
     
  6. Nathan

    Nathan Нерд

    Кошка летает.
     
    Рокки1945 нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    Кошка— Птица гордая! Не пнешь—не полетит
     
    Nathan нравится это.