查看“第三课:输入设备的使用”的源代码
←
第三课:输入设备的使用
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=碰撞开关= 碰撞开关是最常用的输入设备之一,其原理也十分简单,当开关按下时,信号读取为0,当抬起时,读取为1,当使用起来时则可以实现很多变化。 ===碰撞开关的使用——利用开关实践选择结构=== [[File:Crash usage.png]]<br> 开关使用的基本原理是:当开关弹起时,程序读取到的值是1,当开关按下时,读取到的值是0。<br> 因此,如果要设计一个控制灯开关的程序,应该怎么写呢? ===编程=== #include<Adafruit_NeoPixel.h> #define LED_Pin 6 #define LED_Num 2 #define Key_Pin 8 //定义开关的引脚为8 Adafruit_NeoPixel ColorLED=Adafruit_NeoPixel(LED_Num, Led_Pin, NEO_GRB+NEO_KHZ800); void setup(){ ColorLED.begin(); pinMode(Key_Pin,INPUT); //定义开关的引脚为输入状态 } void loop(){ int KEY=digitalRead(PIN_Key); //定义一个整数变量KEY,同时让KEY的值等于读取到的开关引脚的值。digitalRead(a)也是Arduino的基本语句,意思是读取”a“引脚上的数字信号值。 if(KEY==0){ ColorLED.setPixelColor(0, ColorLED.Color(255,0,0)); ColorLED.show(); //这段就是选择结构最基本的形式,”if“如果括号里的条件成立,则执行{}中的命令,在这段代码中,即当KEY的值等于0,也就是开关按下的时候,灯亮。其中”==“左右两边的值相等,而”=“只是将右边的值赋给了左边,并不是真正意义的等于。 }else{ ColorLED.setPixelColro(0,ColorLED.Color(255,0,0)); ColorLED.show(); //如果不满足”if“条件,就执行”else“后面{}中的程序,在当前程序中即关灯。因为KEY只有等于0或1两种情况,所以else后面就不再写KEY==1了。 } } ===动手时间=== 试着用开关实现两种灯的切换,抬起时第一个灯亮,第二个灯灭,按下时反过来 ===其他用法=== 碰撞开关由于会自动回复到弹起的状态,在实际使用中,也可以当作按钮来使用<br> [[File:Crash button.png]]<br> Microduino定义了一个库文件,可以检测到碰撞开关是否被按下(press)过,但只记录按下的那一瞬间,而不是一个持续的过程。<br> [[File:Crash switch.png]]<br> 这样,就可以实现按一下执行命令A(比如开灯),再按一下执行命令B(比如关灯),但程序怎么判断是第几次按开关呢?<br> [[File:Crash judgement.png]]<br> 因此我们需要引入一个布尔变量来记录开关被按的状态,布尔变量只有true和false两个值,每当开关按下时,这个布尔变量就翻转一次。<br> [[File:Crash boolean.png]]<br> 然后再定义,当布尔值为真的时候亮灯,反之则关灯,这样就实现切换控制了。具体代码如下: #include<Adafruit_NeoPixel.h> #include<Microduino_Key.h> //调用碰撞开关库文件 #define PIN_LED 6 #define PIN_NUM 2 #define PIN_Key 8 Key KeyA(PIN_Key,INPUT_PULLUP); //定义开关名称为KeyA,以及开关引脚和模式 Adafruit_NeoPixel ColorLED=Adafruit_NeoPixel(LED_NUM, PIN_LED, NEO_GRB+NEO_KHZ800); boolean sta=false; //定义一个布尔变量sta,初始状态为假 void setup(){ ColorLED.begin(); pinMode(PIN_Key,INPUT); } void loop(){ if(KeyA.read(PRESS)){ //当开关读取到按下的状态时,反转布尔值,其中”名称.read(PRESS)“是开关使用的语法,这段代码只检测是否按过,而不是按下去的状态 sta=!sta; //布尔值反转用”!“表示 } if(sta){ //当布尔值sta为真时,灯亮 ColroLED.setPixelColor(0, ColorLED.Color(255,0,0)); ColroLED.show(); }else{ //否则,也就是当sta值为假的时候,灯灭 ColorLED.setPixelColor(0,ColorLED.Color(0,0,0)); ColorLED.show(); }delay(15); //由于单片机运行速度太快,导致程序判断时可能会出错,所以整体延时15毫秒,让它稍微放慢一些 } ===动手时间=== 尝试用开关控制两个灯,按一下第一个灯亮,再按一下第二个灯亮<br> 更进一步,如果要实现多个命令的切换,应该怎么处理呢?<br> [[File:Crash extension.png]] =其他输入设备= ==人体红外传感器== 人体红外传感器返回的是数字信号,通过选择结构可以实现类似开关的功能。<br> 当有人经过检测范围时,其信号值为0,而没有人的时候则为1,因此,人体红外传感器只能判断是否有人,而无法判断与人之间的距离。<br> [[File:PIR detection.png]] ===动手时间=== PIR的程序和第一个开关使用的程序完全一样,试着套用一下,实现一个PIR控制的灯,有人经过灯就会亮 ==光敏传感器== 光敏传感器传回的是模拟信号,即光线变化的一组数字,可以利用这些数字实现相应的控制。<br> [[File:Light signal.png]]<br> 模拟信号是一组不断变化的数字,可以通过串口监视器观察数值的变化 ==声音传感器== 声音传感器与光敏传感器类似,也是返回一段声音变化的模拟信号,可以利用这个变化做应用<br> [[File:MIC signal.png]]<br>
返回至
第三课:输入设备的使用
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息