极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10148|回复: 8

求助:while中传感器的值

[复制链接]
发表于 2014-3-3 17:15:53 | 显示全部楼层 |阅读模式
兄弟们帮忙解决一个小问题,迷茫中。
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()
回复 支持 反对

使用道具 举报

发表于 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
你把while的判断条件写清楚了。
如果你是用state做while的判断的话,你完全可以用do while语句去达到你的要 ...

  1. int led = 13;
  2. int key= 4;
  3. int time=0;
  4. int state;

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

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


  12. }

  13. void loop()

  14. {
  15.   do{
  16.     state=digitalRead(key);
  17.     if(state==LOW){
  18.       time=time++;
  19.       delay(1000);
  20.     }
  21.     else{
  22.       time=0;
  23.       delay(1000);
  24.     }
  25.     Serial.println(time);
  26.     Serial.println(state);

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

  32.   }
  33.   while(time<11);

  34.   state=digitalRead(key);
  35.   if(state==HIGH){
  36.     digitalWrite(led,LOW);
  37.     Serial.println("pump is stop......");
  38.     Serial.println(time);
  39.     time=0;
  40.     delay(1000);
  41.   }
  42. }
  43. //end








复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-4 09:17:13 | 显示全部楼层
这个代码可以工作,只是感觉在LOOP和WHILE里写两次state=digitalRead(key);代码不是最优化的。
回复 支持 反对

使用道具 举报

发表于 2014-3-4 09:29:33 | 显示全部楼层
纯粹时尚 发表于 2014-3-4 09:17
这个代码可以工作,只是感觉在LOOP和WHILE里写两次state=digitalRead(key);代码不是最优化的。
  1. int led = 13;
  2. int key= 4;
  3. int time=0;
  4. int state;

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

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


  12. }

  13. void loop()

  14. {   
  15.     state=digitalRead(key);
  16.    if(time<11)
  17.    {
  18.            if(state==LOW)
  19.                 {
  20.                   time=time++;
  21.                   delay(1000);
  22.                 }
  23.                 else
  24.                 {
  25.                   time=0;
  26.                   delay(1000);
  27.                 }
  28.                 Serial.println(time);
  29.                 Serial.println(state);

  30.                
  31.    }
  32.   else{
  33.        
  34.                   digitalWrite(led,HIGH);
  35.                   Serial.println("pump is working......");
  36.                   delay(1000);
  37.           
  38.           if(state==HIGH)
  39.           {
  40.                 digitalWrite(led,LOW);
  41.                 Serial.println("pump is stop......");
  42.                 Serial.println(time);
  43.                 time=0;
  44.                 delay(1000);
  45.           }
  46.   }
  47. }
  48. //end
复制代码
这样行吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-4 16:39:33 | 显示全部楼层
转角 发表于 2014-3-4 09:29
这样行吧

多谢转角兄,问题解决了,看来用了while反而多余了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 17:59 , Processed in 0.036326 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表