Использование 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());
  }
}

, 👍1

Обсуждение

Последовательные данные, которые вы используете в своей программе Arduino, сверяются со значениями ASCII, поэтому вам действительно нужно отправлять ASCII. Что именно вы подразумеваете под «интерпретируются как ASCII» на телефоне? Какую терминальную программу вы используете на телефоне? А какой вывод данных вы получаете на терминале ПК, когда отправляете данные по Bluetooth? Вы повторяете это там, поэтому вы сможете увидеть, что на самом деле получено на Arduino., @chrisl

О, я только что видел, что вы реагируете на команду только выражением глаз, когда есть что-то на «Serial», которое, как я полагаю, подключено к ПК. Когда на интерфейсе «EEBlue» есть данные, вы просто передаете их в «Serial», но не обрабатываете., @chrisl

Так мне нужно добавить что-то вроде char cmd = EEBlue.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 для предотвращения многократного выполнения одной команды
,