Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился

У меня есть два модуля nRF24L01, они оба подключены к сенсорному экрану, который имеет специальные порты для этого типа модуля на Arduino Unos.

Сенсорный экран с nRF24LO1 внутри

У меня есть этот код на Arduino, который посылает сигнал:

#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <SPI.h>
#include <Wire.h>

//0 = стоп, 1 = влево, 2 = вправо, 3 = вперед, 4 = назад
long command;
long last_command;

long Joystick_1_X;
long Joystick_1_Y;
long Joystick_1;

void setup() {
  // поместите сюда код установки для однократного запуска:
  Mirf.spi = &MirfHardwareSpi;  
  Mirf.init(); 
  Mirf.setTADDR((byte *)"serv1");
  Mirf.payload = sizeof(long);
  Mirf.config(); 
  Serial.begin(115200);
}

void loop() {
  Joystick_1_X = analogRead(A0);
  Joystick_1_Y = analogRead(A1);

  if(Joystick_1_X < 450){
     command = 1;
  }else if(Joystick_1_X > 600){
    command = 2;
  }else if(Joystick_1_Y > 600){
    command = 3;
  }else if(Joystick_1_Y < 400){
    command = 4;
  }else{
    command = 0;
  }
  if(command == last_command){
  }else{
    Mirf.send((byte *)&command);
    last_command = command;
   }
  }

и этот код на Arduino, который получает

#include "SPI.h"
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"

int TN1= 3;
int TN2 = 4;
int ENA = 9;

int TN4 = 5;
int TN3 = 6;
int ENB = 10;

long data;

void setup() {
 pinMode(TN1, OUTPUT);
 pinMode(TN2, OUTPUT);
 pinMode(TN3, OUTPUT);
 pinMode(TN4, OUTPUT);
 pinMode(ENA, OUTPUT);
 pinMode(ENB, OUTPUT);

 Mirf.spi = &MirfHardwareSpi;
 Mirf.init();
 Mirf.setRADDR((byte *)"serv1");
 Mirf.payload = sizeof(long);
 Mirf.config();
 Serial.begin(115200);
 Serial.print("begin");

}

void loop() {

  // поместите сюда ваш основной код для многократного запуска:
  receiveCommand();
  if(data == 1){
    left();
  }else if(data == 2){
    right();
  }else if(data == 3){
    forward();
  }else if(data == 4){
    backwards();
  }else if(data == 0){
    stop_rover();
  }
}

void receiveCommand(){
  if(!Mirf.isSending() && Mirf.dataReady()){
    Mirf.getData((byte *)&data);
    Mirf.rxFifoEmpty();
    Serial.print(data);
  }else{
    Serial.println("No data to be recieved");
  }
}

void forward(){
  digitalWrite(ENB, HIGH);
  digitalWrite(ENA, HIGH);
  digitalWrite(TN4, HIGH);
  digitalWrite(TN3, LOW);
  digitalWrite(TN1, HIGH);
  digitalWrite(TN2, LOW);
}

void backwards(){
  digitalWrite(ENB, HIGH);
  digitalWrite(ENA, HIGH);
  digitalWrite(TN4, LOW);
  digitalWrite(TN3, HIGH);
  digitalWrite(TN1, LOW);
  digitalWrite(TN2, HIGH);
}

void left(){
   digitalWrite(ENA, HIGH);
   digitalWrite(TN1, HIGH);
   digitalWrite(TN2, LOW);
}

void right(){
  digitalWrite(ENB, HIGH);
  digitalWrite(TN4, HIGH);
  digitalWrite(TN3, LOW);
}

void stop_rover(){
  digitalWrite(ENB, LOW);
  digitalWrite(ENA, LOW);
  digitalWrite(TN4, LOW);
  digitalWrite(TN3, LOW);
  digitalWrite(TN1, LOW);
  digitalWrite(TN2, LOW);
}

Это работало, и ровер крутил колеса, когда пульт дистанционного управления передал сигнал, но затем он просто остановился. На сенсорном шилде написано, что они подключены к порту 3V, я пробовал использовать библиотеку RF24, и это тоже не сработало.

Мы будем очень признательны за любую помощь.

, 👍2

Обсуждение

Не могли бы вы попробовать встроенные проверки самопроверки, которые поставляются с библиотекой RF24, поддерживаемой TMRh20? Все ли они работают нормально?, @Avamander

Я загрузил файл GettingStarted.ino на два Arduino, передающий узел распечатал это Теперь отправка Отправлено 18204112, получен ответ 0, задержка приема-передачи 18204112 микросекунд Отправка Отправлено 28434792, получен ответ 0, двусторонняя задержка 28434792 мкс и принимающий узел распечатал этот отправленный ответ 251854848 Отправлен ответ 0, @Richard Beattie

Что-то не так. Проверьте проводку и, если можете, припаяйте электролитические колпачки к контактам GND и 3,3 В радиомодуля., @Avamander

Нет проводки, nRF24L01 подключен к датчику, который находится на ардуино, я разместил изображение экрана датчика с nRF24L01 выше., @Richard Beattie

Правильно ли определены выводы в скетче? Не могли бы вы припаять колпачки к контактам питания радиомодуля?, @Avamander

Я попытался изменить определенные контакты на что-то другое, но я продолжаю получать сообщение «Теперь отправка». неуспешный Отправлено 3496020, получен ответ 0, задержка приема-передачи 3496020 микросекунд. И у меня нет шапки, @Richard Beattie

Что говорит другой узел? Кроме того, пожалуйста, купите несколько конденсаторов и припаяйте их, это может решить вашу проблему., @Avamander

Перепаял конденсаторы, но все равно приходит Отправлено 28434792, Получил ответ 0,, @Richard Beattie

Что говорит второй узел? Вы проверили, правильно ли определены ваши контакты CS и CE?, @Avamander

Принимающий узел пишет «Отправленный ответ 1795», «Отправленный ответ 0», «Отправленный ответ 259», «Отправленный ответ 0», и когда я поменял местами определенные контакты CS и CE, узел написал «Теперь отправка». неуспешный Ошибка, время ответа истекло., @Richard Beattie

Попробуйте пример с именем Transfer. Задержка в оба конца и отправленные ответы странные, хотя контакты правильные, и вы припаяли конденсаторы на модулях NRF24L01+. Странный., @Avamander

Я не думаю, что это сработало, принимающий узел написал это Rate: 365,92 Количество полезной нагрузки: 11435 Рейтинг: 16,54 Количество полезной нагрузки: 517 Ставка: 0.00 Количество полезной нагрузки: 0 Ставка: 0.00 Количество полезной нагрузки: 0 Ставка: 0.00 Количество полезной нагрузки: 0 Скорость: 0,00, и передающий узел написал это Инициирование базовой передачи данных Передача завершена со скоростью 219,18 КБ/с. 0 из 10000 пакетов не удалось отправить Запуск базовой передачи данных Передача завершена со скоростью 219,18 КБ/с. 0 из 10000 пакетов не удалось отправить, @Richard Beattie

Также они оба написали в начале это также в начале они оба сказали это STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0 RX_ADDR_P0-1 = 0x0000000000 0x0000000000 RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00 TX_ADDR = 0x0000000000 RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00 EN_AA = 0x00 EN_RXADDR = 0x00 RF_CH = 0x00 RF_SETUP = 0x00 КОНФИГ = 0x00 ДИНПД/ФУНКЦИЯ = 0x00 0x00 Скорость передачи данных = 1 Мбит/с Модель = nRF24L01 Длина CRC = отключено Мощность PA = PA_MIN, @Richard Beattie

Если верно, что вы правильно определили выводы CS и CE, ваши модули nrf24l01+ неисправны., @Avamander


1 ответ


Лучший ответ:

1

Используя библиотеку MIRF, которую я получил здесь, и затем используя этот код для отправки

 Mirf.send((byte *)&command);
    while(Mirf.isSending()){
        }

и этот код для получения

 if(!Mirf.isSending() && Mirf.dataReady()){
    Mirf.getData((byte *)&data);
    Mirf.rxFifoEmpty();
else(){
}

Мне удалось заставить его работать

,