网易首页 > 网易号 > 正文 申请入驻

Arduino入门教程3:开关

0
分享至

在上篇教程中我们了解了如何使用Arduino来控制LED灯,在这篇教程中我们会在上篇的基础上,添加一个按钮,来使用按钮控制LED灯。为此,我们需要:

- 一个按键开关

- 一个10K欧姆电阻

- 一些跳线

- 面包版

若是要使用外接LED的话,还需要上篇教程(教程2)中所提及的材料。

现在,将这些元件以以下方式连接到面包版上:

这个电路的工作原理如下:

当这个开关没有闭合时,也就是没有被按下时,5V的电路与Arduino的2接口间是断开的,此时2接口与地线想接,所以Arduino从2接口所获的输入为LOW。

当开关闭合时,2接口与5V相接,从而导致Arduino接收到HIGH的输入。通过代码编程,我们可以通过这个Arduino所接收的输入变化,来控制LED灯。

代码如下:

const int buttonPin = 2;

const int ledPin = 13;

int buttonState = 0;

void setup() {

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

void loop() {

buttonState = digitalRead(buttonPin);

if (buttonState == HIGH) {

digitalWrite(ledPin, HIGH);

} else {

digitalWrite(ledPin, LOW);

逐行分解,这段代码的功能如下:

将这个代码所要使用的两个接口数值保存在常量内

const int buttonPin = 2;

const int ledPin = 13;

将开关的状态保存在buttonState值内

int buttonState = 0;

将LED接口设置为输出口;将开关接口设置为输入口

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

使用digitalRead功能检查开关状态

buttonState = digitalRead(buttonPin);

如果开关被按,那么。。。

if (buttonState == HIGH) {

将LED灯打开

digitalWrite(ledPin, HIGH);

如果是其他状态(开关没有被按)。。。

} else {

将LED灯熄灭

digitalWrite(ledPin, LOW);

学习过电子电路的小伙伴们应该都会了解,当一个物理开关被打开或闭合的时候,都会出现一种叫做开关抖动的效果。每当一个开关有状态转换时,这个电路都会有一个数十毫秒的不稳定状态。如下图所示,这种状态体现在这个电路会反复在开与关这两种状态间“抖动”。当一个电路信息被数字化系统所接收时,就像我们现在运用Arduino这种情况,这种抖动很可能被解读为按钮在短时间内有大量的开关,从而导致程序的错误运行。

为了避免这种情况,我们可以在代码里编入一个去抖动开关(debouncer)。这个去抖动开关会在短时间内两次,或多次检查开关状态,以确认开关是否真的处于开或者关的状态。

这段代码如下:

const int buttonPin = 2;

const int ledPin = 13;

int ledState = HIGH;

int buttonState;

int lastButtonState = LOW;

unsigned long lastDebounceTime = 0;

unsigned long debounceDelay = 50;

void setup() {

pinMode(buttonPin, INPUT);

pinMode(ledPin, OUTPUT);

digitalWrite(ledPin, ledState);

void loop() {

int reading = digitalRead(buttonPin);

if (reading != lastButtonState) {

lastDebounceTime = millis();

if ((millis() - lastDebounceTime) > debounceDelay) {

if (reading != buttonState) {

buttonState = reading;

if (buttonState == HIGH) {

ledState = !ledState;

digitalWrite(ledPin, ledState);

lastButtonState = reading;

逐行分解,这段代码的功能如下:

将LED初始状态设置为打开,并将开关状态设置为不闭合

int ledState = HIGH;

int buttonState;

int lastButtonState = LOW;

初始化一个去抖动初始时间

unsigned long lastDebounceTime = 0;

将重复检查的间隔设置为50毫秒

unsigned long debounceDelay = 50;

将开关状态保存在reading内

int reading = digitalRead(buttonPin);

如果现在读取的开关状态不符合上一次读取的状态的话。。。

if (reading != lastButtonState) {

将当前时间保存为去抖动的初始时间

lastDebounceTime = millis();

如果现在时间减去去抖动初始时间超过了检测间隔。。。

if ((millis() - lastDebounceTime) > debounceDelay) {

并如果开关状态发生了变化。。。

if (reading != buttonState) {

将检测到的新开关状态保存

buttonState = reading;

如果开关被按了的话。。。

if (buttonState == HIGH) {

改变LED的状态(开改为关/关改为开)

ledState = !ledState;

将这个变化写入LED灯内

digitalWrite(ledPin, ledState);

将读取的开关状态保存,以便下次运行loop命令时做判定

lastButtonState = reading;

至此,我们可以通过Arduino来制作一个非常简易的灯。有了这段代码,每当我们按下开关时,LED便会亮起,直到我们再次按下时,LED灯则会熄灭。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
连拿欧洲杯+世界杯!19岁金童接棒梅西,赛后吐露心声,尽显霸气

连拿欧洲杯+世界杯!19岁金童接棒梅西,赛后吐露心声,尽显霸气

萌兰聊个球
2026-07-20 08:57:05
76人总经理:马克西长高了3英寸 现在身高大约达到1米97

76人总经理:马克西长高了3英寸 现在身高大约达到1米97

北青网-北京青年报
2026-07-19 20:26:02
够狠!王励勤终于动真格的了,直接砍掉前主席的后花园

够狠!王励勤终于动真格的了,直接砍掉前主席的后花园

以茶带书
2026-06-21 16:00:21
一串带干瘪果肉的“烂葡萄”,扔地上估计都没人捡,却是国家一级文物

一串带干瘪果肉的“烂葡萄”,扔地上估计都没人捡,却是国家一级文物

收藏大视界
2026-07-19 23:31:44
湖人尽力了,但外界提醒东契奇:你的夺冠窗口可能已经关上

湖人尽力了,但外界提醒东契奇:你的夺冠窗口可能已经关上

元气满分吖
2026-07-20 00:53:13
特朗普将出席世界杯决赛,外媒:F-16战机、军方狙击手及数千名特工被调集展开“史无前例足球比赛安保行动”

特朗普将出席世界杯决赛,外媒:F-16战机、军方狙击手及数千名特工被调集展开“史无前例足球比赛安保行动”

鲁中晨报
2026-07-19 15:12:12
李显龙直言不讳地告诫国民:每一个新加坡人都必须明白,本国坚决不承认“华人国家”身份,背后藏着的是全亚洲最为惊心动魄的生存考量

李显龙直言不讳地告诫国民:每一个新加坡人都必须明白,本国坚决不承认“华人国家”身份,背后藏着的是全亚洲最为惊心动魄的生存考量

橙色书卷
2026-07-16 21:35:45
国际足联鼓吹数月的首场世界杯中场秀,时长竟不足6分钟,网友全在吐槽

国际足联鼓吹数月的首场世界杯中场秀,时长竟不足6分钟,网友全在吐槽

全栈遛狗员
2026-07-20 04:57:46
电脑硬件还原卡为什么没人用了?

电脑硬件还原卡为什么没人用了?

中关村在线
2026-07-20 06:36:04
彻底绕开霍尔木兹?全球市场全力“脱敏”,连伊朗都在留后路!

彻底绕开霍尔木兹?全球市场全力“脱敏”,连伊朗都在留后路!

小陆搞笑日常
2026-07-20 00:08:57
7月1日死亡证明大变天!先跑派出所销户的 存款可能一分都取不出来

7月1日死亡证明大变天!先跑派出所销户的 存款可能一分都取不出来

椰青美食分享
2026-07-19 21:30:13
法国太平洋司令:法国事先获知中国潜射导弹试射,将继续穿越台湾海峡,这没什么大不了的

法国太平洋司令:法国事先获知中国潜射导弹试射,将继续穿越台湾海峡,这没什么大不了的

爱迷彩的老虎
2026-07-18 13:03:40
在农村36岁还没结婚,这辈子大概就废了

在农村36岁还没结婚,这辈子大概就废了

加油丁小文
2026-07-18 07:17:16
前国脚打人!董路:年轻时文静现在咋这样?上海俱乐部从小踢假球

前国脚打人!董路:年轻时文静现在咋这样?上海俱乐部从小踢假球

念洲
2026-07-20 09:37:01
朝鲜街头问当地人对中国人啥印象,对方脱口而出,听完我沉默许久

朝鲜街头问当地人对中国人啥印象,对方脱口而出,听完我沉默许久

千秋文化
2026-07-14 19:47:02
从未踢过一届世界杯的弗拉米尼,身价是C罗10倍、梅西12倍

从未踢过一届世界杯的弗拉米尼,身价是C罗10倍、梅西12倍

心也简单
2026-07-19 18:27:32
为什么世人都怀疑王莽是“穿越者”?看看他妻子穿的啥就知道了

为什么世人都怀疑王莽是“穿越者”?看看他妻子穿的啥就知道了

云居历史
2026-07-20 03:05:23
鸿海首度夺下SpaceX AI服务器代工订单,总价高达520亿美元

鸿海首度夺下SpaceX AI服务器代工订单,总价高达520亿美元

IT之家
2026-07-20 09:47:13
伊布炮轰转会费失控:罗杰斯都值1.17亿镑?那亚马尔他们呢

伊布炮轰转会费失控:罗杰斯都值1.17亿镑?那亚马尔他们呢

伟少说球
2026-07-19 21:09:51
医生发现:每天早起后先排便的人,用不了半年,身体或迎来6个改变

医生发现:每天早起后先排便的人,用不了半年,身体或迎来6个改变

白宸侃片
2026-07-20 06:33:02
2026-07-20 10:32:49
机器人大讲堂 incentive-icons
机器人大讲堂
立德机器人平台,是一个集媒体品牌、智库咨询、投资孵化、引智招商为一体的机器人垂直领域服务平台
6843文章数 4594关注度
往期回顾 全部

科技要闻

中兴阶跃荣耀齐出手,AI手机争夺系统入口

头条要闻

罗德里夺世界杯金球奖 集齐足坛4大荣誉罕见"金满贯"

头条要闻

罗德里夺世界杯金球奖 集齐足坛4大荣誉罕见"金满贯"

体育要闻

西班牙捧起大力神杯 美国总统特朗普颁奖

娱乐要闻

王侃因病逝世 两年前与父亲牛犇同台

财经要闻

“国家队”护盘,稳市机制持续护航A股

汽车要闻

被追尾还能自动加速逃生?华为乾崑智驾ADS 5.0 OTA时间表发布,只有这台车不用等!

态度原创

艺术
本地
手机
健康
公开课

艺术要闻

张大千:千万别学郑板桥题字

本地新闻

十年了,为什么鬼怪CP还能让人美美嗑上?

手机要闻

华为畅享90 Pro Max激活超310万,你买了吗?

刮痧也会刮出脑梗?讲个真实案例

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版