Arduino上的左右红外运动传感器

时间:2015-11-12 09:13:13

标签: c arduino detection motion

我正在制作包含传感器的项目。我有两个传感器,一个在左边和右边。我已经成功检测到了左右运动,但是当我只是垃圾“感觉”一个传感器时,让我们说左传感器,就像我向左扫过一样。你能告诉我这是什么问题吗?

了解我的代码我已经绘制了“必需”序列来说我已经刷过了。 (0检测到,1没有检测到)

左边 1. L = 1,R = 1 2. L = 0,R = 1 3. L = 0,R = 0 4. L = 1,R = 0

对 1. L = 1,R = 1 2. L = 1,R = 0 3. L = 0,R = 0 4. L = 0,R = 1

这是我的代码

int rs=7,ls=6,r,l,x,xx,xxx,z; //rs right sensor, ls left sensor
void setup() {
  Serial.begin(9600);
  pinMode(rs, INPUT);
  pinMode(ls, INPUT);
  pinMode(13,OUTPUT);
}

void loop() {
  digitalWrite(12,LOW);
  digitalWrite(13,LOW);
  r= digitalRead(rs);
  l= digitalRead(ls);

  if(r==1&&l==1)
  x=1;
  else x=0;

//RIGHT MOTION
    if(x==1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)<digitalRead(rs)){
    z=10000;xx=1;}}
    if(xx=1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)==0&&digitalRead(rs)==0){
    z=10000;xxx=1;}}}
    if(xxx==1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)>digitalRead(rs)){
    z=10000;Serial.println("Right motion");digitalWrite(12,HIGH);}}}}
//LEFT MOTION
  if(x==1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)>digitalRead(rs)){
    z=10000;xx=1;}}
    if(xx=1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)==0&&digitalRead(rs)==0){
    z=10000;xxx=1;}}}
    if(xxx==1){
    for(z=1;z<10000;z++){
    if(digitalRead(ls)<digitalRead(rs)){
    z=10000;Serial.println("Left motion");digitalWrite(13,HIGH);}}}}


}

我将循环设置10000次,因为1整个循环检测动作的速度非常快。

提前致谢。

1 个答案:

答案 0 :(得分:0)

简而言之:您永远不会将vars x,xx,xxx重置为0.此外,您同时使用&#34; Set&#34;这两种Motion的变量。所以 digitalRead(ls) < digitalRead(rs) 设置xx = 1和 digitalRead(ls) > digitalRead(rs) 同时设置xx = 1。

要做的第一件事就是命名&#34;首先&#34; (//右移动后的所有内容//左移动)x,xx,xxx类似于:rightMotionStep1 rightMotionStep2和rightMotionStep3以及后来的x,xx,xxx到:leftMotionStep1 leftMotionStep2和leftMotionStep3。

当然你也必须申报这些Vars。

接下来就是你必须在

之后重置所有变量
Serial.println("Right motion");

应该有

rightMotionStep1 = 0;
rightMotionStep2 = 0;
rightMotionStep3 = 0;
对于左运动也是一样。