Ardunio实现按钮控制LED常亮或常灭

想法

Arduino中 如何实现

  • 情况一: LED常灭时, 按钮按下并松开之后保持LED灯常亮?
  • 情况二:LED常亮时, 按钮按下并松开之后保持LED灯常灭?

想法实现过程

版本1 亮个灯

Arduino上有一个LED灯,上面的字母为L
在这里插入图片描述

当然我们也可以自己再额外加一个LED灯, 长脚接PIN13, 短脚接GND
不推荐以上做法: 外接的LED灯容易烧掉, 最好将LED插在面包板上, 串联加一个电阻
不要问我为什么? 因为我无意中烧掉了好几个了, 还好这玩意多!
在这里插入图片描述

#define LED 13

void setup() {
  	// initialize digital pin LED_BUILTIN as an output.
  	pinMode(LED , OUTPUT);
}

void loop() {
  	digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  	delay(1000);                       // wait for a second
  	digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  	delay(1000);                       // wait for a second
}

结果: LED灯每隔1S闪烁一次

版本2 加个按钮

在这里插入图片描述

#define LED 13
#define BUTTON 7

int val = 0;

void setup() {
  // put your setup code here, to run once:
 	pinMode(LED, OUTPUT);
  	pinMode(BUTTON, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  	val = digitalRead(BUTTON);  // 获取按钮是否被按下的状态

 	if (val == HIGH){
 	    digitalWrite(LED, HIGH);
  	}else{
  		digitalWrite(LED, LOW);
  	}
}

新的问题: 必须用手指一直按着不能松手, 不然灯就会灭, 如何按一下亮, 再按一下灭呢?

版本3 让按钮按下放开后能开启及关闭LED
#define LED 13
#define BUTTON 7

int val = 0;
int state = 0;  // 新添加一个变量记录LED状态

void setup() {
  // put your setup code here, to run once:
  	pinMode(LED, OUTPUT);
  	pinMode(BUTTON, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  	val = digitalRead(BUTTON);

 	if (val == HIGH){  // 每当按钮按下时 切换state状态
    	state = 1 - state;
  	}

  	if (state == 1){ // 根据 state状态 来点亮或熄灭LED
    	digitalWrite(LED, HIGH);
  	} else{
    	digitalWrite(LED, LOW);
  	}
}

新的问题: LED灯的显示很不稳定, 有时会明明是亮的,再按下并松开按钮, 灯还是亮的, 反之, 也是

原因: Arduino 芯片会以每秒16 000 000次的速度执行程序指令. 所以 当我们按下并在松开按钮之间, 其实状态值已经被反复读取并取反赋值数千次了, 导致它的值的不确定.

所以我们如何解决这个不确定呢?
只要让我们的state值每次按一次按钮只被修改其值一次, 即取反一次即可!

版本4 解决 state值 被多次修改的问题
#define LED 13
#define BUTTON 7

int val = 0;
int old_val = 0;
int state = 0;

void setup() {
  	// put your setup code here, to run once:
	pinMode(LED, OUTPUT);
  	pinMode(BUTTON, INPUT);
}

void loop() {
  	// put your main code here, to run repeatedly:
  	val = digitalRead(BUTTON);

  	if (val == HIGH && old_val == LOW) {  // 注释2
    	state = 1 - state;
  	}
  	old_val = val;  //  注释1

  	if (state == 1) {
    	digitalWrite(LED, HIGH);
  	} else {
   		digitalWrite(LED, LOW);
  	}
}

首先 我们先看注释1处的代码
它的作用是 在按钮按下并未松开时, old_val 永远会是 HIGH, 只有当按钮松开释放后, old_val 才会是 LOW
然后 我们再看注释2处的代码
它的作用是 为了让了按钮被按下之后, 代码只运行一次, 不能循环回来之后还能进入这个 if条件

版本5 克服按键抖动

在按钮尚未按到底的瞬间和按钮弹回的时候, 会产生杂波, 这时 Arduino会收到一连串开关交错的信号.
我们在程序中 加入 10~50 ms 的延迟批令可以克服这个杂波.

#define LED 13
#define BUTTON 7

int val = 0;
int old_val = 0;
int state = 0;

void setup() {
  	// put your setup code here, to run once:
	pinMode(LED, OUTPUT);
  	pinMode(BUTTON, INPUT);
}

void loop() {
  	// put your main code here, to run repeatedly:
  	val = digitalRead(BUTTON);

  	if (val == HIGH && old_val == LOW) { 
    	state = 1 - state;
    	delay(10); // 加入延迟以克服杂波
  	}
  	old_val = val;

  	if (state == 1) {
    	digitalWrite(LED, HIGH);
  	} else {
   		digitalWrite(LED, LOW);
  	}
}

参考书籍: <<爱上Arduino>>

  • 12
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Arduino按钮可以通过数字输入引脚连接到Arduino板上。当按钮被按下时,数字输入引脚会接收到高电平信号。我们可以将数字输出引脚连接到LED,以控制LED。 具体步骤如下: 1. 将按钮连接到数字输入引脚,将数字输出引脚连接到LED。 2. 在Arduino IDE中编写代码,读取数字输入引脚的状态,当按钮被按下时,数字输入引脚会接收到高电平信号,此时将数字输出引脚输出高电平,LED就会起来。 3. 当按钮被松开时,数字输入引脚会接收到低电平信号,此时将数字输出引脚输出低电平,LED就会熄。 通过这种方式,我们可以实现Arduino按钮控制LED。 ### 回答2: Arduino按钮控制LED是一种简单而又实用的电路控制方法,既可以帮助初学者了解和掌握基本的硬件电路知识,也可以用于实际应用中的电路控制。下面详细介绍这一方法的步骤和原理。 硬件连接 首先,需要准备以下硬件组件: - Arduino板 - 一个LED - 一个按钮 - 一根杜邦线(可选) 将LED的正极与Arduino的数字口连接(一般来说,我们将LED的正极连接到数字8口)。 将按钮的一端与Arduino的数字口连接(一般来说,我们将按钮的一端连接到数字7口)。 将按钮的另一端连接到GND(即Arduino板的地线)。如果没有杜邦线,可以使用跳线等其他方法进行连接。 软件编程 接下来,需要借助Arduino IDE进行软件编程。我们需要将LED控制按钮的检测结合起来,并在代码中进行设置。 整个程序的核心就在一个循环语句内,即不停地检查按钮是否被按下,并根据按钮现在的状态来切换LED状态。具体代码如下: int LEDPin = 8; // LED连接的数字口 int buttonPin = 7; // 按钮连接的数字口 int buttonState = 0; // 定义按钮初始状态为未按下 void setup() { pinMode(LEDPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); // 读取按钮状态 if (buttonState == HIGH) // 如果按钮被按下 { digitalWrite(LEDPin, HIGH); // LED起来 } else // 如果按钮没有被按下 { digitalWrite(LEDPin, LOW); // LED } } 解释一下代码的具体过程: 首先,通过“pinMode()”函数设置LED按钮的引脚模式,LED的模式设置为输出(即“OUTPUT”),按钮的模式设置为输入(即“INPUT”)。 然后,在“loop()”函数体内,通过“digitalRead()”函数读取按钮的状态,即电位的高低,将状态赋值给“buttonState”变量。 接下来,通过判断“buttonState”的值,来控制LED的状态。“buttonState”的值为“HIGH”时表示按钮被按下,此时LED起来,通过“digitalWrite()”函数写入电位高(即“HIGH”)来控制LED度;“buttonState”的值为“LOW”时表示按钮没有被按下,此时LED,通过“digitalWrite()”函数写入电位低(即“LOW”)来控制LED度。 这样,当我们按下按钮时,LED就会起来,松开按钮时,LED就会熄实现按钮控制LED。 总结 Arduino按钮控制LED是一种简单而又实用的硬件控制方法,使我们能够更好地了解Arduino的基本操作和原理。在实际工程应用中,也可以通过这种方法进行电路的控制,并根据需要对硬件组件进行扩展和改进,实现更多功能的实现。 。 (注:以上回答内容由AI实现,仅供参考。) ### 回答3: Arduino按钮控制LED是一种非常基础的电子制作项目。通过使用Arduino板、按钮LED、电阻器和麻线等电子元件,设计简单电路,使得按下按钮LED可以。下面我们就来一一介绍这些元件以及具体的实现步骤。 1.元件的介绍: Arduino板:Arduino是一个开源软硬件平台,用于开发基于类C语言的电子项目,可以通过编程简单实现很多功能。 按钮按钮是一种常用的开关电子元件,按下按钮可以连接电路进行控制LEDLED是常用的光电元件,受到电压控制,可以发出红、绿、蓝等不同颜色的光。 电阻器:电阻器是常用的电子元件之一,可以通过调节电阻器的阻值来改变电路中的电流。 麻线:麻线是用于连接电子元件之间的线材,通过颜色区分不同电子元件之间的连接。 2.实现步骤: 第一步:准备好所需要的元件,包括Arduino板、按钮LED等等。 第二步:用麻线连接Arduino板的数字引脚和按钮中间的引脚,使得按钮可以被控制,同时使用电阻器通过红色线连到按钮的一端,然后再使用黑色线连接到Arduino板的地线。 第三步:使用麻线连接Arduino板的数字引脚和LED的正极引脚,同时再将LED的负极通过一个电阻器连接到Arduino板的地线。 第四步:通过Arduino IDE编写代码,实现按钮按下时,LED按钮松开时,LED的功能。具体代码如下: void setup() { pinMode(2, INPUT); //按钮引脚 pinMode(8, OUTPUT); //LED引脚 } void loop() { int buttonState = digitalRead(2); //获取按钮状态 if (buttonState == HIGH) { //判断按钮状态 digitalWrite(8, HIGH); //LED } else { digitalWrite(8, LOW); //LED } } 在上述代码中,通过digitalRead函数来获取按钮状态,如果按钮按下,按钮的输入电压为高电平,获取到HIGH,此时LED,否则LED。 3.总结 通过简单的电路连接和代码编写,我们就可以实现Arduino按钮控制LED。这么基础的项目对于初学者来说是必须学习的,通过自己组装和调试电路,可以更好地理解电子基础知识。这种基础的电子项目有利于激发创新思维,加强动手实践能力,在未来的学习或工作中都可以有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值