Использование Bluetooth-терминала Android для изменения предустановленных состояний светодиодных матриц 8x8.
Я пытаюсь создать глаза для проекта, и хотя мне удалось правильно запрограммировать различные выражения и запустить их по командам с терминала COM3, я не смог подавать какие-либо команды через Bluetooth Терминал на моем телефоне работает.
Подробности:
Мега2560
2 светодиодных дисплея 8x8 — MAX7219
Приемопередатчик Bluetooth HC-05 — скорость по умолчанию — 9600
Использование LEDControl.h, SoftwareSerial.h
Это цикл на моем устройстве: когда я набираю команды A, B и т. д. в терминал COM3, он работает нормально, но те же команды на телефоне интерпретируются просто как ASCII, даже когда я заключаю круглые скобки их.
void loop()
{
// Передаем любые данные из Bluetooth в Терминал.
if (EEBlue.available()){
Serial.write(EEBlue.read());
}
if (Serial.available()) //проверяет, доступны ли последовательные данные
{
char cmd = Serial.read();
if(cmd == 'A') {
display_eyes(eye_neutral_l, eye_neutral_r);
}
if(cmd == 'B') {
display_eyes(eye_shock_l, eye_shock_r);
}
if(cmd == 'C') {
display_eyes(eye_love_l, eye_love_r);
}
if(cmd == 'D') {
display_eyes(eye_suspicious_l, eye_suspicious_r);
}
if(cmd == 'E') {
display_eyes(eye_happy_l, eye_happy_r);
}
if(cmd == 'F') {
display_eyes(eye_hurt_l, eye_hurt_r);
}
if(cmd == '1') {
display_eyes(eye_mad_l, eye_mad_r);
}
// Передаем все данные с терминала на Bluetooth
EEBlue.write(Serial.read());
}
}
@MWhitmore, 👍1
Обсуждение1 ответ
Лучший ответ:
Ваша проблема в том, что вы читаете из последовательного интерфейса EEBlue
, но просто повторяете его через Serial
и ничего с ним не делаете. Код отображения выполняется только тогда, когда команды поступают через Serial
.
Самый простой способ — скопировать код из оператора if(Serial.available())
в оператор if(EEBlue.available())
и изменить прочитайте, чтобы использовать EEBlue
. Конечно, вам следует удалить существующий EEBlue.read()
из этого оператора.
Но в этом случае придется поддерживать вдвое больше кода. Гораздо проще сначала прочитать данные с любого последовательного интерфейса, а затем обработать их. Примерно так:
if(Serial.available()){
cmd = Serial.read();
} else if(EEBlue.available()){
cmd = EEBlue.read();
}
// вставляем код для проверки ожидаемых значений переменной cmd и действуем соответственно
cmd = 0; // Сброс cmd для предотвращения многократного выполнения одной команды
- Bluetooth-модуль HC-05
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- Мой модуль Bluetooth HC-05 не работает
- Bluetooth-модуль HC-05 не принимает AT-команды
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Соединение Bluetooth с HC-05 сопряжено, но не подключено (в Linux)
- Не удается вручную подключить ведущий HC-05 к подчиненному.
Последовательные данные, которые вы используете в своей программе Arduino, сверяются со значениями ASCII, поэтому вам действительно нужно отправлять ASCII. Что именно вы подразумеваете под «интерпретируются как ASCII» на телефоне? Какую терминальную программу вы используете на телефоне? А какой вывод данных вы получаете на терминале ПК, когда отправляете данные по Bluetooth? Вы повторяете это там, поэтому вы сможете увидеть, что на самом деле получено на Arduino., @chrisl
О, я только что видел, что вы реагируете на команду только выражением глаз, когда есть что-то на «Serial», которое, как я полагаю, подключено к ПК. Когда на интерфейсе «EEBlue» есть данные, вы просто передаете их в «Serial», но не обрабатываете., @chrisl
Так мне нужно добавить что-то вроде char cmd = EEBlue.read(); ?, @MWhitmore