如何用两个按键一起控制同一个LED

2016-07-263万
AI 快速预览详细 收起
本文介绍了如何使用两个按键同时控制一个LED的方法。提供了详细的电路图和代码示例,帮助初学者轻松实现这一功能。无需复杂的电路知识,快速上手。
用两个按键同时控制LED,请大神们支招

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(8)
三春牛-创客
三春牛-创客
然后就可以一个引脚接两个按钮,就可以实现了。(也可以用读取到...引脚或读取到...引脚,控制灯这种代码。)
三春牛-创客
三春牛-创客
应该可以改一下连接线,实现“插排”的效果
xianyingzhang
xianyingzhang
求帮写一个程序:两个轻触开关控制一个LED,当两个开关同时按下打开时,LED常亮20S,并实现报警, 开关其余状态(一开一关)不变(LED仍然常亮20S),当开关同时关闭时LED长灭,开关其余状态(一开一关)仍然长灭。
hejie13250
hejie13250
两个按键调用同一个子程序,子程序里作灯状态的判断,然后取反
hejie13250
hejie13250回复华仔
我把4*4矩阵键盘的示例修改了下,16个按键任意一个都可以开关同一个LED,你可以把按改成两行一列就是两个按键了,只要三个IO,不用加下拉或上拉电阻,你可以看看
[code]const int LEDPin = 13;
const int numRows = 4;//定义4行
const int numCols = 4;//定义4列
const int rowPins[numRows] = {4, 5, 6, 7}; //设置4*4按键对应的引脚
const int colPins[numCols] = {8, 9, 10, 11};
const int debounceTime = 20;//去抖动时间长度 20ms
int LEDState = LOW;
void setup()
{
pinMode(LEDPin, OUTPUT);
digitalWrite(LEDPin, LEDState);
for (int row = 0; row < numRows; row++)
{
pinMode(rowPins[row], INPUT);
digitalWrite(rowPins[row], HIGH);
}
for (int column = 0; column < numCols; column++)
{
pinMode(colPins[column], OUTPUT);
digitalWrite(colPins[column], HIGH);
}
}
void loop()
{
for (int column = 0; column < numCols; column++)
{
digitalWrite(colPins[column], LOW);
for (int row = 0 ; row < numRows; row++)
{
if (digitalRead(rowPins[row]) == LOW) //是否有按键按下
{
delay(debounceTime);
while (digitalRead(rowPins[row]) == LOW) //等待按键释放
;
LEDState = !LEDState;
digitalWrite(LEDPin, LEDState);
}
}
digitalWrite(colPins[column], HIGH);
}
}
[/code]
华仔
华仔
作者
回复hejie13250
我按你的方法试了一下,不过只是一个按钮控制LED但是效果并不理想,找不出原因了
int ledPin=2;
int button_A=3;
int lastLedState=LOW; //上一次LED的状态
int lastABS=LOW; //上一次A按钮的状态
int nowABS; //目前A按钮的状态
int nowLedState; //目前LED的状态
int ledState;
long debounceTime;
int debounceDelay=50;
void setup() {
pinMode(ledPin,OUTPUT);
pinMode(button_A,INPUT);
digitalWrite(ledPin,lastLedState);
}
void loop() {
int reading_A=digitalRead(button_A);
if(reading_A!=lastABS){
debounceTime=millis(); //记下按钮状态发生变化时的时间
}
if((millis()-debounceTime)>debounceDelay){ //去抖
if(reading_A!=nowABS){
nowABS=reading_A;
}
}
change(nowABS);
lastABS=reading_A;
}
void change( int buttonState){
if(buttonState==HIGH){
ledState=!ledState;
digitalWrite(ledPin,ledState);
}
}
华仔
华仔
作者
如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭
华仔
华仔
作者
回复Aone
现在是学习编程,日常生活不需要那么麻烦,
Aone
Aone回复华仔
百度搜索“双联开关接线”。根本就不需要编程。
R2D2
R2D2
66666 啥意思。。。
话说楼主的需求能详细点吗?
hnyzcj
hnyzcj
通过两个开关来控制led的亮度
int n=0;
void setup ()
{
pinMode(4,INPUT);
pinMode(6,OUTPUT);
pinMode(10,INPUT);
}
void loop()
{
int up =digitalRead(4);
int down = digitalRead(10);
if (up==HIGH)
{
n=n+5;
if (n>=255) {
n=255;
}
analogWrite(6,n);
delay (300);
}
if (down==HIGH)
{
n=n-5;
if (n<=0) {
n=0;
}
analogWrite(6,n);
delay (300);
}
}
微笑的rockets
微笑的rockets回复凌风清羽
6666
就是感叹的意思
凌风清羽
凌风清羽回复hnyzcj
666666
凌风清羽
凌风清羽
具体需求能表述清楚一点吗,例如一个按键只负责开,另一个按键只负责关
华仔
华仔
作者
回复凌风清羽
如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭
- 没有更多了 -