【问题标题】:Could there be a way to escape this loop?(problem with fade and leds)有没有办法摆脱这个循环?(淡入淡出和 LED 的问题)
【发布时间】:2021-08-10 02:00:48
【问题描述】:
int led1 = 3;
int led2 = 5;
int led3 = 6;
int led4 = 9;
int m = 1;
int brightness = 10;
int fadeAmount = 5;
int led;
int one = 1;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}

void loop()
{
  if (m == 4 or m == 1) {
    one = -one;
  }
  if (intensite <= 5){
      m = m + one;
    }
  if (m == 1) {
    led = led1;
  }
  if (m == 2) {
    led = led2;
  }
  if (m == 3) {
    led = led3;
  }
  if (m == 4) {
    led = led4;
  }
  

    brightness = brightness + fadeAmount;

   if (brightness <= 5 or brightness >= 255) {
     fadeAmount = -fadeAmount;
   }
   analogWrite(led,brightness);
   delay(10);
}

当我运行这部分代码时,它只是卡在了顶部 LED 的无限循环中,并且没有按照我看不到的方式返回。如果有人能帮助我理解我的错误,那将是非常有帮助的。目的是编写一个代码,从右到左(led1 到 led4)然后从左到右(led4 到 led1)点亮 LED,而不是简单地打开它们,而是让它们褪色。

【问题讨论】:

  • 请提供更多细节。您提供的信息还不够,您将变量命名为非常糟糕,甚至没有解释您的代码或预期的行为......
  • 对不起变量我是法国人所以对我来说它们很简单,我会翻译它们
  • @loloToster 我希望修改后更容易理解

标签: loops arduino fade led


【解决方案1】:

我已尽最大努力尽可能接近您的代码。所以你的代码不起作用,因为它没有多大意义。你为什么要让这个one 变量?它只是把所有的事情都复杂化了。只需输入一个boolean 来指示您是否向左走,然后根据m 的当前值进行更改。方法如下:

int led1 = 3;
int led2 = 5;
int led3 = 6;
int led4 = 9;
int m = 1;
int brightness = 10;
int fadeAmount = 5;
int led;
bool goingLeft;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}

void loop()
{
  if (m == 1) { // If we are on the right side we set goingLeft to true
    goingLeft = true;
  }else if(m == 4){ // If we are on the left side we set goingLeft to false
    goingLeft = false;
  }
  if (brightness <= 5 && goingLeft){ // if we are moving left then we increment the m variable
      m++;
  }else if(brightness <= 5){ // if we are moving right we decrement it
    m--;
  }
  if (m == 1) {
    led = led1;
  }
  if (m == 2) {
    led = led2;
  }
  if (m == 3) {
    led = led3;
  }
  if (m == 4) {
    led = led4;
  }
    brightness = brightness + fadeAmount;

   if (brightness <= 5 or brightness >= 255) {
     fadeAmount = -fadeAmount;
   }
   analogWrite(led,brightness);
   delay(10);
}

如果我是你,我会使用 for 循环以完全不同的方式执行此操作,但正如我之前所说,我试图尽可能接近你的代码。

另外我看到您在代码中使用了or。不要这样做!在 C 语言中,or 运算符是 || 而不是 or

【讨论】:

  • 帮助很大。你有一个键盘快捷键来做||符号?
  • 可能是键盘上的 Shift +(Enter 上的键)。
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多