极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18926|回复: 8

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-10-27 04:08:58 来自手机 | 显示全部楼层
我认为,你不该用if而该用case
回复 支持 反对

使用道具 举报

发表于 2013-10-27 10:05:48 | 显示全部楼层
你手的一次动作,程序已经运行了加与减。可以加个延时:
  if (val1==0)
   {
     if (val2==1)
      {if(val<5)
     { plus=1;}
     delay(500); //
   }}
   if (val2==0)
   {
     if (val1==1)
     {if (val>0)
     {
       minus=1;
     }
     delay(500); //
     }
   }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-27 18:52:14 | 显示全部楼层
hi.t 发表于 2013-10-27 10:05
你手的一次动作,程序已经运行了加与减。可以加个延时:
  if (val1==0)
   {

试了,不灵!
回复 支持 反对

使用道具 举报

发表于 2013-10-27 20:35:01 | 显示全部楼层
我也有那模块,不会用啊
回复 支持 反对

使用道具 举报

发表于 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 里面可以加个超时跳出。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 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脚上就可以了。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 16:45 , Processed in 0.067367 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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