17942浏览
查看: 17942|回复: 15

[求助] 如何用两个按键一起控制同一个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  NPC

发表于 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  NPC

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


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,不用加下拉或上拉电阻,你可以看看

  1. const int LEDPin = 13;
  2. const int numRows = 4;//定义4行
  3. const int numCols = 4;//定义4列
  4. const int rowPins[numRows] = {4, 5, 6, 7}; //设置4*4按键对应的引脚
  5. const int colPins[numCols] = {8, 9, 10, 11};
  6. const int debounceTime = 20;//去抖动时间长度 20ms
  7. int LEDState = LOW;
  8. void setup()
  9. {
  10.   pinMode(LEDPin, OUTPUT);
  11.   digitalWrite(LEDPin, LEDState);
  12.   for (int row = 0; row < numRows; row++)
  13.   {
  14.     pinMode(rowPins[row], INPUT);
  15.     digitalWrite(rowPins[row], HIGH);
  16.   }
  17.   for (int column = 0; column < numCols; column++)
  18.   {
  19.     pinMode(colPins[column], OUTPUT);
  20.     digitalWrite(colPins[column], HIGH);
  21.   }
  22. }
  23. void loop()
  24. {
  25.   for (int column = 0; column < numCols; column++)
  26.   {
  27.     digitalWrite(colPins[column], LOW);
  28.     for (int row = 0 ; row < numRows; row++)
  29.     {
  30.       if (digitalRead(rowPins[row]) == LOW) //是否有按键按下
  31.       {
  32.         delay(debounceTime);
  33.         while (digitalRead(rowPins[row]) == LOW) //等待按键释放
  34.           ;
  35.         LEDState = !LEDState;
  36.         digitalWrite(LEDPin, LEDState);
  37.       }
  38.     }
  39.     digitalWrite(colPins[column], HIGH);
  40.   }
  41. }
复制代码
回复

使用道具 举报

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

然后就可以一个引脚接两个按钮,就可以实现了。(也可以用读取到...引脚或读取到...引脚,控制灯这种代码。)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail