纯粹时尚 发表于 2014-3-3 17:15:53

求助:while中传感器的值

兄弟们帮忙解决一个小问题,迷茫中。
while 中有一个语句用来取传感器们的值。比如state=digitalRead(4); 读取4号引脚。当While结束后跳出后,就取不到传感器的值了,莫非还要在LOOP里再写一次state=digitalRead(4);

loop(){

state=digitalRead(4);

'''''''''''''''''''''''''''''''''''''''''

while(){

state=digitalRead(4);


'''''''''''''''''''''''''''''
}

}

总感觉写两次state=digitalRead(4); 有点怪怪的。有没有什么精简或代替的办法。

转角 发表于 2014-3-3 17:40:05

用do{
} while()

savagego 发表于 2014-3-3 19:46:14

loop() 里面的程序是循环执行的。
执行到最后就会跳到开头重行执行。

不需要用while()

纯粹时尚 发表于 2014-3-4 09:00:58

while是小循环,LOOP是大循环,现在的问题是state=digitalRead(4); 在while里的话,等结束小循环,跳出来执行大循环的时候,就获取不到state=digitalRead(4); 的值了。

转角 发表于 2014-3-4 09:08:16

你把while的判断条件写清楚了。
如果你是用state做while的判断的话,你完全可以用do while语句去达到你的要求

纯粹时尚 发表于 2014-3-4 09:12:41

转角 发表于 2014-3-4 09:08 static/image/common/back.gif
你把while的判断条件写清楚了。
如果你是用state做while的判断的话,你完全可以用do while语句去达到你的要 ...


int led = 13;
int key= 4;
int time=0;
int state;

void setup()
{
// initialize the digital pin as an output.

pinMode(led, OUTPUT);
pinMode(key, INPUT);
Serial.begin(9600);
Serial.print(" READY TO WORK");


}

void loop()

{
do{
    state=digitalRead(key);
    if(state==LOW){
      time=time++;
      delay(1000);
    }
    else{
      time=0;
      delay(1000);
    }
    Serial.println(time);
    Serial.println(state);

    if(time>10){
      digitalWrite(led,HIGH);
      Serial.println("pump is working......");
      delay(1000);
    }

}
while(time<11);

state=digitalRead(key);
if(state==HIGH){
    digitalWrite(led,LOW);
    Serial.println("pump is stop......");
    Serial.println(time);
    time=0;
    delay(1000);
}
}
//end








纯粹时尚 发表于 2014-3-4 09:17:13

这个代码可以工作,只是感觉在LOOP和WHILE里写两次state=digitalRead(key);代码不是最优化的。

转角 发表于 2014-3-4 09:29:33

纯粹时尚 发表于 2014-3-4 09:17 static/image/common/back.gif
这个代码可以工作,只是感觉在LOOP和WHILE里写两次state=digitalRead(key);代码不是最优化的。

int led = 13;
int key= 4;
int time=0;
int state;

void setup()
{
// initialize the digital pin as an output.

pinMode(led, OUTPUT);
pinMode(key, INPUT);
Serial.begin(9600);
Serial.print(" READY TO WORK");


}

void loop()

{   
    state=digitalRead(key);
   if(time<11)
   {
           if(state==LOW)
                {
                  time=time++;
                  delay(1000);
                }
                else
                {
                  time=0;
                  delay(1000);
                }
                Serial.println(time);
                Serial.println(state);

               
   }
else{
       
                  digitalWrite(led,HIGH);
                  Serial.println("pump is working......");
                  delay(1000);
          
          if(state==HIGH)
          {
                digitalWrite(led,LOW);
                Serial.println("pump is stop......");
                Serial.println(time);
                time=0;
                delay(1000);
          }
}
}
//end这样行吧

纯粹时尚 发表于 2014-3-4 16:39:33

转角 发表于 2014-3-4 09:29 static/image/common/back.gif
这样行吧

多谢转角兄,问题解决了,看来用了while反而多余了。
页: [1]
查看完整版本: 求助:while中传感器的值