Задержка в одну смену при получении ответных сообщений при использовании двух nRF24L01 для связи друг с другом
Когда я отправляю «a» из последовательного монитора подчиненного устройства, в окне главного подчиненного устройства отображается «car1_place_2_go = a», затем оно должно отображаться на подчиненном последовательном мониторе «a», но не отображается в ведомое последовательное окно, пока я не отправлю еще один новый символ. Таким образом, в сообщениях, отображаемых на подчиненном последовательном мониторе, есть сдвиг задержки на 1.
Мастер:
#include <SPI.h>
#include <SoftwareSerial.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // СЕ, ДНС
const byte addresses[][6] = {"00001", "00002"};
char car1_place_2_go;
char car2_place_2_go;
char temp_place = 0 ;
void setup()
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(addresses[1]); // мастер
radio.openReadingPipe(1, addresses[0]); // карул
radio.setPALevel(RF24_PA_MIN);
}
void loop()
{
delay(5);
radio.startListening();
if (radio.available())
{
radio.read(&car1_place_2_go, sizeof(car1_place_2_go));
Serial.print("car1_place_2_go = ");
Serial.println(car1_place_2_go);
delay(5);
radio.stopListening();
radio.write(&car1_place_2_go, sizeof(car1_place_2_go));
}
}
Подчиненный:
#include <SPI.h>
#include <SoftwareSerial.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
char car1_place_2_go;
char car2_place_2_go;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(addresses[0]); // 00003
radio.openReadingPipe(1, addresses[1]); // 00002
radio.setPALevel(RF24_PA_MIN);
}
void loop()
{
if (Serial.available() > 0)
{
car2_place_2_go = Serial.read();
delay(5);
radio.stopListening();
radio.write(&car2_place_2_go, sizeof(car2_place_2_go));
radio.startListening();
if ( radio.available())
{
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.println(text);
}
}
}
Библиотека, которую я использую: https://github.com/nRF24/RF24
@zangin, 👍-1
Обсуждение1 ответ
я обнаружил, что проблема в том, что получатель в подчиненном устройстве не видит, что ему отправляется, до следующего цикла, а это означает, что ему нужна задержка, чтобы он мог видеть, что ему передается, поэтому я добавил этот цикл while в подчиненное устройство. поэтому ведомое устройство не выходит из функции "void loop" до тех пор, пока не получит сообщение от ведущего
раб
radio.startListening();
while(! radio.available())
{
}
if ( radio.available())
{
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.println(text);
}
вы должны принять свой собственный ответ., @esoterik
- вопрос по трубке nRF24L01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- Не получаем данные от NRF24L01
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
- Модуль Bluetooth против беспроводного модуля Arduino
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
Вероятно, вы слишком долго ждете между отправкой сообщения и прослушиванием данных, поэтому вы получаете данные только при следующей радиопередаче. Смотрите мой ответ на другой ваш вопрос nRF24. Похоже, вы можете использовать полезную нагрузку ACK для отправки и получения данных в одной радиотранзакции. Пожалуйста, не забудьте проголосовать или принять ответ, если он правильный., @MichaelT
Судя по коду, ведомое устройство постоянно отправляет последовательные данные. Разве он не должен был отправить его только один раз?, @Gerben