2017-07-25 3 views
0
void setManual(){ 
//do something like turn on and off the light 
} 
void setAuto(){ 
    for(;;){ 
    digitalRead(pirPin); //read data from PIR 
    digitalWrite(ledPin, pirValue); // turn on and of the light follow the PIR's data 
    } 
} 

私の問題は、私がsetAuto()を呼び出すと、別の方法に行くことができないということです。
私はこれについて考えていません。だから、PIRセンサーはループなしで動くことができますか?または、別の方法に行くためにこのループをどのように壊すことができますか?PIRセンサーはループなしで作動できますか?

+0

あなたがそれを使用するために、[ 'digitalRead'](https://www.arduino.cc/en/Reference/DigitalRead)関数の* *の結果を得るべきではありません'digitalWrite'への呼び出し? –

+0

adafruitの例題から始めてみませんか? https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir –

答えて

0

for(;;) 

が無限ループであるため、あなたは他の方法に入ることができません。

loop()メインステートメントのタイマー、経過時間ミリ秒を使用してセンサーから読み取ることができます。その間にはおそらく遅延があります。それを行う方法はたくさんあります。しかし、無限ループを別々に入力することは、プログラムが成熟するにつれてあなたが望むものを実行しない可能性があります。 Arduinoコードのメインloop()は、すでに無限ループであり、通常は使用する必要があります。

0

for(;;)を使用して無限ループを作成しました。あなたは代わりに、これを試みることができる:

void setManual(){ 
    //do something like turn on and off the light 
    } 
    void setAuto(){ 
     bool flag=true; 
     int data; 
     while flag { 
     data = digitalRead(pirPin); //read data from PIR 
     if(data == 0) { //Specify a condition that can if triggered would change your flag to false and exit the loop 
      flag = false; 
      //break;  //<-- You can also use this statement to break out of the loop. 
     } 
     digitalWrite(ledPin, pirValue); // turn on and of the light follow the PIR's data 
     } 
    } 
関連する問題