Я получаю неправильное сообщение при отправке сообщения между двумя ардуино
То, что я пытаюсь сделать, довольно просто
Я хочу закодировать флаг и числовое значение в сообщение и передать его другому 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
@kobo, 👍-1
Обсуждение1 ответ
Да, я обратил внимание на тот факт, что метод read() считывает только один байт из последовательного буфера.
Если кто-то сталкивается с таким же сценарием, я предлагаю вам следовать этому руководству. р>
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Arduino считывает состояние подключения устройства hc-05
- Проблемы с подключением Bluetooth OBD2 ELM327
- Сбросьте HC-05 из скетча Arduino
- mySerial.available() возвращает 0
- Связь Bluetooth не работает с питанием от постоянного тока, но работает с питанием от USB?
- Возможно ли использование двух модулей с последовательным интерфейсом на одном Arduino Uno?
**Владелец:**
Номер 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