想飞的猫 发表于 2013-10-27 01:58:27

手势控制灯程序求助,程序逻辑上有问题

制作一个手势控制的小灯,用两个行迹的传感器,从左往右挥手,灯变亮,从右往左挥手,灯变暗直到灭,但是实际运行变亮正常,变暗只能减一下,从右往左挥过手后,plus总是1,正常应该是0,哪位能帮我查出程序中的逻辑错误。


int plus;//加操作许可标志
int minus;//减操作许可标志
int val;//小灯亮度
int val1;//传感器1中间变量
int val2;//传感器2中间变量
int Sensor1pin=2;//传感器1
int Sensor2pin=3;//传感器2
int Ledpin=5;//LED
void setup()
{
Serial.begin(9600);//测试用
pinMode(Ledpin, OUTPUT);
pinMode(Sensor1pin, INPUT);
pinMode(Sensor2pin, INPUT);
val=0;
}
void loop()
{
val1=digitalRead(Sensor1pin);
val2=digitalRead(Sensor2pin);
if (val1==0)
{
    if (val2==1)
   {if(val<5)
    { plus=1;}
}}
if (val2==0)
{
    if (val1==1)
    {if (val>0)
    {
      minus=1;
    }}
}
if (plus==1)//如果加操作许可为1,右传感器为0,说明手从左侧到右侧,val加1
{
    if (val2==0)
    {
      val++;
      plus=0;
      delay(500);
    }
    if (minus==1)//减操作
    {
      if (val1==0)
      {
      val=val-1;
      minus=0;
      delay(500);
      }
    }
}
analogWrite(Ledpin,val*51);//亮度为5档
Serial.print("val=");//此处为测试用
Serial.print(val);
Serial.print("          Sensor1 is ");
Serial.print(val1);
Serial.print("      Sensor2 is ");
Serial.println(val2);
Serial.print("plus=");
Serial.print(plus);
Serial.print("    minus=");
Serial.println(minus);
Serial.println ();
}

maxims 发表于 2013-10-27 04:08:58

我认为,你不该用if而该用case

hi.t 发表于 2013-10-27 10:05:48

你手的一次动作,程序已经运行了加与减。可以加个延时:
if (val1==0)
   {
   if (val2==1)
      {if(val<5)
   { plus=1;}
   delay(500); //:lol
   }}
   if (val2==0)
   {
   if (val1==1)
   {if (val>0)
   {
       minus=1;
   }
   delay(500); //:lol
   }
   }

想飞的猫 发表于 2013-10-27 18:52:14

hi.t 发表于 2013-10-27 10:05 static/image/common/back.gif
你手的一次动作,程序已经运行了加与减。可以加个延时:
if (val1==0)
   {


试了,不灵!

学慧放弃 发表于 2013-10-27 20:35:01

我也有那模块,不会用啊

hi.t 发表于 2013-10-29 10:41:00

本帖最后由 hi.t 于 2013-10-29 11:41 编辑

void loop()
{
   val1=digitalRead(Sensor1pin);
   val2=digitalRead(Sensor2pin);
   if ((val1==0)&&(val2==1)){
                while(digitalRead(Sensor2pin));       
                while(!val1){val1=digitalRead(Sensor1pin);}
                while(!val2){val2=digitalRead(Sensor2pin);}
                if(val<5)val++;
                analogWrite(Ledpin,val*51);
                delay(500);
        }else{
           if ((val2==0)&&(val1==1)){
                        while(digitalRead(Sensor1pin));       
                        while(!val2){val2=digita2Read(Sensor2pin);}
                        while(!val1){val1=digita2Read(Sensor1pin);}
                        if(val>0)val--;
                        analogWrite(Ledpin,val*51);
                        delay(500);
                }
        }
}

while 里面可以加个超时跳出。


yueguang3048 发表于 2013-10-29 15:48:20

本帖最后由 yueguang3048 于 2013-10-29 15:49 编辑

if (plus==1)//如果加操作许可为1,右传感器为0,说明手从左侧到右侧,val加1
{
    if (val2==0)
    {
      val++;
      plus=0;
      delay(500);
    }
    if (minus==1)//减操作
    {
      if (val1==0)
      {
        val=val-1;应该是这里吧上面的val++是先用val 后加的, 你这里是先减后用的 改成val-- 看如何?:)
      minus=0;
      delay(500);
      }
    }

求指导

排队等寂寞 发表于 2015-8-24 17:06:06

朋友   你好我也有这个模块   能不能给你那个电路图给我参考一下啊   ,感激不尽

想飞的猫 发表于 2016-12-18 23:04:42

排队等寂寞 发表于 2015-8-24 17:06
朋友   你好我也有这个模块   能不能给你那个电路图给我参考一下啊   ,感激不尽

这个电路很简单啊,你就把2个传感器的数字信号输出端接在2和3脚上,LED串一个200欧的电阻接在5脚上就可以了。
页: [1]
查看完整版本: 手势控制灯程序求助,程序逻辑上有问题