查看: 11395|回复: 16

Arduino小白教程第二弹 -- 按钮随心控制LED

[复制链接]
20131104182307740-650x500.jpg

原作者:Jane 授权转载

按钮控制LED亮灭,不同于一般的实验,按钮按下,LED就亮,松开则灭。我们这里呈现给大家的是,按钮按一下亮,在按一下就关掉,真的做到像开关一样控制小灯。


bubill  学徒

发表于 2014-2-1 22:11:53

哪里有示意图?
回复

使用道具 举报

hdc  中级技师

发表于 2014-10-30 22:10:19

QQ截图20141030220640.png
请问,上图中的有点不明白,为什么要这样布线的,是不是布线为:用按钮直接控制 数字口3是否导通GND就可以了?
回复

使用道具 举报

Jane  管理员

发表于 2014-11-7 10:50:06

hdc 发表于 2014-10-30 22:10
请问,上图中的有点不明白,为什么要这样布线的,是不是布线为:用按钮直接控制 数字口3是否导通GND就可以 ...

这个电阻俗称下拉电阻,如果没有这个电阻的话,在按键没按下的话,这个引脚处于悬浮的状态,对于电路来说不稳定,所以需要一个电阻。
回复

使用道具 举报

hdc  中级技师

发表于 2014-11-7 11:32:49

Jane 发表于 2014-11-7 10:50
这个电阻俗称下拉电阻,如果没有这个电阻的话,在按键没按下的话,这个引脚处于悬浮的状态,对于电路来说 ...

哦 好的 , 那如果 用按钮直接控制 数字口3 是否导通 GND 可不可以的
回复

使用道具 举报

Jane  管理员

发表于 2014-11-7 12:06:08

hdc 发表于 2014-11-7 11:32
哦 好的 , 那如果 用按钮直接控制 数字口3 是否导通 GND 可不可以的

我没太明白你的意思,要不你画张示意图吧
回复

使用道具 举报

hdc  中级技师

发表于 2014-11-7 20:59:25

Jane 发表于 2014-11-7 12:06
我没太明白你的意思,要不你画张示意图吧

QQ截图20141030220640副本.png
是这样子,这样子会损坏主板的么?
回复

使用道具 举报

Jane  管理员

发表于 2014-11-11 09:51:38

hdc 发表于 2014-11-7 20:59
是这样子,这样子会损坏主板的么?

板子不会坏,就是不稳定
回复

使用道具 举报

kerryeva  学徒

发表于 2014-12-4 21:23:26

Jane 发表于 2014-11-7 10:50
这个电阻俗称下拉电阻,如果没有这个电阻的话,在按键没按下的话,这个引脚处于悬浮的状态,对于电路来说 ...

小白问题,为何电源线接入的是引脚3,但是程序里面是2?
回复

使用道具 举报

kerryeva  学徒

发表于 2014-12-4 21:24:13

Jane 发表于 2014-11-7 10:50
这个电阻俗称下拉电阻,如果没有这个电阻的话,在按键没按下的话,这个引脚处于悬浮的状态,对于电路来说 ...

小白问题,为何电源线接入的是引脚3,但是程序里面是2?
回复

使用道具 举报

Jane  管理员

发表于 2014-12-5 10:15:01

kerryeva 发表于 2014-12-4 21:24
小白问题,为何电源线接入的是引脚3,但是程序里面是2?

这个是写错了,我改一下啊。连几代码就对应写几
回复

使用道具 举报

wl4585  见习技师

发表于 2015-1-31 00:11:59

本帖最后由 wl4585 于 2015-1-31 00:22 编辑

我把delay(3000)放到以下位子,我以为是按钮按钮——灯灭——3s后按钮按钮——灯亮,可是实际效果,我按钮按钮后没任何反应,必须要按住按钮3s以上放开——灯灭——按3s以上——灯灭,这是为什么?只有吧delay(3000)放到取反的后面是没问题的
void loop(){
button_state1 = digitalRead (buttonPin); //读取按扭当前的状态

//判断按钮当前状态是否为高,并且前一个状态是否为低,同时满足执行语句
if (button_state1 == 1 && button_state2 == 0) {
led_state = !led_state; // 取反
digitalWrite (ledPin, led_state); // 控制LED
}

button_state2 = button_state1; //把当前状态赋给前一个状态
delay(3000);
}
回复

使用道具 举报

wl4585  见习技师

发表于 2015-1-31 00:13:26

本帖最后由 wl4585 于 2015-1-31 00:23 编辑

我把delay(3000)放到以下位子,我以为是按钮按钮——灯灭——3s后按钮按钮——灯亮,可是实际效果,我按钮按钮后没任何反应,必须要按住按钮3s以上放开——灯灭——按3s以上——灯灭,这是为什么?只有吧delay(3000)放到取反的后面是没问题的
void loop(){
button_state1 = digitalRead (buttonPin); //读取按扭当前的状态

//判断按钮当前状态是否为高,并且前一个状态是否为低,同时满足执行语句
if (button_state1 == 1 && button_state2 == 0) {
led_state = !led_state; // 取反
digitalWrite (ledPin, led_state); // 控制LED
}

button_state2 = button_state1; //把当前状态赋给前一个状态
delay(3000);
}
回复

使用道具 举报

李强  见习技师

发表于 2015-4-7 12:43:50

学习了
回复

使用道具 举报

quartercat  学徒

发表于 2015-8-18 17:24:47

請問button_state2的作用是什麼呢?
還有請問在何時button_state1的值是1,何時又會變回0?
回复

使用道具 举报

Cain  初级技匠

发表于 2015-8-19 14:23:51

quartercat 发表于 2015-8-18 17:24
請問button_state2的作用是什麼呢?
還有請問在何時button_state1的值是1,何時又會變回0? ...

boolean button_state2 用于记录按钮前一个状态.按钮按下button_state1为1,没有按下即为0.这段代码意思是检查按钮状态,当它前一状态为“没有按下”,现在你按下了,就改变灯的状态。实现按一下开灯,再按一下关灯循环。
回复

使用道具 举报

迷途路人  见习技师

发表于 2017-10-8 09:08:46

LZ这boolean 语句在什么情况使用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail