c - Arduino增量运算符不影响变量吗?

标签 c if-statement arduino increment led

我正在编写一个程序,与面包板上连接的 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/

相关文章:

c++ - Arduino - 如何编写按名称和编号定义使用的引脚的宏,并在别处使用引脚时抛出编译器错误

c - C 是否有 boolean 值(True/False)

python - dict 格式键错误 '0'

r - 用户编写的函数将 NA 替换为 0,因为 for 循环在 r 中不起作用

c# - 连续读取和解析串行数据的快速方法

c++ - 无法调整缓冲区以适应数据

c - 如何将列表传递给 python 上的 ctypes 函数

c - 结构中的可变长度数组

c - windows操作系统中如何识别RAM地址空间?

swift - 无法在 if 语句中设置查询?