Помимо обычного вывода символов, существует также ESC-код 1Bh [ATTR], который позволяет менять цвет дальнейших символов на лету. Переменная cursor_attr должна быть объявлена.
void print(constchar* s, byte pgm = 0) {
byte ch, nx, ct;
int i = 0, n = 0;
while ((ch = (pgm ? pgm_read_byte(&s[i++]) : s[i++]))) {