Использую nRF2401, и в передатчике и приемнике Rx не мигает, а Tx мигает; почему Rx не мигает?

Я провел поиск значений RX и TX, и оказалось, что TX означает отправку данных, а RX означает получение данных. Итак, когда мой передатчик выключен, мой приемник выглядит так и работает от батареи:

и когда я включаю передатчик, мой приемник выглядит так:

Итак, Tx мигает, и я сбит с толку, потому что Rx не мигает, и я думаю, что ничего не получаю.

код получателя:

#include <RF24.h> 
#include <SPI.h> 

int speedpin1=5;
int dir11=3;
int dir12=7;

int speedpin2=A4;
int dir21=8;
int dir22=A3;

int speedpin3=A2;
int dir31=A1;
int dir32=A0;

int speedpin4=2;
int dir41=4;
int dir42=6;

int mspeed;


const byte CE = 9;
const byte CS = 10;

int data[1];

RF24 Radio(CE,CS);
const byte address[6]="00001";


void setup() {
  // поместите сюда код установки для однократного запуска:
Serial.begin(9600);  
pinMode(speedpin1,OUTPUT);
pinMode(dir11,OUTPUT);
pinMode(dir12,OUTPUT);

pinMode(speedpin2,OUTPUT);
pinMode(dir21,OUTPUT);
pinMode(dir22,OUTPUT);

pinMode(speedpin3,OUTPUT);
pinMode(dir31,OUTPUT);
pinMode(dir32,OUTPUT);
 
pinMode(speedpin4,OUTPUT);
pinMode(dir41,OUTPUT);
pinMode(dir42,OUTPUT);

Radio.begin();
Radio.openReadingPipe(1,address);
Radio.startListening();
}

void loop() {
  // поместите сюда ваш основной код для многократного запуска:
if(Radio.available()){
  Radio.read(data,sizeof(data));
  if (data[0]>131){
    
    digitalWrite(dir41,LOW);
    digitalWrite(dir42,HIGH);
    
    analogWrite(dir31,0);
    analogWrite(dir32,255);
     
    digitalWrite(dir21,HIGH);
    analogWrite(dir22,0);
      
    digitalWrite(dir11,HIGH);
    digitalWrite(dir12,LOW);
    
    mspeed=255;
 
    analogWrite(speedpin1,mspeed);
    analogWrite(speedpin2,mspeed);
    analogWrite(speedpin3,mspeed);
    analogWrite(speedpin4,mspeed);    
    Serial.println(mspeed);
    
  
  } 
  if (data[0]<131){

    digitalWrite(dir41,HIGH);
    digitalWrite(dir42,LOW);    

    analogWrite(dir31,255);
    analogWrite(dir32,0);

    digitalWrite(dir21,LOW);
    analogWrite(dir22,255);    
      
    digitalWrite(dir11,LOW);
    digitalWrite(dir12,HIGH);
    
    mspeed=255;
    
    analogWrite(speedpin1,mspeed);
    analogWrite(speedpin2,mspeed);
    analogWrite(speedpin3,mspeed);
    analogWrite(speedpin4,mspeed);
    Serial.println(mspeed);
   
     
  }
  if (data[0]==131){
     
 
    mspeed=0;
    analogWrite(speedpin1,mspeed);
    analogWrite(speedpin2,mspeed);
    analogWrite(speedpin3,mspeed);
    analogWrite(speedpin4,mspeed);
    Serial.println(mspeed);
    
     
  } 
  
 

}

код передатчика:

#include <RF24.h> 
#include <SPI.h> 
const byte CE = 9;
const byte CS = 10;
int jpin=A0;
int datax;
int data[1];

RF24 Radio(CE,CS);
const byte address[6]="00001";
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Radio.begin();
Radio.setRetries(5,10);
Radio.openWritingPipe(address);
}

void loop() {
  // put your main code here, to run repeatedly:
datax=analogRead(jpin);
datax=map(datax, 0, 1023, 0, 255);
data[0]=datax;
Serial.print("data x: ");
Serial.println(data[0]);
Radio.write(data,sizeof(data));
 
 


}

Я использую nRF2401, и в моем передатчике и приемнике Rx не мигает, а Tx мигает; почему Rx не мигает?

Я также не знаю, почему Tx в моем приемнике не мигает, когда я перемещаю джойстик в передатчике.

Я могу управлять своими двигателями только несколько раз с помощью джойстика, и после этого Tx в моем приемнике не мигает, а затем мои двигатели продолжают работать или останавливаются, и я не могу ими управлять.


Изменить

, 👍3

Обсуждение

не обращайте внимания на свет... проверьте переданные данные и проверьте полученные данные... если данные совпадают, то ваши устройства исправны, @jsotola

почему вы удалили свой предыдущий вопрос и добавили этот? ... эти два почти одинаковы ... если вы хотите внести изменения, вместо этого отредактируйте свой вопрос, @jsotola

вы усложняете себе задачу... добавьте отладочный код, чтобы знать, что передается, что принимается и как декодируются полученные данные, @jsotola

Как вы подключаете свой nRF2401 и Arduino Nano? Принципиальная схема поможет подтвердить правильность подключения в качестве первого шага отладки., @hcheung

@hcheung Я добавил информацию, которую вы просили, к моему вопросу., @dagh

Проводка выглядит хорошо. Итак, ваш вопрос связан с тем, почему RX не загорается или вы не можете получить данные? RX не светится, потому что контакты TX/RX связаны с последовательным портом и не имеют ничего общего с связью между Arduino и nRF24L21 через SPI, а не через последовательный порт. TX загорается, потому что у вас есть Serial.print(). Если вы спрашиваете, что данные не получены (получены неправильно), добавьте Serial.println(data) перед if (data[0]>131){`, чтобы узнать, что было получено., @hcheung

@hcheung Да, я не могу получить данные; Я имею в виду, что я получаю положение джойстика, а затем не могу его получить после того, как несколько раз перемещаю джойстик; Я имею в виду, что последовательный монитор не показывает мне текущее положение джойстика. ТАК Я не могу зациклить то, что я достиг. Чтобы решить эту проблему, я должен снова открыть последовательный монитор, и снова через некоторое время я ничего не получаю (потому что я несколько раз перемещал джойстик), а затем снова я должен закрыть последовательный монитор и снова открыть его для получения данных., @dagh


1 ответ


1

У нас есть несколько вопросов, поэтому:

Почему TX/RX странно мигает?

Светодиоды RX и TX на Arduino Nano подключены к контактам RX0 и TX1: они показывают активность порта Serial-over-USB, который соединяет Arduino с ПК.

Итак, каждый раз, когда вы получаете данные, вы выполняете Serial.print(), передавая текст на ПК (где вы можете увидеть этот текст в мониторе Serial). И это то, что отображается на светодиодах RX/TX: текст, который вы отправляете по последовательному каналу на ПК. Если вы хотите, чтобы RX мигал в этой настройке, просто введите текст в поле ввода последовательного монитора и отправьте его. Затем светодиод TX должен коротко мигнуть (возможно, слишком коротко, чтобы быть заметным).

Повторное использование этих светодиодов для индикации активности беспроводного приемопередатчика путем записи на контакты RX0/TX1 будет означать, что вы потеряете последовательный монитор, т. е. Serial.print() больше не будет возможным . . Не рекомендуется.

Лучшим вариантом будет использование собственных светодиодов в качестве монитора активности. Просто последовательно подключите светодиод с резистором 1 кОм к контактам D11 и D12 (которые являются линиями MOSI и MISO интерфейса SPI). , то есть эквивалент RX и TX последовательного интерфейса).

Другими словами, добавьте эти компоненты:

  D11 --> -LED+ --> 1K resistor --> 5V
  D12 --> -LED+ --> 1K resistor --> 5V

Почему моя передача останавливается?

Это труднее увидеть, но: я думаю, вы неправильно используете интерфейс библиотеки RF24.

Согласно пример кода "Передатчик Lv2" на этой странице Radio.read() и Radio.write() ожидают ссылку на массив данных, поэтому вы нужно использовать Radio.read(&data, sizeof(data)) и Radio.write(&data, sizeof(data)) (обратите внимание на амперсанд ).

Также может случиться так, что ваш передатчик передает быстрее, чем ваш приемник может принимать данные, поэтому вы можете попробовать добавить delay(5) в loop() вашего передатчика.

,

Я использовал это видео для кодирования. https://youtu.be/fbR_j3y_TC4?t=245, @dagh

@dagh Вы также можете попробовать использовать часть кода здесь: https://www.deviceplus.com/arduino/nrf24l01-rf-module-tutorial/ -- особенно конфигурацию RF24 (l.50..72) и сбой обнаружение и повторная инициализация (л.91..105). Это может дать вам дополнительную информацию., @orithena