Bien qu'il soit possible, et parfois souhaitable, d'utiliser des interruptions de changement de broche pour lire l'état des boutons, il est plus simple d'interroger l'état des boutons dans loop()
. Il s'agit d'une technique couramment utilisée.
Si vous loop()
exécutez assez rapidement, alors les pressions sur les boutons seront toujours prises et l'utilisateur ne pourra percevoir aucun retard ou retard.
Il est possible que votre boucle prenne autant de temps qu’à percevoir un retard ou un décalage.
La question est, combien de temps cela prendrait-il, en général, avant qu'un utilisateur ne le voit?
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.Réponses:
La réponse courte est que vous disposez de 100 millisecondes pour répondre à l'utilisateur si vous souhaitez qu'il ressente que l'action s'est produite instantanément.
Selon Jacob Nielsen dans son livre Ergonomie Engineering , de 1993, qui est considéré comme une référence importante dans la convivialité des systèmes et l'expérience utilisateur:
Il mentionne également que ces conseils de base concernant les temps de réponse sont à peu près les mêmes depuis de nombreuses décennies [Miller 1968; Card et al. 1991].
J'ai pris cette citation de cet article: Temps de réponse: les 3 limites importantes , également écrit par Jacob Nielsen.
Notez que pendant ce temps, vous devez inclure tout le temps nécessaire pour lire la pression sur le bouton et donner des commentaires à l'utilisateur.
D'autres seuils de temps de réponse importants pour l'expérience utilisateur, provenant de la même source, mais qui n'ont pas été mentionnés directement par l'OP sont:
la source
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!
la source