【问题标题】:When to use a while loop or if statement?何时使用 while 循环或 if 语句?
【发布时间】:2014-12-11 23:10:10
【问题描述】:

您能否举一些适合使用 while 循环和 if 循环的情况的示例?

我正在做这个项目,其中 Arduino 从可变电阻器读取模拟输入。 这就是我让它读取原始输入的方式:

int intputValue = analogRead(A0);

然后我将原始输入转换为 0 到 100 之间的数字作为百分比:

double percentValue = inputValue * (1.0/10.23);

然后我使用这个 percentValue 来确定 Arduino 是否需要通过它的几个数字引脚发送信号。我有信号进入 4 通道继电器模块。基本上我的想法是,如果百分比值在 0-25 之间,则其中一个继电器会打开,因此只需要激活一个数字引脚。 26-50 之间,两针,51-75,三针,76-100,四针。

这是我的问题:我应该使用 if 语句吗:

if(percentValue >=0 && percentValue <=25){
   digitalWrite(pin1, HIGH);      //turns on pin 1
}

或者使用while循环:

while(percentValue >= 0 && percentValue <=25){
   digitalWrite(pin1, HIGH);       //turns on pin 1
}

然后我将对 percentValue 范围的其余部分做类似的事情。 在这种情况下使用“if”和“while”有区别吗?

感谢您的帮助。

【问题讨论】:

  • 如果只工作一次,而工作多次。
  • if 不是循环,虽然 while 是。
  • 只是一个小问题。你为什么讨厌那个可怜的阿杜诺?您正在读取一个值,将其存储在一个 16 字节的变量中。这是正确的。但是随后您将其转换为双精度(甚至不是浮点数)。为什么?浮点变量对于微控制器来说不是一个好的选择(因为它们没有 FP 单元,所以它们必须在软件中处理它们)。那转换是为了什么?把它分成四份......只需写if(inputValue &gt;=0 &amp;&amp; inputValue &lt;=255)。你的微控制器会感谢你....
  • 输入在0到1023之间。我做了转换,使数字在0到100之间,代表0%到100%。你能解释一下为什么我应该使用浮点数吗?我对你在说什么感到困惑。
  • while(percentValue &gt;= 0 &amp;&amp; percentValue &lt;=25) { ... 永远不会为真或永远不会发生,因为 percentValue 在循环内不会改变。 --> 使用循环函数的意思,写if语句。这使您的代码更简单。

标签: if-statement while-loop arduino


【解决方案1】:

您的代码中应该有一个setuploop 函数,您可以将if 放入您的loop 函数中。

void setup() {
  // put your setup code here, to run once:
  int intputValue = analogRead(A0);
}

void loop() {
  // put your main code here, to run repeatedly: 
  double percentValue = inputValue * (1.0/10.23);
  if(percentValue >= 0 && percentValue <= 25){
     digitalWrite(pin1, HIGH);      //turns on pin 1
  }
}

【讨论】:

    【解决方案2】:

    While 循环 用于运行特定的代码块,只要满足某些参数即可。 if 语句 类似,但它只会运行上述代码块一次,而 while 语句将运行直到另有说明。

    如此有效:

    while(1 == 1)
    {
        System.out.println("Hello World");
    }
    

    将无限期地打印 Hello World。另一方面:

    if(1 == 1)
    {
        System.out.println("Hello World");
    }
    

    将打印一次Hello World

    只是为了好玩,因为您对循环的理解是阴暗的; for 循环 将运行指定次数:

    for(int i = 0; i < 3; i++)
    {
        System.out.println("Hello World");
    }
    

    将打印 Hello World 3 次。

    参考:

    While loop

    For loop

    If statement

    General Java Tutorials

    【讨论】:

    • @user3211857 如果对您有帮助,请不要忘记选择此答案
    • 这个答案与arduino无关,抱歉。
    【解决方案3】:

    “那么我将对其余的 percentValue 范围做类似的事情。”

    这意味着您应该使用if 语句,而不是while 循环,尤其是当您想对设备执行其他操作时。

    大概,这段代码会放在Arduino的loop()函数中,反复调用,给你一个循环。您不希望 Arduino 陷入您自己的 while 循环中。

    您似乎希望根据读数点亮不同的 LED。您还需要关闭 if 语句正文中的其他 LED。否则,Arduino 最终将点亮所有 4 个 LED。

    if(percentValue >=0 && percentValue <=25){
       digitalWrite(pin1, HIGH);      //turns on pin 1
       digitalWrite(pin2, LOW);
       digitalWrite(pin3, LOW);
       digitalWrite(pin4, LOW); 
    }
    // etc.
    

    【讨论】:

    • 谢谢,这就是我最终让它工作的原因。我没有想到 if 语句在循环函数中的位置,它们只会一遍又一遍地循环。我对其余的百分比数字做了同样的事情。
    猜你喜欢
    • 2015-05-19
    • 2017-12-29
    • 2013-06-09
    • 2014-01-21
    • 2015-11-08
    • 2016-01-12
    • 2015-07-06
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多