如何将Arduino setup函数中存储的变量值传递到loop函数中使用
问题根源
- 变量遮蔽:setup 内部通过
float startTime=millis()重新声明了一个和全局变量同名的局部变量,该变量仅在setup作用域内生效,全局变量完全没有被修改,因此loop中读取的始终是初始值0。 - 返回值无效:Arduino框架中setup的定义是无返回值的
void类型,你写的return startTime不会生效,也不会自动把值写入全局变量。 - 类型不匹配:
millis()返回值为unsigned long类型,你用int、float存储会有精度损失、溢出的风险,属于类型使用错误。
修正方案
如果你需要的是setup执行结束的时间点
unsigned long startTime = 0; // 使用和millis()返回值匹配的类型 void setup(){ Serial.begin(9600); // 必须初始化串口才能正常打印 // [其他与本问题无关的setup代码] startTime = millis(); // 直接为全局变量赋值,不要加类型声明 } void loop(){ Serial.println(startTime); delay(1000); // 避免串口刷屏可按需调整 }
如果你需要的是setup的执行时长
unsigned long setupDuration = 0; void setup(){ unsigned long setupStart = millis(); Serial.begin(9600); // [其他与本问题无关的setup代码] setupDuration = millis() - setupStart; // 计算得到setup总执行时长 } void loop(){ Serial.print("Setup执行时长(ms): "); Serial.println(setupDuration); delay(1000); }
内容的提问来源于stack exchange,提问作者thealol
相关产品推荐
相关产品推荐

