nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. ИгорьК

    ИгорьК Гуру

    А Вы не пробовали сотовый телефон класть на ардуинку со скетчем Blink?
    Вы же такие наводки даете на модуль, что он просто обязан бредить. Не понимаю Ваших экспериментов.
    Что мешает просто выключить другую сторону в коннекте?
     
  2. ИгорьК

    ИгорьК Гуру

    Дык... там цель экспериментов не в этом.
     
  3. ИгорьК

    ИгорьК Гуру

    Мы о разном. MessageMRF - это не стринг. Это до 32 восьмибитных ячеек, заполняемых чем передатчик прислал, насколько мне помнится. Чтение осуществляется не до нахождения нуля, а по указанной длинне. Функция Стринг же, полагаю, как раз добавляет ноль в конец. Если в буфере бред, то он вс равно будет оканчиваться нулем обязательно. Функция отсчитает количество байт, переведет их в char и завершит нулем.
     
  4. geher

    geher Гуру

    Откуда String узнает, что там 32 ячейки?
    Или это не конструктор соответствующего класса, который узнает длину как раз из strlen и нули никуда не добавляет?
     
  5. ИгорьК

    ИгорьК Гуру

    Из определения типа. MessageNRF где-то в теле программы определено как-то. И точно не как стринг. И даже если как стринг - он сначала будет прочитан из буфера по количеству байтов, а не по оконечному нулю. Но так не делается в данном случае.
     
  6. unsigned long MessageNRF;

    Мы и хотим избавиться от всего, от питания, наводок, чтобы выполнял другой код программы. А пока NRF слушает и зависает. Другой код не выполняется. Сейчас сделаю скетч в котором только NRF и counter, и тогда точно увижу что тупит, либо кривой код, либо от NRF все плата. Если слетели настройки, то код по любому должен работать паралельно
     
  7. ИгорьК

    ИгорьК Гуру

    Ни разу NRF не вешал устройства, у меня их работает 4. Не передавал, передавал бред, но не завешивал.
     
  8. нечего он никаму не должен.

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

    ИгорьК Гуру

    А если его в морозильник? А если его в микроволновку?
     
  10. врядли он там повиснит, максимум передавать не сможет.

    видимо дернуть питание это единственный способ :rolleyes:
     
  11. Код (Text):
    //-------------------------------------------------------------------------------------------------
    //Функция обработки сенсора для других устройств
    //-------------------------------------------------------------------------------------------------
    void UpdateSensor()
    {
      boolean changed = debouncer1.update();
      if (changed)
      {
        int value = debouncer1.read();
        if (value == HIGH)
        {
          buttonState1 = 0;
         
          SensorCounter++;
         
          if (SensorCounter>=10) { SensorCounter=1; }
         
          //Serial.println(SensorCounter);
         
          send_answer(SensorCounter,NRF);
               
        }
        else {      
          buttonState1 = 1;
          buttonPressTimeStamp1 = millis();
        }
      }
    }

    //---------------------------------------------------------------------------------------------
    //Функция отправки команды передатчику
    //---------------------------------------------------------------------------------------------
    void send_answer(unsigned long svalue,uint64_t p)
    {
                radio.stopListening();  //Перестаем слушать
                radio.openWritingPipe(p); //Открывем трубу для отправки
                radio.flush_tx();
                radio.write(&svalue,sizeof(svalue)); // Отправляем ответ
                radio.startListening();
                Serial.println(SensorCounter);
    }

    void loop()
    {

      UpdateSensor();

      if (radio.available())
        {
          radio.read(&MessageNRF,sizeof(MessageNRF));
        }
         
    }
    Вот набросал код. Ардуино виснит после строчки radio.write(&svalue,sizeof(svalue)); // Отправляем ответ
    Думаю как раз когда включает прослушку
    radio.startListening();
     
  12. ИгорьК

    ИгорьК Гуру

    Отключите библиотеку этой дебонусной кнопки. Попробуйте без нее. Обычно странные вещи с микроконтроллерами происходят тогда, когда в дело вмешивается ненужное прерывание.
    Не виснет ардуинка на этих командах обычно.
    Вы понимаете о чем я?
     
  13. geher

    geher Гуру

    Странно. Там нечему вешаться. В библиотеке RF24 только обмен по SPI и дергание пинов.
    Есть один цикл в radio.write, да и тот по таймауту вываливается.
     
  14. Значит разобрались: При отключении NRF питания плата зависает.
     
  15. Теперь разобраться бы если передача не работает, что бы код не вис.
     
  16. ИгорьК

    ИгорьК Гуру

    А в чем практическая польза этого научного знания?
    Уже пару раз предлагал Вам отключить библиотеку антидребезга - может попробуете все таки, вместо очередной попытки поджечь модуль?
     
  17. Игорь, библиотека не причем. Уже проверили. Сейчас сделали глушилку сигнала NRF, из фольги. Передача виснет, код останавливается. Проблем в том что она подвисает и вешает код.
     
  18. Код (Text):
    //-------------------------------------------------------------------------------------------------
    //Функция обработки сенсора для других устройств
    //-------------------------------------------------------------------------------------------------
    void UpdateSensor()
    {
          SensorCounter++;
         
          if (SensorCounter>=10) {
           
          SensorCounter=1;
         
          send_answer(millis(),NRF);
       
        }
       
        Serial.println(SensorCounter);
         
     
    }

    //---------------------------------------------------------------------------------------------
    //Функция отправки команды передатчику
    //---------------------------------------------------------------------------------------------
    void send_answer(unsigned long svalue,uint64_t p)
    {
               
                Serial.println("Sending");
                radio.stopListening();  //Перестаем слушать
                radio.openWritingPipe(p); //Открывем трубу для отправки
                radio.flush_tx();
                radio.write(&svalue,sizeof(svalue)); // Отправляем ответ
                radio.startListening();
               
         
               
    }

    void loop()
    {

      UpdateSensor();
         
     
          if (radio.available())
            {
              radio.read(&MessageNRF,sizeof(MessageNRF));
             
            }
     
    }
    Вот самый простой код
     
  19. Практическая польза, в том что мы теперь знаем что если отрубится питание то будет пи.... Поэтому поставим дополнительное
     
  20. на нем тоже виснет??

    я бы наверное измерил питание на модуле, а вдруг там не 3,3.
    напаял бы керамику на ноги модуля, выбросил бы ту непонятную кренку, там lm1117 ?? ей чтобы дать 3,3, нужно минимум 4,75 на входе, которых там может и не быть.
     
    ИгорьК нравится это.