上周的课程我们熟悉了arduino的一些基本的操作,主要熟悉的是数字端口的设置(pinMode)和写操作(digitalWrite)。其实对于一个控制系统而言,必须至少有三部分,第一部分为输入,第二部分处理,第三部分为输出,即(input,output,processing)。
根据这样的标准来说,我们上周的流水灯仅仅是可以输出的一个装置,还算不得可以交互的系统,本周我们重点来了解arduino的输入时如何实现的。我们仍然通过流水灯来呈现其实现过程。
一、可以开关的LED灯
这个实验要实现的是按下开关按钮流水灯才开始工作,再次按下按钮则停止流水灯。实物接线图如下:
2、简单的防抖算法
下面的代码就进行了最简单的防抖,相比上面的代码其实就是在loop的第一句加上了一个延迟500毫秒delay(500),别小看这个延迟语句,在我们从容的按键的时候程序变的非常稳定。
我们可以想见一下,loop运行非常之快,都在微妙级以下,那么我们的按钮手动动作基本都在200毫秒以上一次,所以我们按一下,digitalRead将读到无数次的low信 。所以我们这加入延迟半秒,这样基本保证了在按钮按下和弹起的这一段时间内loop只循环了一次。这样我们的计数就准确了(当然,如果我们按键时间过长也会导致多次计数)。
二、可以控制花样的流水灯
有了上面的btnPressCount后我们则可以引入更多的控制花样了,比如我们接下来要实现的流水灯花样,
我们可能发现,上面的代码在前三次是可以准确实现花样切换,但一旦超过6次就会出现问题,问题就出在取余运算上,6能够被2和3同时除尽,至于8,9,10等数那就有更多的取余数了。所以我们可以通过switch~case选择语句来完成,大致代码改进如下:
上面我们没有具体完成每个花样的具体代码,但其思路已经非常具体了。听过本周的课程,我们了解了arduino如何接收输入方面的内容,以及C++中的switch语句的用法(对比if~else)的优点。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!