Arduino 按键控制LED(IO)
2022-06-29 本文已影响0人
Charles2018
实验一
按下点亮/松开熄灭

代码
int button = 8;
int led = 2;
void setup()
{
pinMode(button,INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int buttonval = digitalRead(button);
Serial.println(buttonval);
if (buttonval == LOW)
{
digitalWrite(led, HIGH);
delay(20);
}
else
{
digitalWrite(led,LOW);
}
}
演示


由于板子上电之后此时的IO口处于悬空状态如果没有上拉电阻digitalRead读取到值是不确定的 可能是 高电平或者低电平 接上上拉电阻之后未按下时为高电平按下时为低电平。
实验二
每按下一次切换一次状态(按键自锁)

注意:按键pin8取消了10k上拉电阻 并在代码中启用了上拉输入功能。
代码
int button = 8;
int led = 2;
void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop()
{
int buttonval = digitalRead(button);
if (buttonval == LOW)
{
digitalWrite(led,!digitalRead(led));
}
}
演示效果并不是很好就不发出来了实验中发现以上方法存在按键不听话的情况 参考实验三可以完美解决
以上问题。
实验三
通过按键来切换led亮灭状态 #按键抖动 #程序改进 电路图参考实验二
代码
int button = 8;
int led = 2;
void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop()
{
if (digitalRead(button) == LOW) // 检测是否低电平
{
delay(20); // 演示20ms
if (digitalRead(button) == LOW) // 是否还是低电平
{
digitalWrite(led, !digitalRead(led)); // 切换led亮灭
while (digitalRead(button) == LOW); // 是否还是低电平
}
}
}