Quando é necessário executarmos várias tarefas ao mesmo tempo, precisamos
limitar a utilização do delay() no código fonte, e utilizarmos mais a
função millis().
A função millis() retorna o tempo que o microcontrolador está ligado,
em milissegundos.
Guardando o valor de tempo que o processo foi executado e comparando com o
valor de tempo atual, poderemos calcular quando deve ser executado novamente.
Para facilitar a lógica, fiz a biblioteca
MillisTimerLib
que faz o gerenciamento das variáveis para cada processo que for utilizar.
Utilizar as saídas PWM no ESP32 é um pouco diferente do Arduino.
É necessário configurar os canais, a resolução e a frequência que será
utilizada por cada pino.
Para facilitar o uso, fiz a biblioteca
PWMOutESP32
que permite que o uso seja simplificado.
Utilizando a biblioteca para controlar as saídas PWM, usa-se somente o
analogWrite() como é no Arduino.
Como nos cofres mecânicos, é necessário selecionar a combinação dos números girando o disco.
O projeto faz a simulação do "38 para direita, 21 para esquerda" como nos cofres de discos.
A combinação fica armazenada na memória EEPROM e é possível utilizar uma senha entre 1 e 5 números, sendo cada um entre 01 e 99.
No vídeo, a trava é aberta com a combinação 38 - 21 - 54.
Veremos um exemplo de ataque por hardware e como pode ser perigoso.
O BadUSB é um dispositivo que ao ser conectado na porta USB do computador já efetua o ataque.
Não é necessário que o usuário execute e nem clique em nada.