Arduino - Botão - Pressionamento Longo e Curto
Vamos aprender:
- Como detectar o pressionamento curto do botão
- Como detectar o pressionamento longo do botão
- Como detectar tanto o pressionamento longo quanto o curto do botão
- Pressionamento longo e curto com debounce
Nas três primeiras partes, aprendemos a detectar em teoria.
Na última parte, aprendemos a detectar na prática aplicando o debounce. Veja por que precisamos fazer o debounce do botão. Sem o debounce, podemos detectar errado o pressionamento curto do botão.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Se você ainda não conhece o botão (pinagem, como funciona, como programar ...), aprenda sobre ele nos seguintes tutoriais:
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Neste tutorial, vamos usar o resistor de pull-up interno. Por isso, o estado do botão é HIGH normalmente e LOW quando ele está pressionado.
Como Detectar o Pressionamento Curto
Medimos o tempo entre os eventos de pressionar e soltar. Se esse tempo for menor que um tempo definido, o evento de pressionamento curto é detectado.
Vamos ver passo a passo:
- Defina a duração máxima de um pressionamento curto
- Detecte que o botão foi pressionado e salve o momento do pressionamento
- Detecte que o botão foi solto e salve o momento em que foi solto
- Calcule a duração do pressionamento
- Identifique o pressionamento curto comparando a duração do pressionamento com o tempo definido para o pressionamento curto.
Código Arduino para detectar o pressionamento curto
Passos Rápidos
- Carregue o código acima no Arduino pelo Arduino IDE
- Pressione o botão rapidamente várias vezes.
- Veja o resultado no Serial Monitor
※ Nota:
O Serial Monitor pode mostrar várias detecções de pressionamento curto para um único pressionamento. Esse é o comportamento normal do botão. Esse comportamento é chamado de “fenômeno de trepidação”. O problema será resolvido na última parte deste tutorial.
Como Detectar o Pressionamento Longo
Há dois casos de uso para detectar o pressionamento longo.
- O evento de pressionamento longo é detectado logo depois que o botão é solto
- O evento de pressionamento longo é detectado enquanto o botão está sendo pressionado, mesmo que o botão ainda não tenha sido solto.
No primeiro caso de uso, medimos o tempo entre os eventos de pressionar e soltar. Se esse tempo for maior que um tempo definido, o evento de pressionamento longo é detectado.
No segundo caso de uso, depois que o botão é pressionado, medimos continuamente o tempo de pressionamento e verificamos o evento de pressionamento longo até o botão ser solto. Isso acontece durante o tempo em que o botão está sendo pressionado. Se esse tempo for maior que um tempo definido, o evento de pressionamento longo é detectado.
Código Arduino para detectar o pressionamento longo ao soltar
Passos Rápidos
- Carregue o código acima no Arduino pelo Arduino IDE
- Pressione o botão e solte depois de um segundo.
- Veja o resultado no Serial Monitor
O evento de pressionamento longo só é detectado logo depois que o botão é solto
Código Arduino para detectar o pressionamento longo durante o pressionamento
Passos Rápidos
- Carregue o código acima no Arduino pelo Arduino IDE
- Pressione o botão e solte depois de alguns segundos.
- Veja o resultado no Serial Monitor
O evento de pressionamento longo só é detectado enquanto o botão ainda não foi solto
Como Detectar Tanto o Pressionamento Longo Quanto o Curto
Pressionamento Curto e Longo depois de soltar
Passos Rápidos
- Carregue o código acima no Arduino pelo Arduino IDE
- Faça pressionamentos longos e curtos no botão.
- Veja o resultado no Serial Monitor
※ Nota:
O Serial Monitor pode mostrar várias detecções de pressionamento curto durante um pressionamento longo. Esse é o comportamento normal do botão. Esse comportamento é chamado de “fenômeno de trepidação”. O problema será resolvido na última parte deste tutorial.
Pressionamento Curto e Longo durante o pressionamento
Passos Rápidos
- Carregue o código acima no Arduino pelo Arduino IDE
- Faça pressionamentos longos e curtos no botão.
- Veja o resultado no Serial Monitor
※ Nota:
O Serial Monitor pode mostrar várias detecções de pressionamento curto durante um pressionamento longo. Esse é o comportamento normal do botão. Esse comportamento é chamado de “fenômeno de trepidação”. O problema será resolvido na última parte deste tutorial.
Pressionamento Longo e Curto com Debounce
É muito importante fazer o debounce do botão em muitas aplicações.
O debounce é um pouco complicado, principalmente ao usar vários botões. Para facilitar muito para os iniciantes, criamos uma biblioteca chamada ezButton.
Vamos usar essa biblioteca nos códigos abaixo
Pressionamento Curto e Longo com debounce depois de soltar
Passos Rápidos
- Instale a biblioteca ezButton. Veja Como Fazer
- Carregue o código acima no Arduino pelo Arduino IDE
- Faça pressionamentos longos e curtos no botão.
- Veja o resultado no Serial Monitor
Pressionamento Curto e Longo com debounce durante o pressionamento
Passos Rápidos
- Instale a biblioteca ezButton. Veja Como Fazer
- Carregue o código acima no Arduino pelo Arduino IDE
- Faça pressionamentos longos e curtos no botão.
- Veja o resultado no Serial Monitor
Vídeo
Por Que Precisamos do Pressionamento Longo e Curto
- Para economizar botões. Um único botão pode ter duas ou mais funções. Por exemplo, pressionamento curto para mudar o modo de operação e pressionamento longo para desligar o dispositivo.
- Usar o pressionamento longo para reduzir pressionamentos curtos acidentais. Por exemplo, alguns tipos de dispositivos usam o botão para restaurar as configurações de fábrica. Se o botão for pressionado por acidente, isso é perigoso. Para evitar isso, o dispositivo é programado para só restaurar as configurações de fábrica quando o botão recebe um pressionamento longo (por exemplo, mais de 5 segundos)