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 = "";
} // Сброс переменной

, 👍-1

Обсуждение

Не могли бы вы перечитать свой вопрос, пожалуйста, и проверьте, что он говорит, что вы хотите? Отредактируйте любые исправления в вопросе, а не публикуйте их здесь. Меня смущает, как устроена система — например, вы говорите, что приложение для Android _отправляет_ данные не _получает_ правильные команды. Вы имеете в виду, что Arduino не получил правильные команды? Какие команды _did_ он получил? Ваш метод чтения до тех пор, пока ничего не останется, опасен, но давайте выясним, в чем на самом деле проблема, прежде чем угадывать решения., @Mark Smith

Я отредактировал его, как вы упомянули. Спасибо за ваше руководство. Пожалуйста, дайте мне знать, теперь все в порядке?, @bc120400339 Imran Ali


2 ответа


1

Я предлагаю взглянуть на этот ответ: Изменить скорость передачи данных HC-05

Во многих случаях, особенно когда вы отправляете данные с Android и получаете неверные данные на Arduino, это происходит из-за того, что скорость установлена неправильно. С другой стороны (получение данных от Arduino) немного сложнее. Вам нужно создать собственную систему «тайм-аута» на Android, поскольку в библиотеке Bluetooth нет такой функции.

,

-2

Используйте скорость 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