华仔 发表于 2016-7-26 18:08:30

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

用两个按键同时控制LED,请大神们支招

凌风清羽 发表于 2016-7-26 18:10:58

具体需求能表述清楚一点吗,例如一个按键只负责开,另一个按键只负责关

hnyzcj 发表于 2016-7-26 20:23:05

通过两个开关来控制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);
}
}


凌风清羽 发表于 2016-7-27 00:35:45

hnyzcj 发表于 2016-7-26 20:23
通过两个开关来控制led的亮度




666666

Ricky 发表于 2016-7-27 00:44:34

66666 啥意思。。。

话说楼主的需求能详细点吗?

华仔 发表于 2016-7-27 17:42:52

如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭

华仔 发表于 2016-7-27 17:45:01

凌风清羽 发表于 2016-7-26 18:10
具体需求能表述清楚一点吗,例如一个按键只负责开,另一个按键只负责关

如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭

hejie13250 发表于 2016-7-28 08:36:51

两个按键调用同一个子程序,子程序里作灯状态的判断,然后取反

Rockets 发表于 2016-7-28 11:26:39

凌风清羽 发表于 2016-7-27 00:35
666666

6666
就是感叹的意思

华仔 发表于 2016-7-28 16:36:34

hejie13250 发表于 2016-7-28 08:36
两个按键调用同一个子程序,子程序里作灯状态的判断,然后取反

我按你的方法试了一下,不过只是一个按钮控制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 发表于 2016-7-29 00:09:02

华仔 发表于 2016-7-27 17:42
如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭 ...

百度搜索“双联开关接线”。根本就不需要编程。

华仔 发表于 2016-7-29 13:52:51

Aone 发表于 2016-7-29 00:09
百度搜索“双联开关接线”。根本就不需要编程。

现在是学习编程,日常生活不需要那么麻烦,

hejie13250 发表于 2016-7-29 15:41:48

华仔 发表于 2016-7-28 16:36
我按你的方法试了一下,不过只是一个按钮控制LED但是效果并不理想,找不出原因了

int ledPin=2;


我把4*4矩阵键盘的示例修改了下,16个按键任意一个都可以开关同一个LED,你可以把按改成两行一列就是两个按键了,只要三个IO,不用加下拉或上拉电阻,你可以看看

const int LEDPin = 13;
const int numRows = 4;//定义4行
const int numCols = 4;//定义4列
const int rowPins = {4, 5, 6, 7}; //设置4*4按键对应的引脚
const int colPins = {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, INPUT);
    digitalWrite(rowPins, HIGH);
}
for (int column = 0; column < numCols; column++)
{
    pinMode(colPins, OUTPUT);
    digitalWrite(colPins, HIGH);
}
}
void loop()
{
for (int column = 0; column < numCols; column++)
{
    digitalWrite(colPins, LOW);
    for (int row = 0 ; row < numRows; row++)
    {
      if (digitalRead(rowPins) == LOW) //是否有按键按下
      {
      delay(debounceTime);
      while (digitalRead(rowPins) == LOW) //等待按键释放
          ;
      LEDState = !LEDState;
      digitalWrite(LEDPin, LEDState);
      }
    }
    digitalWrite(colPins, HIGH);
}
}

xianyingzhang 发表于 2023-2-15 17:37:28

求帮写一个程序:两个轻触开关控制一个LED,当两个开关同时按下打开时,LED常亮20S,并实现报警, 开关其余状态(一开一关)不变(LED仍然常亮20S),当开关同时关闭时LED长灭,开关其余状态(一开一关)仍然长灭。

三春牛-创客 发表于 2023-2-18 11:13:17

应该可以改一下连接线,实现“插排”的效果

三春牛-创客 发表于 2023-2-18 11:14:34

然后就可以一个引脚接两个按钮,就可以实现了。(也可以用读取到...引脚或读取到...引脚,控制灯这种代码。)
页: [1]
查看完整版本: 如何用两个按键一起控制同一个LED