本节书摘来异步社区《Arduino实战》一书中的第2章,第2.3节,作者:【美】Martin Evans ,Joshua Noble ,Jordan Hochenbaum,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 反应测试仪
Arduino实战
这是你在本章中最后一次电路修改。你要在电路中再添加两个LED,最好是一红一绿,它们被用作开始和停止指示灯。最初是红色LED点亮,当它熄灭且绿色LED点亮时,你要尽可能快地按下按钮,来让在前一节中搭建的LED序列暂停。反应速度处于平均水平的人,可以在序列有2个或者3个LED亮起时将其停止。
2.3.1 电路图
请看图2-10给出的电路图,注意新加入的两个LED是如何连接到Arduino的。绿色的LED6和红色的LED7已被添加到电路中,一起加入的还有两个220Ω的限流电阻,R7和R8。
2.3.2 连接
图2-11展示了连接完成后的Arduino和面包板,已将两个新加的LED和两个电阻添加到了现有的电路中。
这就是本章最后完成的电路。下面让我们看一下本章的倒数第二个程序。
2.3.3 测试反应速度的程序
下列代码清单给出了反应测试仪的程序,请将其仔细地输入一个新的程序文件中。
代码清单2.4 反应测试仪
在这个程序中,将6号和7号引脚配置为输出模式,这两个引脚会连接到两个新的LED。还用到了一个Arduino的函数random,它可以接受两个参数,在这个程序中是randMinC:UsersAdministratorAppDataRoamingTencentUsers330842669QQWinTempRichOle2$@2VSST70VFGY$8EWIA0{7.png和randMaxC:UsersAdministratorAppDataRoamingTencentUsers330842669QQWinTempRichOle[G)49Q0ZES093B)](8Y}TKV.png。这个函数返回一个long型的数值,其值在randMin(含)到randMax(不含)之间。
初始化随机数生成器的种子
你可以在初始化阶段调用randomSeed图像说明文字来初始化随机数生成器的种子:
randomSeed(analogRead(0));
传递给randomSeed的值取自未连接的0号模拟引脚的模拟输入值。由于电气噪声的影响,一个未连接的模拟引脚的输入值是不断变化的。
变量state用于控制程序逻辑,并且已经与按钮的状态绑定。第一次按下按钮时,会触发下列事件:原来的5个LED熄灭,红色的stopLed点亮,绿色的goLed熄灭。在一段随机的时间之后,stopLed熄灭,goLed点亮,并启动由原来的5个LED构成的序列,5个LED一个接一个地点亮。按下按钮会停止LED点亮的过程。再次按下按钮会使整个流程重新开始。
2.3.4 烧写和测试
将Arduino连接到USB电缆,确保你的程序已经被正确编译,然后将其写入到Arduino中。按下按钮试玩一下,看看你的反应速度有多快。你还可以跟别人比拼,看谁的反应速度是最快的。
你还可以在程序中再加入一些代码,让它用定时器更精确地记录反应时间。我们会在下一节中讲到这些。