超声波测距串口打印缺失奇数序号问题求助
问题分析:串口只显示偶数序号的原因及修复方案
你遇到的这个问题,核心原因是循环变量i被意外递增了两次,直接跳过了所有奇数序号的计数。咱们拆解一下代码里的问题点:
- 首先看你的
for循环定义:for(i=0;i<51;i++),每次循环执行完毕后,i会自动加1,这是for循环的默认行为; - 但在循环体里,你又写了
values[i++] = result;——这里的i++会让i再额外加一次; - 这么一来,每次循环结束后
i总共增加了2,自然就从0跳到2,再跳到4……直到50,完全跳过了奇数序号。
另外还有个小细节:你的TakeMeasurement应该是一个测量函数,所以要写成TakeMeasurement();(加上括号),不然编译器会把它当成变量处理,可能导致测量结果错误或者编译失败。
下面是修正后的代码:
int i, result = 0, values[51]; for(i=0;i<51;i++){ result = TakeMeasurement(); // 修正:添加函数调用括号 Serial.print("Nr."); Serial.print(i); Serial.print(": "); Serial.println(result); values[i] = result; // 修正:移除多余的i++ delay(150); }
这样修改后,循环变量i只会在for循环的每次迭代末尾递增一次,串口就能正常显示从Nr.0到Nr.50的所有序号了。
内容的提问来源于stack exchange,提问作者Peter S
相关产品推荐
相关产品推荐

