Arduino: использование цвета при выводе в последовательный порт

Наверняка, многие видели файловые менеджеры Norton Commander, Midnight Commander и другие, которые работают в консоли с выводом цвета. Обычно это происходит по SSH. Поискав информацию в Интернете, обнаружил, что такое работает и при подключении через последовательный порт. Возникает вопрос: а возможно ли использовать цвет при выводе в последовательный порт с Arduino?

Оказывается, это вполне реально. Для этого необходимо использовать escape-последовательности.
Такие последовательности начинаются с символов ESC[ , где ESC — символ с кодом 27. Для того, чтобы поменять цвет вывода, нужно отправить последовательность вида:

ESC[Value;…;Valuem
где Value — код цвета или атрибута.
Вот их значения:

Атрибуты:

  • 0 — Обычный
  • 1 — Полужирный
  • 4 — Подчёркнутый (только в монохромном режиме)
  • 5 — Мигающий
  • 7 — Реверсивный
  • 8 — Зачёркнутый

Цвета в Escape-последовательностях

ЦветКод для текстаКод для фона
Чёрный3040
Красный3141
Зелёный3242
Жёлтый3343
Синий3444
Пурпурный3545
Голубой3646
Белый3747

Допустим, нам нужно сделать красные символы на чёрном фоне. Тогда последовательность будет выглядеть так:

ESC[31;40m

Вот так это будет выглядеть в коде:

1
2
3
Serial.write(27);
Serial.print("[31;40m");
Serial.println("I am red string.");

Если нужно сделать текст полужирным, то добавится «1»:

ESC[1;31;40m

Ну и примерчик для полного перебора всех цветов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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-порт и скорость:

serial-color2
После этого нажимаем «Open» и видим результат:
serial-color1

Таким же образом можно перемещать курсор в любое место окна, вставлять символы в любом месте, удалять их, удалять целые строки и многое другое. Более подробно об escape-последовательностях можно почитать по ссылке: http://ascii-table.com/ansi-escape-sequences.php

Похожие записи:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *