学习目标:监听按键,控制LED灯。
实验现象:每次按功能按键,LED9指示灯状态翻转。开机时D9指示灯为熄灭状态,按一下功能按键,点亮LED9,再按一次功能按键,熄灭LED9。
1.点击File->New
2.按Ctrl+S保存到本地,重命名为Button。
可以看到只有两个空的方法,setup()和loop()
setup()函数只在omniduino全向小车开机或者按下复位键时运行一次,可以写入初始化等内容;
loop()函数是omniduino全向小车的主循环函数,大部分数据处理和逻辑处理都是在这个函数里完成。
二、编写代码
1.从硬件速查表查到功能按键K1对应的引脚为8号
2.定义全局变量保存按键状态
3.新建keyscan函数,检测按键是否被按下,中间之所以要加入delay(10)消抖,是因为在机械按键的触点闭合和断开时,都会产生抖动,单片机如果在触点抖动期间检测按键的通断状态,则可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,从而引起误处理。因此,为了确保单片机对一次按键动作只作—次响应,就必须消除按键抖动的影响。消抖完成后再判断一次按键状态,确认按键是按下的就进入while循环,直到松开手才执行button_press翻转并退出按键扫描函数。
4.在setup()函数里初始化引脚模式,按键为上拉输入模式,LED为输出模式。因为从硬件速查表可以知道功能按键按下是低电平,松开是高电平,也就是说低电平有效,所以默认把引脚电压拉高,才可以正常工作。
4.在loop()主循环函数检测按键是否按下,如果按下则点亮LED D9,再次按下则熄灭LED D9。
三、编译上传运行
1.代码编写完成后,按Ctrl+S保存,然后再点击编译按钮,没有出现问题就点击上传(omniduino全向小车要先和电脑通过USB数据线连接)。
2.每次按下按键松开手后,LED D9的状态都会翻转。开机时D9指示灯为熄灭状态,按一下功能按键,点亮LED9,再按一次功能按键,熄灭LED9。
3.如果编译正常通过,但是上传时出现类似以下错误,原因可能是选错串口或者串口被占用。
解决方法:打开设备管理器看看有没有CH340标记的串口,如果没有请先重启一下omniduino全向小车,再重新插拔USB线或者更换一根USB数据线;如果有串口号则先关闭其他串口助手软件,避免串口占用,然后到arduinoIDE的Tools->Port重新选择串口。