我正在编写一个程序,与面包板上连接的 LED 进行交互,模拟一个上下弹跳的“球”。一切都正常工作,直到弹跳高度减小(模拟动量损失)。 LED 灯在超过第 9 个 LED 灯后继续亮起,并开始出现奇怪的现象。
这行代码出现的问题:
digitalWrite(ledPin[activeLED], HIGH);
activeLED += dir;
if (activeLED == bounceLimit){
dir = -1;
bounceLimit--;
}
if (activeLED == 0) {
dir = 1;
}
activeLED 是被点亮的 LED,它们从顶部开始连续亮起,直到达到ounceLimit 变量,然后改变方向并向下亮起,直到为零,然后再次开始向上。问题在于,在下次上升时,bounceLimit 应设置为较低的 8(然后是 7、6 等),但似乎它没有设置得更低,并且 LED 继续亮到顶部,然后开始表现得很奇怪。
我设法通过添加另一个条件来修复它
if (activeLED == bounceLimit && dir = 1){
dir = -1;
bounceLimit--;
}
但是为什么需要额外的条件呢?无论如何,只有当方向向上(1)时才不会达到极限吗?
最佳答案
因此,如果 bounceLimit
开始时为 9(例如),当您到达顶部时,您会拿走 1 以使 bounceLimit
等于 8。但是当 LED 熄灭时在下一次迭代中,事件 LED 也变为 8,这将再次触发您的 if 语句。
关于c - Arduino增量运算符不影响变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985365/