É sabido que as pessoas são incapazes de perceber mudanças quando elas acontecem abaixo dos 10ms após a ação. Essa capacidade de resposta resultará em uma experiência recentemente descrita principalmente como "rápida". É perceptível, mas para os usuários é difícil colocar um nome nele.
Então, se você quer perfeição, demora cerca de 15ms. Se você quiser realmente bom, tome 100 ms de atraso. 100ms é 50ms em média e certamente passará para as pessoas.
A aplicação e o tempo de resposta esperado também são vitais. Uma porta ou elevador deslizante recebe uma tolerância muito grande (como o objeto físico sempre leva muito mais tempo), enquanto as interfaces da máquina de venda automática de ingressos não têm tempo algum.
O limite superior para a pesquisa seria de cerca de 1500ms. Por lá, as pessoas sempre notam que é lento.
Esses dados são uma experiência puramente pessoal como jogador e programador. YMMV e lembre-se de que apenas tentar você mesmo é a melhor maneira de descobrir como é. A única resposta "científica" são os <10 milissegundos, além disso, é sobre a capacidade de perceber o atraso (que varia por pessoa e momento) e a tolerância do usuário.
Como uma observação lateral, você pode tentar flutuar os atrasos para economizar tempo de bateria ou CPU quando a interface não está sendo usada. A ação do usuário, mais rápida a pesquisa. Quando o aplicativo estiver funcionando, faça uma pesquisa bem devagar. Melhor pesquisar quando importa!
loop()
é um pouco lento (quero dizer, muito lento para poder fornecer feedback rápido o suficiente para o usuário final), você poderia usar um ISR na alteração do nível de pinos e fornecer feedback imediato (se isso puder ser calculado rapidamente) ao usuário , ou envie um feedback temporário (por exemplo, LED aceso) para informar que sua solicitação foi reconhecida e será processada em breve (dentroloop()
); você permitirialoop()
definindo algumabool
variável global no ISR.