Использование цвета при выводе в последовательный порт
31 июля 2016
Наверняка, многие видели файловые менеджеры Norton Commander, Midnight Commander и другие, которые работают в консоли с выводом цвета. Обычно это происходит по SSH. Поискав информацию в Интернете, обнаружил, что такое работает и при подключении через последовательный порт. Возникает вопрос: а возможно ли использовать цвет при выводе в последовательный порт с Arduino?
Оказывается, это вполне реально. Для этого необходимо использовать escape-последовательности.
Такие последовательности начинаются с символов ESC[ , где ESC — символ с кодом 27. Для того, чтобы поменять цвет вывода, нужно отправить последовательность вида:
ESC[Value;…;Valuem где Value — код цвета или атрибута.
Вот их значения:
Атрибуты:
- 0 — Обычный
- 1 — Полужирный
- 4 — Подчёркнутый (только в монохромном режиме)
- 5 — Мигающий
- 7 — Реверсивный
- 8 — Зачёркнутый
Цвета в Escape-последовательностях
| Цвет | Код для текста | Код для фона |
|---|---|---|
| Чёрный | 30 | 40 |
| Красный | 31 | 41 |
| Зелёный | 32 | 42 |
| Жёлтый | 33 | 43 |
| Синий | 34 | 44 |
| Пурпурный | 35 | 45 |
| Голубой | 36 | 46 |
| Белый | 37 | 47 |
Допустим, нам нужно сделать красные символы на чёрном фоне. Тогда последовательность будет выглядеть так:
ESC[31;40m
Вот так это будет выглядеть в коде:
Serial.write(27); Serial.print("[31;40m"); Serial.println("I am red string.");
Если нужно сделать текст полужирным, то добавится «1»:
ESC[1;31;40m
Ну и примерчик для полного перебора всех цветов:
- color-uart.ino
void setup() { Serial.begin(9600); Serial.println("Test 123"); //Serial.write(27); //Serial.print("[31;42m"); } void loop() { for (int i=30; i<38; i++) { for (int j=40; j<48; j++) { Serial.write(27); Serial.print("["); Serial.print(i); Serial.print(";"); Serial.print(j); Serial.print("m"); Serial.print("String line "); Serial.print(i); Serial.print(" "); Serial.println(j); } } while(1); }
Обратите внимание, что для работать в обычном мониторе порта Arduino IDE это не будет. Нужен терминал, который умеет работать с escape-последовательностями, например, Putty. Для этого в его настройках указываем работу по Serial-соединению, вписываем COM-порт и скорость:
После этого нажимаем «Open» и видим результат:
Таким же образом можно перемещать курсор в любое место окна, вставлять символы в любом месте, удалять их, удалять целые строки и многое другое.

