如何停止在Arduino的循环

问题描述 投票:0回答:2

我试着去做出打开的代码的LED红外检测时,但是当一个循环开始,我想将其更改为另一个循环,但它不工作

#include <IRremote.h>
int receptor = 7;
int led = 2;
IRrecv irrecv(receptor);
decode_results codigo; //OBJETO CODIGO DE CLASE decode_result, oriundo de IRremote.h

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // INICIA LA RECEPCIÓN
  pinMode(led, OUTPUT);
}

void loop()
{
  if (irrecv.decode(&codigo))
  {
    Serial.println(codigo.value, HEX);

    if (codigo.value == 0xFF6897) //CÓDIGO DEL NÚMERO CERO PARA ACTIVAR LED
    {
      digitalWrite(led, HIGH);
    }

    if (codigo.value == 0xFF30CF) //CÓDIGO DEL NÚMERO UNO PARA DESACTIVAR LED
    { 
      loop();
      digitalWrite(led, LOW);
      delay(1000);
      digitalWrite(led, HIGH);
      delay(1000);
    }

    delay(500);
    irrecv.resume();
  }
}
arduino
2个回答
0
投票

如果我理解正确你的目标 - 你可以简单地虚空环分成2个部分,从那里你禁用和由IF函数检查布尔启用部分。所以,如果布尔值为true运行它的第一功能,否则第二。我希望这一个对你的作品!


0
投票

你可能不希望在递归你的代码(调用循环()循环函数内)。虽然不熟悉adruino,我想我知道足够的C到修复您的代码。

int blinkingState = 0; // should probably be an enum.

void loop()
{
  irrecv.decode(&codigo); // decode into codigo
  if (codigo != NULL) // null reference check
  {
    Serial.println(codigo.value, HEX);
    // Case 1: always on
    if (codigo.value == 0xFF6897) //CÓDIGO DEL NÚMERO CERO PARA ACTIVAR LED
    {
      blinkingState = 0;
    }
    // Case 2: blinking, made else if to get some more speed and skip a second check if case 1 is true.
    else if (codigo.value == 0xFF30CF) //CÓDIGO DEL NÚMERO UNO PARA DESACTIVAR LED
    {
      blinkingState = 1;
    }
  }
  // blink or don't blink according to global variable.
  if (blinkingState == 0)
  {
    digitalWrite(led, HIGH);
    delay(500); // moved from end of function to here otherwise case 2 will blink irregularly
  }
  else if (blinkingState = 1)
  {
    digitalWrite(led, LOW);
    delay(1000);
    digitalWrite(led, HIGH);
    delay(1000);
  }
  irrecv.resume();
}

这个假设循环从外部反复调用,并且不需要在它的内部实际的循环。

你不应该使用递归潜在的长期运行的循环。其实你应该避免的地方是不是太麻烦这样做。调用一个函数创建一个新的StackFrame。和堆栈是非常有限到1MB在大多数系统上。

递归可以为某些问题是有用的,但你不希望这样的99.99%的时间。

© www.soinside.com 2019 - 2024. All rights reserved.