unsigned long botao_agora = 0, botao_antes = 0;
loop() {
if (botao == pressionado && led == OFF) {
botão_antes = millis();
while ((botao == pressionado) && ((botão_agora = millis())-botao_antes < 3000));
led = ON;
botao_antes = 0;
botao_agora = 0;
}
if (botao == pressionado && led == ON) {
botão_antes = millis();
while ((botao == pressionado) && ((botão_agora = millis())-botao_antes < 1000));
led = OFF;
botao_antes = 0;
botao_agora = 0;
}
Isto?
Eu não gosto muito desta implementação por causa do while bloquear a execução do programa por 3 segundos... logo a maneira de evitar isso seria criar outra variável para lidar com essa hipótese. Mas deixo isso para tu pensares.