文档库 最新最全的文档下载
当前位置:文档库 › 手势控制小灯

手势控制小灯



基于Arduino的手势控制小灯,用两个循迹的红外光电传感器做光电检测,Arduino做逻辑判断和亮度控制。做之前觉得很简单,但是做起来发现有很多问题,比如,开始觉得做一个判断,如果传感器1=0 and 传感器2=1(0是被挡上的状态)就说明手是从左右移过来(传感器1是左侧的),然后等候传感器1=1 and 传感器2=0,就认为手已经从左侧移入并且已经移到右侧了,可以亮度增加操作了,但实验的时候发现,这样做时当手把传感器2挡上时小灯亮度会迅速增加到最亮。还有一些类似的问题,修改了几次才让这东西操作起来符合逻辑要求了。
下面是这小灯的代码,这东西看似简单,但如果不去实验,想要一次写好,还真不容易。串口输出部分是为了调试时便于观察程序运行过程设的,和功能没有实际意义。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
int plus;//加操作许可标志
int minus;//减操作许可标志
int val;//小灯亮度
int val1;//传感器1中间变量
int val2;//传感器2中间变量
int Sensor1pin=12;//传感器1
int Sensor2pin=9;//传感器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 &val2==1)
{
plus=1;
minus=0;
}

if(val1==1 & val2==0)
{
minus=1;
plus=0;
}
//++++++++++++++加减控制++++++++++++++++++++++++++++
if(val2==0& plus==1)
{
if (val<3 & val1==0)
{
val++;
plus=0;
}
else
{
plus=0;
delay(300);
}
}
if(val1==0&minus==1)
{
if (val!=0 & val2==0)
{
val--;
delay(300);
minus=0;
}
else
{
minus=0;
delay(300);
}
}

//++++++++++++++亮度输出执行++++++++++++++++++++++++
switch (val)
{
case 0:
analogWrite(Ledpin,0);
analogWrite(3,0);
break;
case 1:
analogWrite(Ledpin,10);
analogWrite(3,10);
break;
case 2:
analogWrite(Ledpin,60);
analogWrite(3,60);
break;
case 3:
analogWrite(Ledpin,250);
analogWrite(3,250);
break;
}
//++++++++++++++调试用,状态输出到串口,以便观察++++++++++++++++++++++++++++
Serial.print("val=");
Serial.print(val);
Serial.print(" val1= ");
Serial.print(val1);
Serial.print(" val2=");
Serial.print(val2);
Serial.print(" plus=");
Serial.print(plus);
Serial.print(" minus=");
Serial.println(minus);
Serial.println ();
}

相关文档