【求助】关于开关与LED的问题
我设置了当开关返回数据“1”的时候,LED就会亮,但是我希望LED亮了一次之后就持续亮,不管我是否松开开关。这该怎么写程序呢?请各位大侠帮帮我吧~ 你可以在开关按下时进行死循环,让灯一直亮着! Randy 发表于 2012-11-23 18:47 static/image/common/back.gif你可以在开关按下时进行死循环,让灯一直亮着!
能不能告诉我具体怎么弄啊?万分感谢~~ fbojue 发表于 2012-11-23 18:57 static/image/common/back.gif
能不能告诉我具体怎么弄啊?万分感谢~~
while(1) Randy 发表于 2012-11-23 19:13 static/image/common/back.gif
while(1)
我用的595芯片连接的LED,如果进入一个死循环,就不能亮其他的灯了。。。我想按一个开关一个灯亮,按第二个开关第一个灯不灭,和第二个灯一起亮,不知道有没有什么办法啊? Randy 发表于 2012-11-23 19:13 static/image/common/back.gif
while(1)
我用的595芯片连接的LED,如果进入一个死循环,就不能亮其他的灯了。。。我想按一个开关一个灯亮,按第二个开关第一个灯不灭,和第二个灯一起亮,不知道有没有什么办法啊? 除了死循环之外,可不可以我先按了按钮,然后就等于把1赋值给了按钮状态之类的方法?我试了都不行。。。。 本帖最后由 弘毅 于 2012-11-24 20:33 编辑
你是用595驱动呀?这个需要死循环的,直接用IO口貌似更方便驱动一些。直接写一个变量,比如定义为长整数。然后呢,没按一次~~变量+1,但只有按第一次,变量为1的时候,才能改变他的状态。其他一直按。。。都大于1,就不能改变它状态了。 弘毅 发表于 2012-11-24 20:31 static/image/common/back.gif
你是用595驱动呀?这个需要死循环的,直接用IO口貌似更方便驱动一些。直接写一个变量,比如定义为长整数。然 ...
我这个比较妖。。。我是想用其他按钮来中断第一个灯的常亮,是否就要用到外部中断什么的?虽然现在通过Randy 教的死循环可以让他持续一段时间亮,但还没有达到我想要的效果。。。 如果我现在想,按一个开关一个灯亮,按第二个开关第一个灯灭第二个灯亮,这样的话能简单一点么? 我试出来了!!!就是用while死循环然后用条件从while里面不断break就可以了{:soso_e113:},就是语句有点罗嗦。。。
现在还有个问题,比如说我第一次按哪个按钮不确定,但是一按到某个按钮,就从这个按钮初始化开始一系列环节,这个该则么弄? 本帖最后由 fbojue 于 2012-11-27 18:50 编辑
就是这样子
if(state1==0){
while (1){
numbers=B10000000;
shiftOut(dataPin_1, clockPin_1, LSBFIRST, numbers);
digitalWrite(latchPin_1, HIGH);
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
if(state2==0||state3==0||state4==0){
break;
}
}
我现在有四个按钮控制四个灯,我把它写成函数_one();在loop里面调用。如果加了条件再调用,就只能开第一个灯。后面几个灯的print显示有反应,但是灯就是不亮。
我想加上条件,比如说我按了第一个按钮一次,这个函数就开始调用之类的。。。 本帖最后由 fbojue 于 2012-11-28 20:11 编辑
//Pin connected to SH_CP of 74HC595
int clockPin_1 = 2;
//Pin connected to ST_CP of 74HC595
int latchPin_1 = 3;
////Pin connected to DS of 74HC595
int dataPin_1 = 4;
int f_bit;
int f_bits;
int f_bits1;
int f_bits2;
int f_bits3;
int f_bits4;
byte final;
byte numbers;
int switchPin1=11;
int switchPin2=10;
int switchPin3=9;
int switchPin4=8;
int state1=1;
int state2=1;
int state3=1;
int state4=1;
void setup() {
Serial.begin(9600);
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin4, INPUT);
//set pins to output so you can control the shift register
pinMode(latchPin_1, OUTPUT);
pinMode(clockPin_1, OUTPUT);
pinMode(dataPin_1, OUTPUT);
}
void loop() {
digitalWrite(latchPin_1, LOW);
final=B00000000;
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
numbers=1;
//=====================================//
if(state1==0){
while(1){
_one();
}
}
//=====================================//
shiftOut(dataPin_1, clockPin_1, MSBFIRST, final);
digitalWrite(latchPin_1, HIGH);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
Serial.println("LOOP");
delay(1);
}
//==================================//
void _one(){
if(state1==0){
while (1){
final=numbers;
shiftOut(dataPin_1, clockPin_1, MSBFIRST, final);
digitalWrite(latchPin_1, HIGH);
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
Serial.println("_one_1");
if(state2==0){
break;
}
}
}else if( state2==0){
while (1){
final=numbers*3;
shiftOut(dataPin_1, clockPin_1, MSBFIRST, final);
digitalWrite(latchPin_1, HIGH);
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
Serial.println("_one_2");
if(state3==0){
break;
}
}
}else if(state3==0){
while (1){
final=numbers*7;
shiftOut(dataPin_1, clockPin_1, MSBFIRST, final);
digitalWrite(latchPin_1, HIGH);
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
Serial.println("_one_3");
if(state4==0){
break;
}
}
} else if(state4==0){
while (1){
final=numbers*15;
shiftOut(dataPin_1, clockPin_1, MSBFIRST, final);
digitalWrite(latchPin_1, HIGH);
state1=digitalRead(switchPin1);
state2=digitalRead(switchPin2);
state3=digitalRead(switchPin3);
state4=digitalRead(switchPin4);
Serial.print("switch1: ");
Serial.print(state1);
Serial.println();
Serial.print("switch2: ");
Serial.print(state2);
Serial.println();
Serial.print("switch3: ");
Serial.print(state3);
Serial.println();
Serial.print("switch4: ");
Serial.print(state4);
Serial.println();
Serial.println("_one_4");
}
}
}
//=====================================//
现在我的代码是这样的。关于以下这段我有个问题:
if(state1==0){
while(1){
_one();
}
}
如果我不加条件只调用_one();的话,没有问题,但是一加条件,查看monitor的时候发现无论按哪个按钮,print的东西都是对的,但是就是灯不亮,只会亮第一个你按下的按钮控制的灯。
因为之后我会加很多东西,想确保只在一个条件下这部分函数才会起作用,我不知道该怎么办了TAT。。。
求帮助!!!
页:
[1]