如何用两个按键一起控制同一个LED
用两个按键同时控制LED,请大神们支招具体需求能表述清楚一点吗,例如一个按键只负责开,另一个按键只负责关 通过两个开关来控制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);
}
}
hnyzcj 发表于 2016-7-26 20:23
通过两个开关来控制led的亮度
666666 66666 啥意思。。。
话说楼主的需求能详细点吗? 如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭 凌风清羽 发表于 2016-7-26 18:10
具体需求能表述清楚一点吗,例如一个按键只负责开,另一个按键只负责关
如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭 两个按键调用同一个子程序,子程序里作灯状态的判断,然后取反 凌风清羽 发表于 2016-7-27 00:35
666666
6666
就是感叹的意思 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);
}
}
华仔 发表于 2016-7-27 17:42
如果灯是关着的,不管按下哪个按钮灯都亮;如果灯是亮着的,不管按下哪个按钮都能使灯灭 ...
百度搜索“双联开关接线”。根本就不需要编程。 Aone 发表于 2016-7-29 00:09
百度搜索“双联开关接线”。根本就不需要编程。
现在是学习编程,日常生活不需要那么麻烦, 华仔 发表于 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);
}
}
求帮写一个程序:两个轻触开关控制一个LED,当两个开关同时按下打开时,LED常亮20S,并实现报警, 开关其余状态(一开一关)不变(LED仍然常亮20S),当开关同时关闭时LED长灭,开关其余状态(一开一关)仍然长灭。 应该可以改一下连接线,实现“插排”的效果 然后就可以一个引脚接两个按钮,就可以实现了。(也可以用读取到...引脚或读取到...引脚,控制灯这种代码。)
页:
[1]