尽管可以(有时是希望)使用引脚更改中断来读取按钮的状态,但轮询中的按钮状态更为简单loop()
。这是一种常用的技术。
如果loop()
执行得足够快,则总是会抓住按钮按下的声音,并且用户将无法感知任何延迟或滞后。
您的循环可能会花费很长时间,从而导致察觉到延迟或延迟。
问题是,用户通常会看到多长时间?
尽管可以(有时是希望)使用引脚更改中断来读取按钮的状态,但轮询中的按钮状态更为简单loop()
。这是一种常用的技术。
如果loop()
执行得足够快,则总是会抓住按钮按下的声音,并且用户将无法感知任何延迟或滞后。
您的循环可能会花费很长时间,从而导致察觉到延迟或延迟。
问题是,用户通常会看到多长时间?
Answers:
简短的答案是,如果您希望用户感觉到操作是瞬间发生的,则您有100毫秒的时间来响应用户。
根据Jacob Nielsen在1993年出版的《可用性工程》一书中的观点,该书被认为是系统可用性和用户体验的重要参考:
- 0.1秒大约是使用户感到系统正在做出即时反应的极限,这意味着除了显示结果外,无需任何特殊反馈。
他还提到关于响应时间的基本建议已经有几十年了[Miller 1968; 卡德等。1991]。
我从这篇文章中引用了这篇文章:响应时间:3个重要限制,也由Jacob Nielsen撰写。
请注意,在这段时间中,您必须包括读取按钮按下并向用户提供反馈所花费的所有时间。
来自同一来源的,对于用户体验很重要的其他响应时间阈值,但OP没有直接提及:
1.0秒是关于即使用户注意到延迟也不会中断用户思想流的极限。通常,在大于0.1秒但小于1.0秒的延迟期间,不需要特殊的反馈,但是用户确实会失去直接操作数据的感觉。
10秒左右是使用户的注意力集中在对话上的极限。对于更长的延迟,用户将希望在等待计算机完成操作时执行其他任务,因此应向他们提供反馈,指示计算机预期何时完成。如果响应时间可能变化很大,则延迟期间的反馈尤为重要,因为这样用户将不知道会发生什么。
众所周知,当人们在行动后10毫秒内发生变化时,他们无法感知变化。这种响应将导致最近被称为“贪睡”的体验。这很明显,但是对于用户而言,很难在上面加上名称。
因此,如果您想要完美,则需要大约15ms的延迟。如果您真的想要好,请延迟100毫秒。100毫秒平均为50毫秒,对于人们来说肯定会过去。
应用程序和预期的响应时间也至关重要。推拉门或电梯的公差非常大(因为物理对象总是要花费更多时间),而自动售票机的接口根本没有任何时间。
轮询的上限约为1500毫秒。人们总是会注意到那里很慢。
这些数据纯粹是作为游戏玩家和程序员的个人经验。YMMV,请记住,亲自尝试是了解感觉的最佳方法。唯一的“科学”答案是<10毫秒,除此之外,它还涉及感知延迟的能力(随人和时刻而变化)和用户的承受能力。
附带说明,当不使用该接口时,可以尝试更改延迟,以节省电池或CPU时间。用户操作,轮询速度越快。当应用程序正在执行操作时,请非常缓慢地轮询。最好在重要时进行轮询!
loop()
的速度很慢(我的意思是,速度太慢而无法向最终用户提供足够的反馈),则可以在引脚电平变化时使用ISR并向用户提供即时反馈(如果可以快速计算出) ,或向他提供临时反馈(例如,LED亮起)以告诉他他的请求已被识别,并将在不久内得到处理loop()
;您可以loop()
通过bool
在ISR中设置一些全局变量来实现。