frankhe 发表于 2014-4-4 09:23:23

求助一个很简单的试验程序

刚接触Arduino,想在一个试验里用它来计时,但是不知道Arduino怎么计时和显示计算的时间,求高手指点。
基本功能描述就是:3个LED灯每隔2-5秒随机闪烁,就是说每个2-5秒的区间内有一个LED灯亮,至于亮哪个,就是随机的了。每次灯亮的持续时间为2秒,每当一个灯亮起时过200毫秒开始计时,(Arduino连接一个外部按钮),当按钮被按下的时候记录从200毫秒到按下时的时间间隔,即被测者对LED亮灯的反应时间,这个反应时间输出到电脑屏幕上。
功能上看是很简单的一个程序,但是Arduino的计时是通过什么方式实现的?以及计算的反应时间如何输出到电脑上?
{:soso_e154:}

Super169 发表于 2014-4-4 10:44:12

簡單的做法:
1) 在 setup 中對 按钮 連接的 pin 設定attachInterrupt.
2) 在亮燈後, 自定一個 delay 時間, 就記下當時的時間 (用 start_time = millis() 或 start_time = micros() 之類);
3) 當 interrupt 觸發時, 再記下時間 (例如 button_click_time = millis() 之類)
4) 在 loop 之內檢查 button_click_time 是否已收到, 有的話就用 button_click_time - start_time 再輸出電腦 (亦可在 interrupt 時直接記下 millis() - start_time);

Super169 发表于 2014-4-4 10:48:41

補充:
如果你的程序沒有其他工作的話, 甚至可以不用 interrupt, 直接在 loop 內檢查是否按了, 就更加簡單.

但用 interrupt 的方法, 可以容許 更複雜的主程序, 也可以準確得到按下的時間.因為如果放在 loop 內, 必須要完成當前的工作才會執行下一次 loop, 可能會有少許延誤.

frankhe 发表于 2014-4-6 19:40:30

{:soso_e100:}非常感谢详细的解答!开始动手来试一试~
页: [1]
查看完整版本: 求助一个很简单的试验程序