Я получаю неправильное сообщение при отправке сообщения между двумя ардуино

То, что я пытаюсь сделать, довольно просто

Я хочу закодировать флаг и числовое значение в сообщение и передать его другому Arduino с помощью HC-05.

Я получаю числовое значение на другом конце без флага. Соответствующий код для ведущего и ведомого устройств размещен ниже

МАСТЕР

#include <SoftwareSerial.h>
const byte rxPin = 4;
const byte txPin = 5;
uint32_t  msg; //отправлено сообщение
int32_t num = 31;// числовое значение для отправки. просто какое-то случайное значение
uint32_t Flag  = 0x80000000;//Флаг хранится в старшем разряде 32-битного числа
msg  = Flag | num;
SoftwareSerial BT(rxPin, txPin);
void setup()
{
msg  = MotorFlag | Nsteps1;
BT.begin(9600);
Serial.begin(9600);
Serial.println("Number Is");
Serial.println(num);
Serial.println("message is");
Serial.println(msg);

}
void loop()
{

BT.write(msg);
delay(2000);


}

РАБ

#include <SoftwareSerial.h>
const byte rxPin = 4;
const byte txPin = 5;
uint32_t  rmsg; //получено сообщение
SoftwareSerial BT (rxPin, txPin);
void setup() {
  
Serial.begin(9600);
BT.begin(9600);

}


void loop() {
  delay(3000);
  if (BT.available())
  {
    rmsg = BT.read();// чтение из HC-05. rmsg должен содержать только 0x80000000 | число
    Serial.println("Message is");
    Serial.println(rmsg);
  }

Происходит то, что я получаю числовое значение как rmsg, когда оно должно быть числовым ИЛИ с битом флага. У меня такое чувство, что я упускаю что-то очевидное, но я, честно говоря, в тупике, и я попытался просто жестко закодировать сообщение, и это та же проблема. Кажется, он получает только первые 8 бит и больше ничего. Например, если я отправлю 0x12C, я получу только 44.

Кто-то запросил вывод последовательного монитора. Вот оно:

Мастер:

Number Is
31

message is 

2147483697

Подчиненный:

message is 

31

, 👍-1

Обсуждение

**Владелец:** Номер 31 сообщение 2147483697 **Раб:** сообщение 31 извините за двойной комментарий, кстати .. Я испортил редактирование первого и не хотел ждать. Спасибо, @kobo

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

Возможно ли, что BT.read() читает один байт, а не все 4 байта?, @Jaromanda X

удалите delay(3000); ... удалите Serial.println("Message is"); .... измените Serial.println(rmsg); на Serial.print(rmsg); ....... дайте ему поработать некоторое время, затем скопируйте текст последовательного монитора и вставьте сюда, @jsotola

@JaromandaX, ты действительно прав. Не могу поверить, что просмотрел эту простую деталь. read() читает только первый байт из последовательного буфера, @kobo

Если причина в этом, вы можете сами написать фактический ответ, чтобы помочь будущим посетителям (не забудьте пометить его как принятый), или вы можете удалить вопрос. Только, пожалуйста, не позволяйте ему открываться. Это не форум., @the busybee

@thebusybee да, я планировал это сделать. Но хотел перепроверить все, @kobo


1 ответ


0

Да, я обратил внимание на тот факт, что метод read() считывает только один байт из последовательного буфера.

Если кто-то сталкивается с таким же сценарием, я предлагаю вам следовать этому руководству. р>

,