基于Arduino 按键控制
- 格式:doc
- 大小:516.50 KB
- 文档页数:4
按键控制舵机程序章节一:引言按键控制舵机是一种常见的控制方法,它通过按键的状态改变来控制舵机的位置。
这种方法简单易行,占用资源较少,因此在各种智能设备和机器人中被广泛应用。
本论文将介绍按键控制舵机的基本原理、软硬件实现方法以及应用案例。
通过本论文的学习,读者将能够了解到如何使用按键控制舵机,并可以根据实际需求进行灵活的应用和扩展。
章节二:按键控制舵机的原理按键控制舵机的原理是通过读取按键的状态来判断是否需要调整舵机的位置。
一般来说,按键有两个状态:按下和松开。
当按键被按下时,电路会输出低电平,舵机会根据低电平的信号调整位置;当按键被松开时,电路会输出高电平,舵机将保持当前位置。
在实际中,可以通过使用数字输入引脚读取按键的状态,然后与设定的阈值进行比较来判断按键是否被按下。
章节三:按键控制舵机的软硬件实现方法按键控制舵机的软硬件实现方法主要包括硬件电路和软件编程两个方面。
硬件电路部分,需要使用数字输入引脚来读取按键的状态,将读取到的状态与设定的阈值进行比较,从而确定舵机是否需要调整位置。
同时,还需要使用PWM(脉冲宽度调制)信号来控制舵机的位置。
可以通过连接Arduino等主控板和舵机,使用适当的电阻分压电路来实现读取按键状态的功能,然后将逻辑电平转化为舵机可以接受的PWM信号。
软件编程部分,需要使用相应的编程语言来控制舵机。
以Arduino为例,可以使用Arduino IDE编写程序。
首先需要定义数字输入引脚来读取按键状态,并使用digitalRead函数来获取其状态。
接着,需要用digitalWrite函数生成PWM信号,通过analogWrite函数将得到的PWM值传输给舵机的控制引脚。
通过不断循环检测按键的状态,根据实际需求来控制舵机的位置。
章节四:按键控制舵机的应用案例按键控制舵机有广泛的应用场景。
一种典型的应用案例是机器人的手臂控制。
通过使用按键控制舵机,可以灵活地控制机器人的手臂动作,实现抓取、放置等功能。
键盘按键控制舵机第一章:引言随着计算机技术的发展,键盘作为重要的输入设备之一,已经在各个领域得到广泛应用。
然而,传统的键盘仅仅用于输入文字和控制计算机的操作,并没有充分发挥其潜力。
本篇论文旨在探索通过键盘按键来控制舵机的可能性,以实现更加多样化和灵活的应用。
第二章:相关技术2.1 键盘技术键盘作为输入设备,有多种不同的技术实现方式。
传统的机械键盘由物理按键和开关组成,通过按下按键触发开关来实现输入。
而现代的薄膜键盘则采用了薄膜触摸的方式,通过电信号判断按键是否被按下。
此外,还有其它技术,如光电键盘和触摸板键盘等。
2.2 舵机技术舵机是一种常见的电机类型,可以通过输入不同的控制信号来精确控制舵机的位置。
它具有体积小、功耗低和响应速度快等优点,在机械臂、机器人和无人机等领域得到广泛应用。
2.3 控制方法通过键盘按键控制舵机可以采取不同的控制方法。
一种方法是将键盘按键映射为舵机的控制信号,通过串口或无线通信的方式传输控制信号到舵机驱动电路。
另一种方法是将舵机的控制电路直接与键盘电路相连,通过电路设计实现按键触发舵机动作。
第三章:设计与实现3.1 系统设计基于上述介绍的相关技术,我们设计了一个键盘按键控制舵机的系统。
系统由键盘输入模块、控制信号处理模块和舵机控制模块组成。
键盘输入模块用于接收用户的按键输入,控制信号处理模块负责处理输入信号并生成对应的舵机控制信号,最后舵机控制模块将控制信号传输到舵机驱动电路,实现舵机的动作。
3.2 硬件实现我们选择经典的薄膜键盘作为输入设备,并通过Arduino板来处理键盘输入信号。
Arduino板上的程序会根据用户的按键输入生成相应的舵机控制信号,然后通过串口进行传输。
舵机控制模块接收到控制信号后,通过PWM信号控制舵机的位置。
3.3 软件实现在Arduino板上编写的程序主要包括键盘输入的监听和信号处理两个部分。
首先,程序会监听键盘输入,并将按键击下和释放的事件转化为对应的ASCII码。
通过Arduino程序获取红外遥控器按键键值编码一、以如下遥控器举例:二、检测按键键值的Arduino程序:#include<IRremote.h>//红外遥控库文件网上有,亦可通过百度账号给我留言int REC_PIN=11; //接收端引脚IRrecvirrecv(REC_PIN);decode_results results;void setup(){Serial.begin(9600); //键值在串口通信窗口中查看irrecv.enableIRIn(); //红外接收端初始化}void loop(){if(irrecv.decode(&results)) //是否收到键值编码{Serial.println(results.value,HEX);//通过串口打印十六进制的键值delay(500);irrecv.resume(); //接收下一个值}}三、检测到的十六进制按键键值(在串口监视器中查看):四、Arduino的红外遥控器控制LED例程:include <IRremote.h>int RECV_PIN = 11;IRrecvirrecv(RECV_PIN);decode_results results;void setup(){Serial.begin(9600);irrecv.enableIRIn(); //初始化红外遥控PinMode(13,1); LED初始化,点亮}void loop() {if (irrecv.decode(&results)){if(results.value==0xFFA25D) //确认接收到按键(1)的编码,此码是预先读出来的按键编码。
{digitalWrite(13,1); //点亮LEDSerial.println("turn on LED"); //串口显示开灯}else if(results.value==0xFF629D) //确认接收到的按键(2)的编码{digitalWrite(13,0); //熄灭LEDSerial.println("turn off LED"); //串口显示关灯}irrecv.resume(); // 接收下一个值}}。
通过Arduino程序获取红外遥控器按键键值编码一、以如下遥控器举例:二、检测按键键值的Arduino程序:#include<IRremote.h>//红外遥控库文件网上有,亦可通过百度账号给我留言int REC_PIN=11; //接收端引脚IRrecvirrecv(REC_PIN);decode_results results;void setup(){Serial.begin(9600); //键值在串口通信窗口中查看irrecv.enableIRIn(); //红外接收端初始化}void loop(){if(irrecv.decode(&results)) //是否收到键值编码{Serial.println(results.value,HEX);//通过串口打印十六进制的键值delay(500);irrecv.resume(); //接收下一个值}}三、检测到的十六进制按键键值(在串口监视器中查看):四、Arduino的红外遥控器控制LED例程:include <IRremote.h>int RECV_PIN = 11;IRrecvirrecv(RECV_PIN);decode_results results;void setup(){Serial.begin(9600);irrecv.enableIRIn(); //初始化红外遥控PinMode(13,1); LED初始化,点亮}void loop() {if (irrecv.decode(&results)){if(results.value==0xFFA25D) //确认接收到按键(1)的编码,此码是预先读出来的按键编码。
{digitalWrite(13,1); //点亮LEDSerial.println("turn on LED"); //串口显示开灯}else if(results.value==0xFF629D) //确认接收到的按键(2)的编码{digitalWrite(13,0); //熄灭LEDSerial.println("turn off LED"); //串口显示关灯}irrecv.resume(); // 接收下一个值}}。
第三十三课Arduino 鼠标按钮控制
使用鼠标库,你可以使用Arduino Leonardo,Micro或Due来控制计算机的屏幕光标。
这个特殊的例子使用五个按钮来移动屏幕上的光标。
四个按钮是方向性的(上,下,左,右),一个是用于鼠标左键单击。
来自Arduino的光标移动总是相对的。
每次读取输入时,光标的位置都会相对于当前位置进行更新。
只要有一个方向按钮被按下,Arduino就会移动鼠标,在合适的方向上将HIGH输入映射到5的范围。
第五个按钮用于控制来自鼠标的左键单击。
当按钮被释放时,计算机将识别事件。
必需的组件
你将需要以下组件:
∙ 1 × Breadboard 面包板
∙ 1 × Arduino Leonardo, Micro 或Due板
∙ 5 × 10k欧姆电阻
∙ 5 ×瞬时按钮
程序
按照电路图连接面包板上的组件,如下图所示。
草图
在计算机上打开Arduino IDE软件。
使用Arduino语言进行编码控制你的电路。
通过单击“New”打开一个新的草图文件。
对于本例,你需要使用Arduino IDE 1.6.7
Arduino代码
代码说明
使用micro-USB线将电路板连接到计算机。
按钮连接到引脚2至6的数字输入。
确保使用10k下拉电阻。
「雕爷学编程」Arduino动⼿做(26)——4X4矩阵键盘模块37款传感器与模块的提法,在⽹络上⼴泛流传,其实Arduino能够兼容的传感器模块肯定是不⽌37种的。
鉴于本⼈⼿头积累了⼀些传感器和模块,依照实践出真知(⼀定要动⼿做)的理念,以学习和交流为⽬的,这⾥准备逐⼀动⼿试试做实验,不管成功与否,都会记录下来---⼩⼩的进步或是搞不定的问题,希望能够抛砖引⽟。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)实验⼆⼗六:4X4矩阵键盘模块(轻触式按键)矩阵键盘是单⽚机外部设备中所使⽤的排布类似于矩阵的键盘组。
矩阵式结构的键盘显然⽐直接法要复杂⼀些,识别也要复杂⼀些,列线通过电阻接正电源,并将⾏线所接的单⽚机的I/O⼝作为输出端,⽽列线所接的I/O⼝则作为输⼊。
由于电路设计时需要更多的外部输⼊,单独的控制⼀个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常⽤的矩阵键盘有4X4和8X8,其中⽤的最多的是4X4。
⼯作原理矩阵键盘⼜称为⾏列式键盘,它是⽤4条I/O线作为⾏线,4条I/O线作为列线组成的键盘。
在⾏线和列线的每⼀个交叉点上,设置⼀个按键。
这样键盘中按键的个数是4X4个。
这种⾏列式键盘结构能够有效地提⾼单⽚机系统中I/O⼝的利⽤率。
由于单⽚机IO端⼝具有线与的功能,因此当任意⼀个按键按下时,⾏和列都有⼀根线被线与,通过运算就可以得出按键的坐标从⽽判断按键键值。
⾏列扫描法原理1、使⾏线为编程的输⼊线,列线是输出线,拉低所有的列线,判断⾏线的变化,如果有按键按下,按键按下的对应⾏线被拉低,否则所有的⾏线都为⾼电平。
2、在第⼀步判断有键按下后,延时10ms消除机械抖动,再次读取⾏值,如果此⾏线还处于低电平状态则进⼊下⼀步,否则返回第⼀步重新判断。
3、开始扫描按键位置,采⽤逐⾏扫描,每间隔1ms的时间,分别拉低第⼀列,第⼆列,第三列,第四列,⽆论拉低哪⼀列其他三列都为⾼电平,读取⾏值找到按键的位置,分别把⾏值和列值储存在寄存器⾥。
数字输出Arduino教程一:11 Comments ?Arduino教程,。
除了管脚的数字Arduino7到管脚2I/O个可用的6I/O被分成两个部分,其中每个部分都包含有管脚,即管脚到管脚8和管脚13I/O1K上接了一个13来对位的数字跑马灯,6上。
ATmega其他各个管脚都直接连接到的电阻之外,我们可以利用一个Arduino数字的输出功能进行验证,以下是相应的原理图:电阻被称为限流电阻,I/O电路中在每个管脚上加的那个1K使用限流电阻可由于发光二极管在电路中没有等效电阻值,以使元件上通过的电流不至于过大,能够起到保护的作用。
该工程对应的代码为:int BASE = 2;int NUM = 6;int index = 0;void setup(){++) BASE; = i (int for i + BASE < i NUM;{pinMode(i, OUTPUT);}}void loop(){for (int i = BASE; i < BASE + NUM; i ++) {digitalWrite(i, LOW);}digitalWrite(BASE + index, HIGH);index = (index + 1) % NUM;delay(100);}2管脚I/O数字Arduino下载并运行该工程,连接在上的发光二极管会依次点亮7到管脚0.1秒,然后再熄灭:1 / 28这个实验可以用来验证数字I/O输出的正确性。
Arduino上一共有十二个数字I/O管脚,我们可以用同样的办法验证其他六个管脚的正确性,而这只需要对上述工程的第一行做相应的修改就可以了:int BASE = 8;01SEPArduino教程二: 数字输入3 Comments ?Arduino, 教程在数字电路中开关(switch)是一种基本的输入形式,它的作用是保持电路的连接或者断开。
Arduino从数字I/O管脚上只能读出高电平(5V)或者低电平(0V),因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino 能够读取的高/低电平。
基于Arduino的键盘输入指法练习器Arduino可以用来制作各种有趣的项目,包括键盘输入指法练习器。
这个项目可以帮助使用者提高键盘的输入速度和准确性。
键盘输入指法练习器由Arduino主板、一块键盘模块和一块LCD显示屏组成。
Arduino 主板作为控制器,通过检测键盘模块的按键输入,并在LCD显示屏上显示出按键的指法练习结果。
要准备一个键盘模块。
可以使用市场上常见的4x4键盘模块,它由16个按键组成,包括数字键0-9、字母键A-Z和一些其他特殊键。
这个模块可以很容易地通过Arduino的数字引脚连接。
接下来,将键盘模块通过杜邦线连接到Arduino主板。
为了简化接线,可以使用一个扩展板,它将键盘模块的引脚与Arduino主板的引脚对应连接起来。
在连接完成后,将Arduino连接到电脑,并打开Arduino IDE。
然后,在Arduino IDE中编写程序。
需要导入LiquidCrystal库,该库可以用于控制LCD显示屏。
接着,定义键盘模块的引脚连接,并初始化LCD显示屏。
在程序的主循环中,通过检测键盘模块的按键输入,可以获取到用户按下的键值。
然后,根据键值可以判断出用户按下的是哪个键,并将键值显示在LCD显示屏上。
还可以记录用户的输入次数,并显示在LCD显示屏上。
可以按照以下代码示例进行编写:```#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);int keypadPins[4][4] = {{0, 1, 2, 3},{4, 5, 6, 7},{8, 9, 10, 11},{12, 13, 14, 15}};char keypadChars[4][4] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};void setup() {lcd.begin(16, 2);lcd.print("Input: ");}void loop() {for (int row = 0; row < 4; row++) {digitalWrite(keypadPins[row][0], HIGH);digitalWrite(keypadPins[row][1], HIGH);digitalWrite(keypadPins[row][2], HIGH);digitalWrite(keypadPins[row][3], HIGH);int col = digitalRead(keypadPins[row][0]) == LOW ? 0 :digitalRead(keypadPins[row][1]) == LOW ? 1 :digitalRead(keypadPins[row][2]) == LOW ? 2 :digitalRead(keypadPins[row][3]) == LOW ? 3 : -1; if (col != -1) {lcd.setCursor(0, 1);lcd.print("Key: ");lcd.print(keypadChars[row][col]);编写完成后,将程序上传到Arduino主板上。
Sheji yu Fenxi!设计与分析基于Arduino pro micro 的客制化机械键盘设计耿烽淇 高琪琪 王振马 睿刘飘(无锡职业技术学院,江苏无锡214000)摘 要:伴随着新时代和全面小康社会的到来,电脑已经成为很多家庭必备的家用电器之一,而键盘作为电脑一个重要的外设设备也备受人们的关注。
鉴于此,基于自主设计的原理图,设计了一种客制化键盘,硬件上由内核为ATmega32U 4的Arduino 的微型专业开的cherry和PCB 成件设计上,主要在kbfirmware 开源软件上设计键盘的排列方式、符按键以及一些特殊的键位5之后导出源文件再烧录到键盘的主控板上即可;而键盘的壳体设计是在12#D_Design 软件上设计出键盘的底盖和上盖,并用#D来。
关键词:Arduino pro micro ;客制化键盘;机械键盘0引言随着社会的,电脑己经成为人们获成工作的一个重要 i于学和上 来,电脑 们学 和工作中必的 i 而键盘作为电脑重要的外设设备, 重要,为 键盘的重会 自 的人 成的影响, 一个键盘的触感、外观、做工、键键要们 的i在 键盘的时候,要 自 的自己的 一个 自的键盘i 一个的键盘除了给别人成困扰外,也方便了自己,提高了效率i此,我们动制作了一种自己的键盘,来满足我们的 求i1硬件构成本项目用的是内核为ATmega32U 4的Arduino的微型专业主控板(Arduino pro micro ),选择这个板子主要有下几个原:(1)引脚相 多,有14个数 /端口、8个模拟端口和4个10的ADC 引脚 ,便于 :者使用;(2)价格实惠,性价比较高;(3)积 小,而且主上有一个PTC 保险丝和二极管 起到保护电源电路和纠正RX 、TX 电路的作用;⑷采用ATmega32U4的单片用于模拟HID 设备,配 传器模块做键盘;(5)使用微型USB 接口编程,支持USB 串口下载。
Arduino pro micro 引脚如图1所示。
按键控制LED实验I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用;按键开关大家都应该比较了解,属于开关量数字量元件,按下时为闭合导通状态;完成本实验要用到的元件如下:按键开关1红色M5 直插LED1220Ω电阻110KΩ电阻1面包板1面包板跳线1 扎我们将按键接到数字7 接口,红色小灯接到数字11 接口Arduino 控制器0-13 数字I/O 接口都可以用来接按键和小灯,但是尽量不选择0 和1 接口,0 和1 接口为接口功能复用,除I/O 口功能外也是串口通信接口,下载程序时属于与PC 机通信故应保持0 和1 接口悬空,所以为避免插拔线的麻烦尽量不选用0 和1 接口,按下面的原理图连接好电路;下面开始编写程序,我们就让按键按下时小灯亮起,根据前面的学习相信这个程序很容易就能编写出来,相对于前面几个实验这个实验的程序中多加了一条条件判断语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像while、swich 等等;这里根据个人喜好我们习惯于使用简单易于理解的if 语句给大家做演示例程;我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上;参考源程序:int ledpin=11;//定义数字11 接口int inpin=7;//定义数字7 接口int val;//定义变量valvoid setup{pinModeledpin,OUTPUT;//定义小灯接口为输出接口pinModeinpin,INPUT;//定义按键接口为输入接口}void loop{val=digitalReadinpin;//读取数字7 口电平值赋给valifval==LOW//检测按键是否按下,按键按下时小灯亮起{ digitalWriteledpin,LOW;}else{ digitalWriteledpin,HIGH;}}下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例------抢答器;。
按键控制LED实验
I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用。
按键
按键开关
红色M5
220
10K
面包板
数字I/O 接口为
应保持
语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像while、swich 等等。
这里根据个人喜好我们习惯
于使用简单易于理解的if 语句给大家做演示例程。
我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。
参考源程序:
int ledpin=11;//定义数字11 接口
{
}
{
else
{ digitalWrite(ledpin,HIGH);}
}
下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的
手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例------抢答器。
aduino按键控制舵机一、引言Arduino 是一种开源的电子平台,它以简洁的编程语言和易用的开发工具,被广泛应用于各种创意项目和原型制作中。
舵机是一种能够控制角度的电动装置,可实现精确的运动控制。
本论文旨在研究如何使用 Arduino 板和按键来控制舵机的运动。
二、原理1. Arduino 板和舵机的连接通过连接杜邦线,将舵机的地线连接至 Arduino 板的 GND (地)脚。
然后,将舵机的电源线连接至 Arduino 板的 5V (电源)脚。
最后,将舵机的控制线连接至 Arduino 板的数字引脚。
2. 按键的接口设置将按键的引脚接入 Arduino 板的数字引脚,并设置相应的引脚为输入模式。
3. 舵机的控制原理舵机通过控制信号的脉冲宽度来控制角度位置。
当脉冲宽度为0时,舵机转到最左边的位置;当脉冲宽度为180时,舵机转到最右边的位置。
在 Arduino 编程中,可以使用 Servo 库来控制舵机的转动。
三、方法1. 初始化程序在 Arduino IDE 中编写程序,导入 Servo 库并定义控制舵机的引脚。
2. 编写按键控制程序通过使用 digitalRead() 函数来读取按键的状态,当按键按下时,控制舵机转动到指定角度。
3. 编译和上传程序将编写好的程序通过 USB 线连接 Arduino 板,并编译上传到Arduino 板上运行。
四、实验结果与分析通过实验可以发现,按键控制舵机的运动是很简单且精确的。
当按键按下时,舵机会转动到相应的角度位置;当按键松开时,舵机保持在当前角度位置。
这种按键控制舵机的方式可以应用于很多实际场景中,如机械臂、门禁系统等。
实验中还可以根据需求进一步优化程序,例如添加限位功能,防止舵机过度转动,并通过串口打印当前舵机角度,方便进行调试和监控。
总结:本实验成功实现了使用 Arduino 板和按键来控制舵机的目标。
通过按键可以精确地控制舵机的转动,实现了精准的角度控制。
3 Arduino,按键,LED3.1 问题描述:如何采用Arduino控制器和按键同时控制LED的闪烁在前面的2个例子中,都是简单地通过将程序烧录到Arduino控制板,然后由控制板来控制LED灯的闪烁,缺乏人情味。
那能不能在Arduino控制的过程中,再加上与人的互动呢?答案是肯定的。
在这个实验中,我们将增加一个新的材料按键按钮来和Arduino一起控制灯的闪烁。
3.2 所需材料表3-1:所需材料序号名称数量作用备注1 Arduino软件1套提供IDE环境最新版本1.052 Arduino UNO开发板1块控制主板各种版本均可3 USB线1条烧录程序随板子配送4 杜邦线若干条连接组件5 发光二极管(LED)1个 LED闪烁6 电阻(10,200Ω)2个限流7 多功能面包板1块连接8 按键按钮1个开关在进行实验之前,我们先介绍按键按钮的相关属性。
按键按钮按键是一种经常使用的设备,通过按键可以输入指令和数据来控制电路的开与关,从而达到控制某些设备的运行状态。
在本实验中,通过给按键输入高低电平来控制LED灯的闪烁。
开关的种类繁多复杂,比如厨房用的单孔开关,卧房用的双控开关,楼道用的声控开关等等,均属于开关的范畴。
在我们实验中,主要是用微型开关,但其种类也很多,如图3-1所示。
图3‐1 微型按键开关种类在本实验中采用的微型开关大致为6*6*5mm的四脚开关。
如图3-2所示。
图3-2 本实验用的按键值得注意的是,1和2是一边的,3和4是一边的,中间有道痕分开。
其原理如图3-3所示,当按键按下去时,1,2,3,4四个管脚接合在一起,2根导线连通,变成一根导线。
电路导通,起到触发(关)作用。
当松开按钮,1,2,3,4四个管脚断开,起到开的作用。
图3‐3 按键按钮原理图3.3 实验原理图当按键按钮按下,获取一个高电平,触发在Arduino控制下的LED闪烁。
当然,我们也可以设置为按键按下是LED灯不亮,当松开按键时,LED灯闪烁,请看后面的代码分析。
Arduino的轻触按键检测在Arduino上做单纯按键检测,其实是很简单的。
但是我这里做的方法考虑了一下防抖和抗干扰。
大概的原理是:每一次主循环检测一次按键,发现低电平(可能为按键按下),就在计数器变量(o_prell)加一,直到计数器变量(o_prell)达到BUTTONS_SAMPLES 定义的值,则判定按键按下。
而在此过程中如果检测到高电平,则计数器变量(o_prell)减一,这样起到防抖和抗干扰的作用。
按键释放时,则相反,计数器变量(o_prell)减一,直到 0。
BUTTONS_SAMPLES 我设置的比较大,是6000,主要因为程序里没什么代码,主循环比较快。
如果程序代码较多,主循环没有这么快,这个值要调低的。
这个值改低一点,按键灵敏度会提高,但是防抖和抗干扰的作用会变差。
如下程序实现的功能是,每按一次按键,Arduino板上的LED会切换亮灭。
按键接在pin#7和GND之间,pin#7需要上拉电阻到5V。
C++语言: 高亮代码由发芽网提供#define BUTTON_PIN 7 // Button pin#define LED_PIN 13 // Led pin#define BUTTONS_SAMPLES 6000 // Affect the sensitivity of the button#define BUTTON_PRESSED LOW // The state of the pin when button pressedunsigned int o_prell = 0; // counter for buttonpressing detectionboolean button_state = false;unsigned int led_state = LOW; // Led off at the beginningvoid setup(){//Serial.begin(9600);pinMode(BUTTON_PIN, INPUT);pinMode(LED_PIN, OUTPUT);// set initial LED statedigitalWrite(LED_PIN, led_state);}void loop(){check_button();digitalWrite(LED_PIN, led_state);}void check_button(){int button_input = digitalRead(BUTTON_PIN);if((button_input == BUTTON_PRESSED) && (o_prell <</SPAN> BUTTONS_SAMPLES)){o_prell++; // counting for button pressing}else if ((button_input == BUTTON_PRESSED) && (o_prell == BUTTONS_SAMPLES) && !button_state){button_state = true; // button pressed//led_state = HIGH;led_state = !led_state;}else if ((button_input != BUTTON_PRESSED) && (o_prell > 0)) {o_prell--; // counting for button releasing, or debouncing / immunity}else if ((button_input != BUTTON_PRESSED) && (o_prell == 0) && button_state){button_state = false;//led_state = LOW;}}。
按键控制LED实验
I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用。
按键开关大家都应该比较了解,属于开关量(数字量)元件,按下时为闭合(导通)状态。
完成本实验要
用到的元件如下:
按键开关*1
红色M5 直插LED*1
220Ω电阻*1
10KΩ电阻*1
面包板*1
面包板跳线*1 扎
我们将按键接到数字7 接口,红色小灯接到数字11 接口(Arduino 控制器0-13 数字I/O 接口都可以用来接按键和小灯,但是尽量不选择0 和1 接口,0 和1 接口为接口功能复用,除I/O 口功能外也是串口通信接口,下载程序时属于与PC 机通信故应保持0 和1 接口悬空,所以为避免插拔线的麻烦尽量不选用0 和1 接口),按下面的原理图连接好电路。
下面开始编写程序,我们就让按键按下时小灯亮起,根据前面的学习相信这个程序很容易就能编写出来,相对于前面几个实验这个实验的程序中多加了一条条件判断语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像while、swich 等等。
这里根据个人喜好我们习惯
于使用简单易于理解的if 语句给大家做演示例程。
我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。
参考源程序:
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
int val;//定义变量val
void setup()
{
pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口pinMode(inpin,INPUT);//定义按键接口为输入接口
}
void loop()
{
val=digitalRead(inpin);//读取数字7 口电平值赋给val
if(val==LOW)//检测按键是否按下,按键按下时小灯亮起
{ digitalWrite(ledpin,LOW);}
else
{ digitalWrite(ledpin,HIGH);}
}
下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例------抢答器。