Ash 发表于 2014-1-15 16:01:27

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



原作者:Jane 授权转载

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


tutorials

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

哪里有示意图?

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


请问,上图中的有点不明白,为什么要这样布线的,是不是布线为:用按钮直接控制 数字口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
我没太明白你的意思,要不你画张示意图吧


是这样子,这样子会损坏主板的么?

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 语句在什么情况使用。

197024 发表于 2021-2-13 15:41:15

正确代码呢?

尘埃818 发表于 2021-11-23 14:59:57

怎么看不到全文?
页: [1]
查看完整版本: Arduino小白教程第二弹 -- 按钮随心控制LED