Unicode, Box Drawing, Painéis Avançados e Conclusão
Até aqui trabalhamos com ASCII puro (7 bits).
Agora vamos elevar o nível visual utilizando Unicode, mantendo compatibilidade com terminais modernos VT100/ANSI.
1. ASCII vs Unicode no Terminal
ASCII original possui apenas 128 caracteres.
Unicode amplia isso para milhares de símbolos.
Terminais modernos (Linux, macOS, Windows Terminal, PuTTY configurado corretamente) suportam UTF-8 por padrão.
Isso permite usar:
- Caracteres de caixa (box drawing)
- Blocos preenchidos
- Símbolos gráficos
- Indicadores visuais avançados
Exemplos Unicode úteis:
| Símbolo | Código | Uso |
|---|---|---|
| ┌ ┐ └ ┘ | Box corners | Molduras |
| ─ │ | Linhas | Estruturas |
| █ | Bloco cheio | Barras |
| ░ ▒ ▓ | Intensidade | Indicadores |
| ✓ | Check | |
| ✗ | Erro | |
| ⚠ | Alerta |
2. Box Drawing — Criando Tabelas Profissionais
Vamos montar um painel estruturado.
Exemplo em C
#include <stdio.h>
int main() {
printf("┌──────────────────────────────┐\n");
printf("│ MONITOR SISTEMA │\n");
printf("├──────────────────────────────┤\n");
printf("│ CPU: 42%% │\n");
printf("│ Temperatura: 65°C │\n");
printf("│ Status: ✓ OK │\n");
printf("└──────────────────────────────┘\n");
return 0;
}
Isso já cria uma interface de nível muito superior.
3. Barra de Progresso com Blocos Unicode
ASCII usa = e >.
Unicode permite algo mais elegante.
void progress_bar(int percent) {
int width = 30;
int filled = (percent * width) / 100;
printf("[");
for (int i = 0; i < width; i++) {
if (i < filled)
printf("█");
else
printf(" ");
}
printf("] %d%%\n", percent);
}
Resultado visual muito mais limpo.
4. Painel Dinâmico Estilo Monitor Industrial
Combinando tudo:
#define CLEAR "\x1B[2J"
#define HOME "\x1B[H"
#define GREEN "\x1B[32m"
#define RED "\x1B[31m"
#define YELLOW "\x1B[33m"
#define RESET "\x1B[0m"
void draw_dashboard(int cpu, int temp) {
printf(CLEAR);
printf(HOME);
printf("┌──────────────────────────────┐\n");
printf("│ SISTEMA EMBARCADO │\n");
printf("├──────────────────────────────┤\n");
printf("│ CPU: ");
if (cpu < 60)
printf(GREEN "%3d%%" RESET, cpu);
else if (cpu < 85)
printf(YELLOW "%3d%%" RESET, cpu);
else
printf(RED "%3d%%" RESET, cpu);
printf(" │\n");
printf("│ TEMP: %3d°C │\n", temp);
printf("└──────────────────────────────┘\n");
}
Esse tipo de técnica é extremamente útil quando você está:
- Monitorando um STM32 via UART
- Debugando um ESP32
- Criando CLI em Node.js
- Construindo ferramentas industriais
Você transforma o terminal em uma HMI textual leve.
5. Boas Práticas Profissionais
Sempre use RESET após cores.
Evite cores excessivas.
Não quebre compatibilidade com logs gravados em arquivos.
Permita modo “no color” via flag.
Garanta que o terminal esteja em UTF-8 se usar Unicode.
Em firmware, considere que alguns terminais seriais simples não suportam UTF-8.
Nesses casos, mantenha fallback ASCII.
Conclusão
A tabela ASCII não é apenas uma curiosidade histórica. Ela é a base de toda comunicação textual digital. Quando combinada com os códigos de escape ANSI/VT100, ela transforma o console em uma interface altamente expressiva e funcional.
Logs ricos não são estética: são produtividade.
Cores bem aplicadas aceleram diagnóstico.
Estrutura visual reduz erros de leitura.
Dashboards textuais são leves e portáveis.
ASCII art pode reforçar identidade de ferramentas.
Se você trabalha com sistemas embarcados, CLI, servidores ou automação industrial, dominar esses recursos é um diferencial técnico importante.
O terminal pode ser simples — ou pode ser poderoso.
A diferença está em como você o utiliza.
Referências
Tabela ASCII completa
https://www.asciitable.com/
Documentação ANSI Escape Codes
https://en.wikipedia.org/wiki/ANSI_escape_code
Referência VT100
https://vt100.net/
Gerador de ASCII Art (TAAG)
https://patorjk.com/software/taag/
Projeto FIGlet
http://www.figlet.org/
Unicode Box Drawing
https://unicode-table.com/en/blocks/box-drawing/