首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和我的阿迪诺有麻烦

问和我的阿迪诺有麻烦
EN

Stack Overflow用户
提问于 2016-12-03 17:59:09
回答 2查看 34关注 0票数 0

抱歉,标题含糊不清,但我不知道该怎么写,因为我真的不知道我的问题是什么。为连接到arduino的运动传感器编写了一些代码。每次运行脚本时,它都绕过while循环,因为某种原因我标记了这个循环,然后执行下面的代码并停止。

代码语言:javascript
复制
int buzzPin = 8;
int upPin = 7;
int downPin = 6;
int motionPin = 12;
int redLed = 4;
int amberLed = 3;
int greenLed = 2;

void setup() {
  pinMode(buzzPin, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(amberLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(upPin, INPUT);
  pinMode(downPin, INPUT);
  pinMode(motionPin, INPUT);
}

void loop() {
  delay(1000);
  digitalWrite(greenLed, HIGH);
  digitalWrite(amberLed, LOW);
  while(!digitalRead(upPin)==HIGH); //this is just bypassed when 'upPin' is not high
  if(digitalRead(upPin)==HIGH){
    digitalWrite(greenLed, LOW);
    digitalWrite(amberLed, HIGH);
    digitalWrite(buzzPin, HIGH);  //delay before arming the motion sensor
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(250);
      digitalWrite(buzzPin, LOW);
      delay(250);
      digitalWrite(buzzPin, HIGH);
      delay(1000);
      digitalWrite(buzzPin, LOW);
    } //stops here...
    while(!digitalRead(motionPin)==HIGH);
    disarm();
    alarm();
}

bool disarm(){ //button combination to disarm the motion sensor and stop the alarm
  int i = 0;
  while(true){
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(upPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(upPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(downPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(upPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(downPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    while(digitalRead(upPin)||digitalRead(downPin));
    while(!digitalRead(upPin)||!digitalRead(downPin)){i++; 
    delay(1000);
    if(i == 5){
      return(false);
      }
    }
    if(digitalRead(downPin)==HIGH){
      int i = 0;
      }
    else{continue;}
    break;
    }
  return(true);
  delay(50);
  return(false);
  }

  void alarm(){
    digitalWrite(redLed, HIGH);
    digitalWrite(amberLed, LOW);
    while(disarm()==false){
      digitalWrite(buzzPin, HIGH);
      delay(500);
      digitalWrite(buzzPin, LOW);
      delay(500);
      }
    }

如果有人能告诉我我的问题是什么以及如何解决它,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-03 18:31:41

循环()

(这不是一个循环,而是一个持续了很长时间的不间断延迟的集合)

这是:

代码语言:javascript
复制
 void loop() {
    show_green();
    hang_until(upPin, LOW); // this can last forever
    show_amber();
    buzz_a_while(); // blocks a couple of seconds
    hang_until(motionPin, LOW); // this seems to last forever
    disarm();
    alarm();
    delay(1 sec);
}

因此,只要强迫upPin和motionPin永远保持低位,您就不会注意到“停止”。

但是()在arduino编码中总是可疑的,因为它禁用了arduino的主要特性:永远运行循环函数。

票数 0
EN

Stack Overflow用户

发布于 2016-12-03 18:08:55

您在第一个while循环的注释中写道,如果引脚不高,就会绕过它。但是,您有一个否定运算符(!)就在看上去很奇怪的情况之前。我建议你把它去掉。之后的语句似乎也没有必要,因为它只是在checka的条件下进入循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40950814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档