Arduino基础入门之三按键开关
目的:通过读取按键开关的信号,实现其他器件的控制
难点:下拉电阻和上拉电阻
一、关于按键开关
按键开关如上图【1】所示,但我拿到实物,最令我头疼的是按钮下边4个角,我不知那两边是相通的(就是和图中1234对不上),这样没法在面包板上安装(⊙﹏⊙b汗)。这个问题好困扰,难不成只能试错来搞定?后来仔细看图,才发现自己好蠢,其实引脚是有方向的(还是完全对照上图即可),在同一个纵方向上本就是连通的,按下后相邻引脚连通。
将按键开关连接到电路中有两种模式,一种是配下拉电阻,如下图【1】,按键两引脚一段接5v,一端接数字引脚(此引脚需设置为输入模式),并连接下拉电阻至Gnd。这种接法未按时9号引脚读出为0(低电平),按下时读出为1(高电平)。
另一种则是输入上拉模式【2-3】,连接如下图,一端连数字引脚(此引脚需设置为INPUT_PULLUP模式),另一端接地,这种模式下,按键开关未按时数字引脚读出为1(高电平),按下时读出为0(低电平)。
以上关于按键开关对应数字引脚读出的状态,其实都是通过串口显示出来的,代码如下:
int Button1 = 2; //下拉电阻_按钮1_2号引脚
int Button2 = 3; //内置上拉电阻_按钮2_3号引脚
void setup()
{
Serial.begin(9600); //初始化串口波特率为9600
pinMode(Button1, INPUT);//按钮1引脚设置为输入
pinMode(Button2, INPUT_PULLUP); //按钮2引脚设置为输入上拉模式
}
void loop()
{
// 读取输入引脚的值
boolean button1State = digitalRead(Button1);
boolean button2State = digitalRead(Button2);
// 打印结果到串口
Serial.print("button1:");
Serial.println(button1State);
Serial.print("button2:");
Serial.println(button2State);
delay(1000); //延迟
}
连接电路将代码下载后,可以通过IDE里面串口监视器查看对应数字引脚的输入值,比较方便。代码中关于串口引入了两个函数:
1.Serial.begin()——串口初始化函数
2. 串口界面打印函数Serial.print() 打印 Serial.println()打印并换行
另外就是和输入模式(输入上拉模式)配对使用的digitalRead(),可以读取引脚状态,boolean则是布尔型数据,即数据为0(False)或1(True)
二、用按键开关控制LED亮灭
在按键开关旁边再多加一路LED,LED的连接还是和以前一样(注意正负极),代码如下
//按钮控制LED的亮灭,按下亮,松开则灭
const int buttonpin = 2;//button连接引脚
const int ledpin = 13;//led连接引脚
void setup() {
// put your setup code here, to run once:
pinMode(ledpin, OUTPUT);//设置led连接引脚为输出模式
pinMode(buttonpin, INPUT); //设置button连接引脚为输入模式
}
void loop() {
// 检测按钮是否被按下 repeatedly:
boolean buttonstate = digitalRead(buttonpin);
if(buttonstate == 1){
digitalWrite(ledpin, 1);}
else{digitalWrite(ledpin, 0);}
}
这次代码里面digitalWrite()函数中我写了1、0,代替HIGH、LOW,后来看了学习资料里面的答案,感觉答案写的更简洁,似乎没必要写if else.
boolean buttonState = digitalRead(pushButton);
digitalWrite(led, buttonState);
另外就是这个代码的效果是按下LED亮,松开则灭,我想改进一下,按一下亮,再按一下灭,代码如下:
//按键开关控制LED灯,按一下亮,再按一下灭
const int buttonpin = 2;//button连接引脚
const int ledpin = 13;//led连接引脚
boolean ledstate = false;//led状态
void setup() {
// put your setup code here, to run once:
pinMode(ledpin, OUTPUT);
pinMode(buttonpin, INPUT);
digitalWrite(ledpin, LOW);//一开始灯灭
}
void loop() {
// 检测按钮是否被按下 repeatedly:
boolean buttonstate = digitalRead(buttonpin);
if(buttonstate == 1){
//变灯
ledstate = !ledstate;
digitalWrite(ledpin, ledstate);
}
}
但是代码下载后,这个效果时灵时不灵,有时候按了没变化,不知问题出在哪儿?好像和我按地快慢以及间隔有关系,尝试了很多次还是不行。更细一点的想法就是按钮按下时,读取值是一个1-0-1变化,怎么把这一个变化作为控制LED的信号呢?反正现在这个代码就算是成功的时候,也是一按下就开始变了,还是和我想的按一下触发有细微差异的。
【1】DFROBOT初级教程Lesson4 https://mc.dfrobot.com.cn/thread-1316-1-1.html
【2】https://blog.csdn.net/xiaoxiaoxiaoali/article/details/104338747
【3】https://www.kancloud.cn/yundantiankong/arduino_examples/431630
————————————————
版权声明:本文为CSDN博主「Rick_ding」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013978070/article/details/119346429
Arduino基础入门之三按键开关的更多相关文章
- Arduino基础入门—3.连接 IIC 1602 LCD显示文字
1. IIC转接板介绍 Arduino Uno R3开发板的外部IO口是非常有限的.在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱 ...
- Arduino基础入门篇-进入Arduino的世界
写在前面,首先是发现有网友对Arduino做了介绍,而且介绍比较清晰到位,就引用过来了. 文章出处:https://blog.csdn.net/TonyIOT/article/details/8091 ...
- Arduino基础入门—1.Hello World
1.首先是下载.安装IDE. https://www.arduino.cc/en/Main/Software 2.连接开发板到电脑. 将UNO R3开发板通过数据线连接到电脑.打开设备管理器查看驱动是 ...
- python基础入门之三 —— 字符串
1.格式 一对引号和三对引号可以表示字符串 (三引号保留换行) 2.下标 从0开始循序向下分配 str1='abcdefg' print(str1) print(str1[0]) print(str1 ...
- arduino小车入门教学——第三天(arduino基础)
大家好,我是小编, 记上一节内容点击打开链接 我们今天讲arduino基础. 首先在arduino官网上下载程序. Windows解压版 苹果系统的版本号 好,下载过编程软件.我们就来讲编程. 这是类 ...
- 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”
011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...
- 从零3D基础入门XNA 4.0(2)——模型和BasicEffect
[题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...
- Linux 基础入门(新版)”实验报告一~十二
实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
- html5 基础入门
html5 基础入门 前言介绍 HTML5草案的前身名为 Web Applications 1.0,于2004年被WHATWG提出,于2007年被W3C接纳,并成立了新的 HTML工作团队. 如果从狭 ...
随机推荐
- Apache Hudi 元数据字段揭秘
介绍 Apache Hudi 最初由Uber于 2016 年开发,旨在实现一个交易型数据湖,该数据湖可以快速可靠地支持更新,以支持公司拼车平台的大规模增长. Apache Hudi 现在被业内许多人广 ...
- 【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析
前言 在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化. Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息. 这个数据结构允许我们在Chart ...
- SRS之StateThreads学习
最近在看SRS的源码.SRS是基于协程开发的,底层使用了StateThreads.所以为了充分的理解SRS源码,需要先学习一下StateThreads.这里对StateThreads的学习做了一些总结 ...
- BUUCTF-Misc-荷兰宽带数据泄露(RouterPassView的使用)
题目 下载附件是一个bin文件 这里用的一个工具RouterPassView--路由器密码查看工具 路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY. ...
- 树莓派使用Golang+MQ135检测室内空气质量
MQ135是一个比较便宜的空气质量传感器,可以用在家庭以及工业场所中.树莓派是一个小巧但很强大的卡片电脑,基于Linux,同时提供了很多硬件接口,方便开发出各种电子产品.Golang是一款简单高效 ...
- 【MAUI Blazor踩坑日记】4.只在特定平台上引用包
其实这个并不是MAUI特有的问题,只是在MAUI中可能会遇到. 例如某个包只在Windows上有用,但打包的时候,安卓.ios也会把这个包计算在内 所以需要在不是特定平台时把它排除. 万幸从微软文档找 ...
- DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI/CD解决方案
目录 一.系统环境 二.前言 三.DevOps简介 四.CI/CD简介 五.安装并配置docker参数 六.使用registry搭建镜像仓库 七.安装部署gitlab代码仓库 7.1 创建gitlab ...
- 笔记:KMP的复习
Record 一个重要的字符串算法,这是第三次复习. 通过总结我认为之所以某个算法总是忘记,是因为大脑始终没有认可这种算法的逻辑(也就是脑回路). 本篇主要讲解从KMP的应用场景,再到算法知识,以及例 ...
- 合并两个不同远程仓库的Git命令
一.需求场景描述 远程仓库A:http://XXXA.git 远程gitlab,团队协作开发主仓库,新仓库 远程仓库B:http://XXXB.git 旧仓库 从A仓库和B仓库,都对同一个项目进行过开 ...
- 端路由原理及react-router的常用组件
在react中,通常都是使用单页面应用(SPA),即整个页面只有一个html,然后通过不同的url地址进行组件的匹配和切换. 我们看到的url地址可能会有两种形式,一种是 localhost:3000 ...