Il est communément connu que les gens sont incapables de percevoir les changements lorsqu'ils surviennent sous 10 ms après leur action. Cette réactivité se traduira par une expérience qui a récemment été principalement décrite comme "accrocheuse". C'est perceptible, mais pour les utilisateurs, il est difficile de mettre un nom dessus.
Donc, si vous voulez la perfection, prenez environ 15 ms de retard. Si vous voulez vraiment bien, prenez 100 ms de retard. 100 ms est 50 ms en moyenne, et passera certainement pour les gens.
L'application et le temps de réponse attendu sont également essentiels. Une porte coulissante ou un ascenseur reçoit une très grande tolérance (car l'objet physique prendra toujours beaucoup plus de temps) tandis que les interfaces des distributeurs automatiques de billets ne sont pas données du tout.
La limite supérieure pour l'interrogation serait d'environ 1500 ms. Là-bas, les gens remarqueront toujours que c'est lent.
Ces données sont une expérience purement personnelle en tant que joueur et programmeur. YMMV et rappelez-vous que l'essayer vous-même est la meilleure façon de savoir comment il se sent. La seule réponse «scientifique» est la <10 millisecondes, au-delà de la capacité à percevoir le retard (qui varie selon la personne et le moment) et la tolérance de l'utilisateur.
En remarque, vous pouvez essayer de faire varier les délais afin d'économiser la batterie ou le temps CPU lorsque l'interface n'est pas utilisée. L'action de l'utilisateur, plus le sondage est rapide. Lorsque l'application est en train de faire son travail, sondez très lentement. Mieux vaut sonder quand c'est important!
loop()
plutôt lent (je veux dire, trop lent pour pouvoir donner suffisamment de rétroaction à l'utilisateur final), vous pouvez éventuellement utiliser un ISR sur le changement de niveau de broche et fournir une rétroaction immédiate (si cela peut être calculé rapidement) à l'utilisateur , ou lui donner un retour temporaire (par exemple LED allumée) pour lui dire que sa demande a été reconnue et sera traitée sous peu (enloop()
); vous laisseriezloop()
en définissant unebool
variable globale dans l'ISR.