Модули Bluetooth не взаимодействуют правильно
Я подключаю BT rx к цифровому 11, BT tx к цифровому 10, а затем 5 В и заземление от HC-05 к arduino. Затем я загружаю этот код в HC-05, который установлен как мастер.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(57600);
mySerial.begin(9600);
}
void loop() { // запускать снова и снова
Serial.println(mySerial.read());
delay(2000);
}
Затем я загружаю этот код в Arduino с HC-05, который установлен как ведомое устройство:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // RX , TX
void setup() {
// put your setup code here, to run once:
mySerial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
mySerial.write("100");
delay(2000);
}
Проблема в том, что я никогда не получаю "100" на последовательном мониторе, я получаю только 49 и иногда 48. Когда я изменил его со "100" на "10", произошло то же самое. Любая помощь будет оценена.
@Gxs1619, 👍1
3 ответа
SoftwareSerial.read() возвращает один символ как целое число. Когда вы печатаете целое число, функции print() преобразуют его в удобочитаемый для человека формат.
Вы хотите преобразовать (привести) вывод read() в тип char. Либо:
void loop() {
char c;
c = mySerial.read(); // сохраняем результат во временной переменной c
Serial.println(c);
delay(2000);
}
или
void loop() {
Serial.println((char)mySerial.read()); // перед печатью преобразуем тип в char.
delay(2000);
}
Однако, поскольку за раз считывается только один символ, ваш вывод будет состоять из одного символа на строку (при условии отсутствия потери данных из-за задержки):
1
0
0
Вам следует изменить контакты TX и RX на плате Arduino и подключить их к другому контакту, отличному от TXD и RXD, поскольку это аппаратные контакты...
«Иногда вы получаете 49 и 48»?
Я ожидаю, что вы получите 49, 48, 48, 49, 48, 48 ...
49 — это «1» в ASCII, и угадайте, что означает 48 :)
Это потому, что вы пишете и читаете байты, а не символы. Есть очень тонкая разница.
Поменяйте приемник на этот, и это будет иметь больше смысла.
void loop() { // запускать снова и снова
const char letter = (char)mySerial.read(); // Превращаем байт в букву ASCII.
Serial.println(letter);
delay(2000);
}
Все еще может пойти не так, если вы читаете <32 или >126, но ...
Вот таблица ASCII, которая поможет: ASCII Таблица
- AT-команды не работают для HC-06 НА ARDUINO UNO
- Как заставить Arduino печатать на Arduino IDE моего Mac через Bluetooth?
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- Мой модуль Bluetooth HC-05 не работает
- Проблемы с использованием модуля Bluetooth HC-06 с Arduino
- Модуль HC-05 не получает команд и не спаривается
- Проблемы с подключением Bluetooth OBD2 ELM327
- Проблема с получением данных HC-06