极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12701|回复: 3

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

[复制链接]
发表于 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);
      }
      }
      }
      }
  
}
回复

使用道具 举报

发表于 2014-11-28 10:56:21 | 显示全部楼层
我觉得是不是你没设置初值啊?我也是菜鸟一个,不知道对不对
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-28 11:03:18 | 显示全部楼层
为什么初始值啊...闹了一天多了....快憋屈死了
回复 支持 反对

使用道具 举报

发表于 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)){……}再确认下执行时机?
不要急,慢慢分析下
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 13:44 , Processed in 0.039737 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表