我正在编写一个程序,该程序与面包板上连接的LED进行交互,该程序将模拟“球”上下弹跳。一切工作正常,直到反弹高度减小(模拟动量损失)为止。 LED保持点亮,超过第9个LED并开始表现异常。

此代码行中出现了问题:

digitalWrite(ledPin[activeLED], HIGH);
activeLED += dir;
 if (activeLED == bounceLimit){
   dir = -1;
   bounceLimit--;
 }
 if (activeLED == 0) {
  dir = 1;
 }


activeLED是指被点亮的LED,它们从头到尾依次点亮,直到达到bounceLimit变量为止,在该变量中,它改变方向并向下点亮,直到为零,然后再次向上点亮。问题在于,在下次上升时,应将bounceLimit设置为较低的8(然后是7、6等),但似乎并没有将其设置为较低,并且LED继续点亮至顶部。然后开始表现怪异。

我设法通过添加其他条件来解决它

if (activeLED == bounceLimit && dir = 1){
dir = -1;
bounceLimit--;
}


但是为什么需要额外的条件呢?无论如何,仅当方向向上(1)时才会达到极限吗?

最佳答案

因此,如果bounceLimit是(例如)9开始,那么当您击中顶部时,将带走一个数值,使bounceLimit等于8。但是,当LED在下一次迭代中下降时,活动LED也是8 ,这会再次触发您的if语句。

07-24 09:44