# 2. Análise técnica do funcionamento

[Voltar ao índice](README.md)

## 2.1 Principais módulos

```
┌─────────────────────────────────────────────────────┐
│                   METADE ESQUERDA                   │
│  Chaves mecânicas → Matriz 3×6 + 3 thumb            │
│  Diodos 1N4148 (anti-ghosting)                      │
│  Microcontrolador (escrava)                         │
│    └─ Varredura de matriz                           │
│    └─ Debounce por software                         │
│    └─ Encode de keycode                             │
│    └─ UART TX → TRRS                                │
└──────────────────────┬──────────────────────────────┘
                       │ TRRS (UART / BLE)
┌──────────────────────▼──────────────────────────────┐
│                   METADE DIREITA                    │
│  Chaves mecânicas → Matriz 3×6 + 3 thumb            │
│  Diodos 1N4148 (anti-ghosting)                      │
│  Microcontrolador (mestre)                          │
│    └─ Varredura de matriz própria                   │
│    └─ Recepção de eventos da escrava (UART RX)      │
│    └─ Agregação e mapeamento de camadas             │
│    └─ Geração de HID reports                        │
│    └─ USB HID (com fio) ou BLE HID (sem fio)        │
│  OLED (I2C, opcional)                               │
│  LED RGB (PWM, opcional)                            │
└──────────────────────┬──────────────────────────────┘
                       │ USB ou BLE
                      PC
```

## 2.2 Varredura de matriz e anti-ghosting

A matriz de teclas é organizada em N linhas e M colunas de GPIOs. O firmware ativa uma linha por vez e lê todas as colunas; colunas ativas indicam teclas pressionadas naquela linha. O ciclo completo determina o estado de todas as N×M teclas.

Sem os diodos, pressionar três teclas em um triângulo da matriz gera um quarto evento fantasma (*ghosting*). O diodo 1N4148 em série com cada tecla impede corrente reversa, eliminando o problema e permitindo *N-key rollover*.

## 2.3 Debounce por software

Chaves mecânicas exibem *bounce*: múltiplas transições rápidas ao fechar ou abrir o contato. O QMK implementa debounce por máquina de estados com janela temporal (cerca de 5 ms): uma tecla só muda de estado após leitura estável por N ciclos consecutivos [\[6\]](referencias.md).

## 2.4 Comunicação entre metades (UART/TRRS)

O cabo TRRS carrega 4 sinais: VCC, GND, TX e RX. A metade escrava envia um evento (keycode + estado *pressed*/*released*) via UART. A metade mestre recebe e trata como se fosse uma tecla local. Em versões BLE do Corne (nice!nano), o link entre metades pode ser BLE ou UART, dependendo da configuração do ZMK.

## 2.5 Interface HID com o PC

O firmware gera *HID keyboard reports* de 8 bytes (1 byte de modificadores + 1 reservado + 6 keycodes), transmitidos via USB HID ou BLE HID (*HID over GATT*). O sistema operacional reconhece o dispositivo como um teclado padrão, sem drivers adicionais [\[7\]](referencias.md).

## 2.6 Camadas e home-row mods

Com apenas 42 teclas físicas, o Corne usa **camadas** (*layers*) ativadas por teclas de polegar para acessar símbolos, números e teclas de função. Os **home-row mods** transformam as teclas da linha central em modificadores (Shift, Ctrl, Alt) ao serem seguradas, eliminando a necessidade de teclas dedicadas. Esse mapeamento é definido no firmware QMK/ZMK [\[5\]](referencias.md).

![Exemplo de keymap com camadas](imagens/keymap.png)

## 2.7 Tecnologias críticas

| Tecnologia | Relevância |
|-----------|------------|
| Varredura de matriz + debounce | Leitura confiável das teclas |
| Diodos 1N4148 | Anti-ghosting para *N-key rollover* |
| UART sobre TRRS | Link entre as duas metades |
| USB HID / BLE HID | Interface com o sistema operacional |
| QMK / ZMK | Firmware com camadas, mods e economia de energia |

[Voltar ao índice](README.md)
