有没有像手机滑音量自动下滑一样的多段式滑动触摸开关?适合arduino用的。

查看: 22492|回复: 1
Arduino教程-用按键开关计数
Hi,大家好!今天我们将综合之前学到的,关于如何更好的使用按键开关等相关知识,做一个综合的小实验,看看如何用按键开关进行计数。当然,与其说是用按键开关进行计数,其实不如说是记录按键开关的点击次数,嘿嘿!好!打起精神,让我们开始吧!
首先,当然还是老样子,先要对所学的内容做准备。
arduino-read-digital.jpg (121.51 KB, 下载次数: 66)
21:16 上传
图片来源:Arduino电路配件
具体包括如下:
Arduino UNO电路板(1块)面包板(1块)10k电阻(1个)按键开关(1个)面包线(3根)
看!电路配件还是之前碰到的电路配件!没有新面孔出现,继续!
软件方面Arduino官方提供的IDE。
arduino-ide-new.jpg (70.98 KB, 下载次数: 74)
21:16 上传
图片来源:Arduino连接开关按键电路示意图
嗯!电路连接还是之前碰到的电路连接!简单吧!就剩下最后一步拉!
添加几行代码首先,还是新建一个项目窗口。
arduino-menu.jpg (9.87 KB, 下载次数: 64)
21:16 上传
图片来源:Arduino官方IDE
下面就不能再一样了,哈哈!!不过,虽说不一样了,但也只是综合了前面所学的相关知识。
// 定义按键的针脚号为2的整型常量
const int&&buttonPin = 2;
// 定义LED输入针脚号为13号针脚
// 注:此处我们使用的LED神灯是Arduino UNO电路板自带,
// 此神灯对应的针脚号默认为13,此数值不得随意更改,
// 所以这里定义的数值13是为了和默认值相对应。
const int ledPin = 13;
// 定义用来记录按键次数的整型变量
int buttonPushCounter = 0;
// 记录当前按键的状态
int buttonState = 0;
// 记录按键之前的状态
int lastButtonState = 0;
// 对Arduino电路板或相关状态进行初始化方法
void setup() {
&&// 设置按键的针脚为输入状态
&&pinMode(buttonPin, INPUT);
&&// 设置电路板上LED神灯的针脚状态为输出状态
&&pinMode(ledPin, OUTPUT);
&&// 开启串行通信,并设置其频率为9600。
&&// 如果没有特别要求,此数值一般都为9600。
&&Serial.begin(9600);
}
// 系统调用,无限循环方法
void loop() {
&&// 读取按键的输入状态
&&buttonState = digitalRead(buttonPin);
&&// 判断当前的按键状态是否和之前有所变化
&&if (buttonState != lastButtonState) {
& & // 判断当前按键是否为按下状态,
& & // 如果为按下状态,则记录按键次数的变量加一。
& & if (buttonState == HIGH) {
& && &// 将记录按键次数的变量加一
& && &buttonPushCounter++;
& && &// 向串口调试终端打印字符串“on”,
& && &// 表示当前按键状态为按下接通状态,
& && &// 输出完成之后自动换行。
& && &Serial.println(&on&);
& && &// 向串口调试终端打印字符串
& && &// “number of button pushes: ”,此处没有换行。
& && &Serial.print(&number of button pushes:&&&);
& && &// 接着上一行尾部,打印记录按键次数变量的数值。
& && &Serial.println(buttonPushCounter);
& & } else {
& && &// 向串口调试终端打印字符串“off”,
& && &// 表示当前按键状态为松开状态,也即断开状态。
& && &Serial.println(&off&);
& & }
& & // 为了避免信号互相干扰,
& & // 此处将每次按键的变化时间间隔延迟50毫秒。
& & delay(50);
&&}
&&// 将每次loop结束时最新的按键状态进行更新
&&lastButtonState = buttonS
&&// 每点击4次,更新一次LED神灯状态。
&&// 这里的百分号是求余数的意思,
&&// 每次除以四,余数等于零说明按键点击的
&&// 次数是四的整数倍,即此时更新LED神灯。
&&if (buttonPushCounter % 4 == 0) {
& & // 点亮LED神灯
& & digitalWrite(ledPin, HIGH);
&&} else {
& & // 熄灭LED神灯
& & digitalWrite(ledPin, LOW);
&&}
}
复制代码
代码看起来好像有点长……其实呢,如果你仔细观察,就会发现,其实百分之八十的代码都是之前学《》的时候学到的,而这次只是在其基础上加入了计数的变量而已。如果觉得眼前的代码有点眼晕,可以回过头去温习一下那篇文章。
图片来源:Arduino官方IDE的文件编辑菜单选项
好!点击一下上图中标有向右指向的箭头图标,将编写好的代码烧入Arduino UNO电路板。然后点击上图中最右侧的放大镜图标,打开串口调试窗口,如下图所示。
图片来源:Arduino串口调试窗口
此时,当你每次按下或松开按键开关,都会打印相应的字符串,来显示当前的按键状态。而与此同时,Arduino UNO电路上的LED神灯,也会在你每按四次按键更新一次状态。
总结通过此次练习,我们没有加入任何新知识,总体而言,是对前面几次的学习进行了一次综合运用。如果哪一部分看起来有点儿头晕,可以温习一下过去的几次所学。嗯,加油!
下期预告一连几次总是学习按键开关,是不是有点腻了?嗯,猜到了!下一次,我们将一起学习新内容。以前呢,Arduino UNO这块憨厚老实的电路板,总是默默无闻的任你使唤。接下来,我们要让她发出自己的声音。答对了!我们要听听她那令人陶醉的歌喉!
ohcoder的系列精彩Arduino教程:
Arduino教程-初识Arduino(包含本教程目录):
Arduino教程-开篇:
Arduino教程-点亮LED神灯:
Arduino教程-让LED神灯闪烁:
Arduino教程-让LED神灯亮度渐变:
Arduino教程-获取输入数字信号:
Arduino教程-获取输入模拟信号:
Arduino教程-另一种时间延迟:
Arduino教程-按键开关:
Arduino教程-停止抖动!:
Arduino教程-抛弃外部电阻!:
Arduino教程-用按键开关计数:
………后续持续更新中请打开:
特别感谢,有助于快速入门!!!
Powered byarduino学习笔记6 - 按键实验 - Arduino论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
arduino学习笔记6 - 按键实验
17:32:00  
29075&查看
按键是一种常用的控制电器元件,常用来接通或断开电路,从而达到控制电机或者其他设备运行的开关。按键的外观多种多样,本次实验使用的是这种微型按键,6mm的,如下图。
此种按键有4个脚,从背面看是这样子的。
在按键没有按下去的时候1,2号脚相连,3,4号脚相连。按键按下去的时候,1,2,3,4号脚就全部接通。
本次实验使用按键来控制led的亮或者灭。
一般情况是直接把按键开关串联在led的电路中来开关,这种应用情况比较单一。
这次实验通过间接的方法来控制,按键接通后判断按键电路中的输出电压,如果电压大于4.88V,就使给LED电路输出高电平,反之就输出低电平。使用逻辑判断的方法来控制LED亮或者灭,此种控制方法应用范围较广。
本次连接方法如下图。按键开关两段一端连接5V接口,一端连接模拟5号口。LED长针脚串联220Ω电阻连接数字7号口,短针脚连接GND。
把下面的代码上传到arduino控制板上,看看效果。ARDUINO 代码复制
int key=7;//设置LED的数字IO脚void setup(){&&pinMode(key,OUTPUT);//设置数字IO引脚为输出模式}void loop(){&&int//定义变量&&while(1)&&{& & i=analogRead(5);//读取模拟5口电压值& & if(i&1000)//如果电压值大于1000(即4.88V)& && &digitalWrite(key,HIGH);//设置第七引脚为高电平,点亮led灯& & else& && &digitalWrite(key,LOW);//设置第七引脚为低电平,熄灭led灯 &&}}
本次实验使用到analogRead()这个新命令。
analogRead()作用是读取模拟口的数值。默认是把0-5V的输入电压分成1024份,每一份大约为0.0049V,其数值在0-1023之间。
在本次程序代码中的读取数值如果大于1000则给LED输出高电平, 所对应的电压也就为大于4.88V。
analogRead()命令输入的范围与分辨率可以使用analogReference()命令进行改动。
刚开始本实验选用的判断标准是512,也就是2.5V。但是有网友按照教程的方法进行试验发现有问题,有时不需要按按钮灯就会自己亮。根据多次试验与分析后,确定其为各种干扰所致。比如感应电流等等不少都是大于2.5V的,所以为了提高准确度,只能提高判断的电压,本次实验就是提高到V)。人体自身也带电,早中晚还个不一样。下面的实验就是把模拟5号口判断标准定位512,用手去触摸模拟5号口导线就可以点亮LED。
前面的按键实验,有人会反映手接近开关就会亮灯。这个是因为没有下拉电阻,使得外界干扰影响了判断。
先来看一下下拉电阻的接法。在接按键的接口与GND之间接一个1K-10K Ω的电阻。其作用是当外界有干扰源的时候,在断开状态下,干扰源在通向GND的过程中,会被电阻消耗掉。
看一下硬件连接图,本次实验直接使用arduino duemilanove 13号口自带的led作为指示灯。
下面的代码和上面的不同,其中加入了软件消抖。因为本次例子是按键按一次灯亮,再按一次灯灭,如果不加消抖,就会产生按下去状态无法改变的情况。
软件消抖指的是检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
硬件消抖是在开关两段接一个0.1uf的电容,但是其无法替代软件消抖。 其作用不同,搭配使用效果最好。
感谢ansifa提供的加入了软件消抖的实验代码。ARDUINO 代码复制
/*开关连接实验 接线方法: 材料:一个轻触开关、一个10kΩ电阻,一个0.1uF电容(可选) 连接方法: 开关接在Arduino D3和+5V之间; 10kΩ电阻接在Arduino D3和GND之间; 0.1uF电容接在Arduino D3和+5V之间(可以不用电容); */int Button=3; //连接开关到D3。int LED=13; //连接LED到13(实际上UNO等版本已经有了)。boolean onoff=LOW; //设定一个变量用于记录开关状态。void setup(){&&pinMode(Button,INPUT); //按钮端子作为输入&&pinMode(LED,OUTPUT); //LED端子作为输出}void loop(){&&if(digitalRead(Button)==LOW)&&//由于本例检测上升沿触发,所以先检测输入是否低电平,&&{& & delay(10); //然后延时一段时间,& & if(digitalRead(Button)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。& & {& && &digitalWrite(LED,onoff);&&//写入当前LED状态onoff,& && &onoff=(!onoff); //然后LED状态反转,以便下一次使用。& && &delay(10);&&//延时一段时间,防止按钮突然断开再按下。& && &while(digitalRead(Button)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转& && &{& && &&&delay(1);& && &}& & }&&}}
下面是这段代码的效果:
当没有下拉电阻的时候,可以明显看到下面的示波器波形,按键断开时低电平漂浮不定,这样子容易出现误判。看按键按下与松开的波形,也能明显感觉到低电平不稳。
当接上电阻后,低电平的稳定了,按键按下时,波形没问题,但是按键松开时,波形抖动很厉害。
最完美的是把下拉电阻和电容都接上,这样就综合了所有优点,按键松开时,波形很稳定。
21:44:21  
还行吧,继续努力还行吧,继续努力
只有小组成员才能发言,
328个成员聚集在这个小组
创建小组步骤
创建小组创建自己的地盘
个性设置精心打造小组空间
邀请好友邀请好友加入我的小组
小组升级小组积分升级赢得社区推荐
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司数字触摸开关Touch(Arduino兼容)_交互传感器_传感器模组_传感器_DFRobot 创客商城:创客教育和机器人的造物梦工厂
欢迎光临本店 ,新用户?
切换语言:
全部商品分类﹀
& 数字触摸开关Touch(Arduino兼容)
数字触摸开关Touch(Arduino兼容)
价格:¥30.00
已有人评价
DFRobot出品新版电容触碰开关,更精美外观,更人性化设计。
小板上的端口边上有一个大写的D,标明这是一个数字的传感器。
模块上有一个手势小标识,标明这是一个触碰传感器。
小板上带有高品质接头,能够经受反复插拔,保证接触牢固,良好。
沉金工艺,不仅保证模块的性能,而且带有金色光泽哦!感觉像摸着金子,有木有!
触摸开关是基于电容感应原理。人体或金属在传感器金属面上的直接触碰会被感应到。除了直接触摸,隔着一定厚度的塑料、玻璃等材料的接触也可以被感应到,感应灵敏度随接触面的大小和覆盖材料的厚度而变化。
注意事项:使用时模块需要离固定面有一定高度,避免接触产生信号误差。
Arduino能够感受到你的触碰
类型:数字信号
供电:3.3-5VDC
接口模式:PH2.0-3
平面尺寸:22x30mm
触摸开关模块 & &1块
数字传感器线 & &1根
相关文档(添加链接)
支付与配送
DFRobot 创客商城 版权所有,并保留所有权利。 浦东新区亮秀路112号Y1座615室
友情链接:}

我要回帖

更多关于 摄像头怎么调音量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信