Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
Я разработал проект домашней автоматизации, в котором использую модуль Bluetooth Arduino Uno и HC-05, а также приложение для Android. Я все сделал правильно, но когда я отправляю команды из своего приложения для Android, иногда это работает, а иногда нет.
Я проверил эти команды на последовательном мониторе и обнаружил, что команда данных, которую я получаю на последовательном мониторе, не соответствует командам, которые я отправляю из своего приложения для Android. Например, мое приложение для Android отправляет команду «ON1», но на последовательном мониторе отображается «OL1?». Я подумал, что это может быть проблема с HC-05, поэтому я заменил его и использовал новый модуль HC-05, но проблема осталась.
На этот раз я проверил команды из другого приложения для Android (Bluetooth Terminal HC-05) и обнаружил ту же проблему. Иногда он правильно читал команду app, а иногда читал что-то другое.
Я так запутался, проблема в моем аппаратном или программном обеспечении. Я много пробовал, но нигде не нашел решения своей проблемы. Кто-нибудь может мне помочь?
Это код Arduino моего проекта:
#include <SoftwareSerial.h>
SoftwareSerial Genotronex(2, 3); //контакты TX, RX Arduino соответственно
String command;
void setup() {
Genotronex.begin(9600);
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
while (Genotronex.available()) {
//Проверяем, есть ли свободный байт
to read
delay(10); //Задержка добавлена для стабильности
char c = Genotronex.read(); //Выполняем последовательное чтение
command += c; // построить строку.
}
if (command.length() > 0) {
Serial.print(command);
if (command == "ON1") {}
//эта команда будет дана как ввод для включения света1
digitalWrite(9, HIGH);
} else if (command == "OFF1") {
//эта команда будет дана как ввод для выключения света1, аналогично работают другие команды
digitalWrite(9, LOW);
} else if (command == "ON2") {
digitalWrite (10, HIGH);
} else if ( command == "OFF2") {
digitalWrite (10, LOW);
} else if (command == "ON3") {
digitalWrite (11, HIGH);
} else if (command == "OFF3") {
digitalWrite (11, LOW);
} else if (command == "ON4") {
digitalWrite (12, HIGH);
} else if (command == "OFF4") {
digitalWrite (12, LOW);
} else if (command == "ON5") {
digitalWrite (13, HIGH);
} else if (command == "OFF5") {
digitalWrite (13, LOW);
} else if (command == "all on") {
//с помощью этой команды вы можете включить все устройства
digitalWrite (9, HIGH);
digitalWrite (10, HIGH);
digitalWrite (11, HIGH);
digitalWrite (12, HIGH);
digitalWrite (13, HIGH);
} else if (command == "off") {
//с помощью этой команды вы можете отключить все устройства
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
digitalWrite (13, LOW);
}
command = "";
} // Сброс переменной
2 ответа
Я предлагаю взглянуть на этот ответ: Изменить скорость передачи данных HC-05
Во многих случаях, особенно когда вы отправляете данные с Android и получаете неверные данные на Arduino, это происходит из-за того, что скорость установлена неправильно. С другой стороны (получение данных от Arduino) немного сложнее. Вам нужно создать собственную систему «тайм-аута» на Android, поскольку в библиотеке Bluetooth нет такой функции.
Используйте скорость 38400 бод для Bluetooth. Это решит вашу проблему.
Как? Что стоит за этим? (Я не говорю, что вы ошибаетесь, но подкрепите свой ответ подробно). Как OP будет использовать эту скорость передачи? Другими словами, в том виде, в каком вы ответили, от него мало толку. Это может быть фактически правильно, но в качестве ответа ему не хватает деталей., @Majenko
В зависимости от модуля/версии скорость передачи данных HC-05 по умолчанию может быть 9600 или 38400. Если вы хотите использовать другую скорость, вам нужно установить ее с помощью AT-команды, например, на 9600, вы должны использовать: «AT+BAUD4», если у вас есть модуль со значением по умолчанию 38400. Изменить: подробнее здесь, например: http://www.instructables.com/id/Changing-Baud-Rate-of-HC-05-Bluetooth/, @DocWeird
- Проблемы с подключением Bluetooth OBD2 ELM327
- mySerial.available() возвращает 0
- Как отправлять и получать несколько целочисленных значений через последовательную связь для Arduino Micro и Bluetooth HC05?
- Как заставить Arduino печатать на Arduino IDE моего Mac через Bluetooth?
- Я получаю неправильное сообщение при отправке сообщения между двумя ардуино
- Подключение нескольких модулей HC-05 к одной компьютерной системе
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Мой модуль Bluetooth HC-05 не работает
Не могли бы вы перечитать свой вопрос, пожалуйста, и проверьте, что он говорит, что вы хотите? Отредактируйте любые исправления в вопросе, а не публикуйте их здесь. Меня смущает, как устроена система — например, вы говорите, что приложение для Android _отправляет_ данные не _получает_ правильные команды. Вы имеете в виду, что Arduino не получил правильные команды? Какие команды _did_ он получил? Ваш метод чтения до тех пор, пока ничего не останется, опасен, но давайте выясним, в чем на самом деле проблема, прежде чем угадывать решения., @Mark Smith
Я отредактировал его, как вы упомянули. Спасибо за ваше руководство. Пожалуйста, дайте мне знать, теперь все в порядке?, @bc120400339 Imran Ali