Acturs 发表于 2014-11-28 10:47:38

我感觉按键小灯逻辑对着 为什么就是不安逻辑走

想做一个按键控制小灯,8个按键8个小灯,按一下一个亮,在按一下下一个亮,一一对应,我感觉逻辑对 但是为什么 不会按逻辑走
            int LED=13;
int led2=6;
int led3=5;
int led1=7;
int BUTTON=12;
int k1=9;
int k2=10;
int k3=11;
int val = 0;      
int old_val = 0;   
int state = 0;
int val1=0;
int old_val1=0;
int state1=0;
int val2=0;
int old_val2=0;
int state2=0;
int val3=0;
int old_val3=0;
int state3=0;

void setup()
{
pinMode(LED, OUTPUT);   
pinMode (BUTTON,INPUT_PULLUP);
pinMode(led1,OUTPUT);
pinMode(k1,INPUT_PULLUP);
pinMode(led2,OUTPUT);
pinMode(k2,INPUT_PULLUP);
pinMode(led3,OUTPUT);
pinMode(k3,INPUT_PULLUP);
}

void loop(){
    val = digitalRead(BUTTON);
    val1=digitalRead(k1);
    val2=digitalRead(k2);
    val3=digitalRead(k3);
if((val == HIGH)&&(old_val == LOW)){
      state =1-state;
      delay(40);            
}
      old_val = val;
if((val1 == HIGH)&&(old_val1 == LOW)){
      state1 =1-state1;
      delay(40);            
}
      old_val1 = val1;
if((val2 == HIGH)&&(old_val2 == LOW)){
      state2 =1-state2;
      delay(40);            
}
      old_val2 = val2;   
if((val3 == HIGH)&&(old_val3 == LOW)){
      state3 =1-state3;
      delay(40);            
}
      old_val3 = val3;      
if (state==0)
      {
      delay(200);
      digitalWrite(LED,HIGH);
if(state1==0)
      {
      delay(200);
      digitalWrite(led1,HIGH);
    if(state2==0)
      {
      delay(200);
      digitalWrite(led2,HIGH);
if(state3==0)
      {
      delay(200);
      digitalWrite(led3,HIGH);
      }
      }
      }
      }

}

qhp777 发表于 2014-11-28 10:56:21

我觉得是不是你没设置初值啊?我也是菜鸟一个,不知道对不对:lol

Acturs 发表于 2014-11-28 11:03:18

为什么初始值啊...闹了一天多了....快憋屈死了

I-robofan 发表于 2014-11-28 11:46:35

1、问题描述的不清楚:“8个按键8个小灯,按一下一个亮,在按一下下一个亮,一一对应”
程序里面只有4个按键,4个灯,并不是8个。
A、“按一下一个亮”,然后呢?按下一直亮,即使松开按键,还是按下就亮,松开就灭?
B、“在按一下下一个亮”:同一个按键再按一下,下一个灯亮,还是再按下一个按键,下一个灯亮?
C 、“一一对应”:按照这个意思,就是一个按键对应一个灯,B的就理解了,是按下一个按键,亮下一个灯。
那就分析A是如何实现的
2、整个文档只有digitalWrite(LED,HIGH),这个打开(关闭)灯,怎么没有关闭(打开)灯?
3、if (state==0){……if (state1==0){……if(state2==0){……if(state3==0){……}}}};这个逻辑你确定搞清楚了?它们之间是“与”还是“或”,还是没关系?
4、按键扫描 if((val1 == HIGH)&&(old_val1 == LOW)){……}再确认下执行时机?
不要急,慢慢分析下
页: [1]
查看完整版本: 我感觉按键小灯逻辑对着 为什么就是不安逻辑走