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工作团队. 如果从狭 ...
随机推荐
- 你的专属音乐生成器「GitHub 热点速览」
如果你制作视频,一定会碰到配乐的问题.虽然网上找的一些免费配乐能勉强满足需求,但是如果有个专属的配乐生成器,根据你的视频画面生成对应配乐是不是不错呢?audiocraft 也许能帮助你,把相关画面用文 ...
- mysql截取函数,拼接函数,大写函数例子
题目:这题目是牛客网sql题,因为牵扯到3个函数,都是自己没怎么用过的,所以记录一下. 答案:是别人的解题思路 可以看出在mysql中提供的函数可以供我们使用来操作字段,非常的方便
- List 接口及其常用方法
List 接口基本介绍 List接口是Collection接口的子接口,其主要特点如下: List中元素有序,是按照元素的插入顺序进行排序的.每个元素都有一个与之关联的整数型索引(索引从 0 开始), ...
- 【NestJS系列】核心概念:Controller控制器
前言 控制器主要是用来处理客户端传入的请求并向客户端返回响应. 它一般是用来做路由导航的,内部路由机制控制哪个控制器接收哪些请求. 路由 为了创建基本控制器,我们需要使用@Controller装饰器, ...
- JVM方法区
JVM方法区 <Java虚拟机规范>中明确说明:"尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩."但对于HotSpo ...
- 部署 rsyslog 日志服务
ubuntu 服务端 + Centos 客户端 参考文档: ubuntu 20.04 搭建 rsyslog 服务器 CentOS7下搭建Rsyslog Server记录远程主机系统日志
- 如何配置Linux的yum源
一.配置本地yum源 1.挂载光盘 a.建目录 #mkdir /media/cdrom b.挂载光盘 #mount /media/sr0 /media/cdrom c.挂载本地iso文件 #mount ...
- Unity的IPostprocessBuild:深入解析与实用案例
Unity IPostprocessBuild技术文章 Unity IPostprocessBuild是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自动执行一些操作.这个功能可以帮 ...
- 关于 ModelScope 的视频 “AI 换脸” 优化方案
前言 前面一文,初步完成了一下 "AI 换脸" 视频处理程序.完成了视频拆帧,拆帧图片人脸融合,已经音频提取和最后的人脸融合图片的整合(也就是将图片和音频组成视频).但是在人脸融合 ...
- C#的重载决策
重载是许多编程语言支持的特性.所谓重载,就是指可以定义多个名称相同但参数(个数.类型和顺序)不同的方法(函数).先来看一个例子: void Main() { char cvalue = 'a'; ma ...