Arduino: использование цвета при выводе в последовательный порт
Наверняка, многие видели файловые менеджеры 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
Ну и примерчик для полного перебора всех цветов:
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» и видим результат:

Таким же образом можно перемещать курсор в любое место окна, вставлять символы в любом месте, удалять их, удалять целые строки и многое другое.