Использую 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 в моем приемнике не мигает, а затем мои двигатели продолжают работать или останавливаются, и я не могу ими управлять.
Изменить
@dagh, 👍3
Обсуждение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
- Какие компоненты можно подключить к контактам 0/1 (RX/TX) без предотвращения загрузки кода?
- Использовать все контакты как цифровые входы/выходы
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- 6 + 1 двигательей подключенных к arduino uno?
- Как контролировать количество void loop в секунду?
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
- Как Arduino Uno может поддерживать до 12 сервоприводов, если у него всего 6 цифровых выводов ШИМ?
не обращайте внимания на свет... проверьте переданные данные и проверьте полученные данные... если данные совпадают, то ваши устройства исправны, @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