如何仅为一个函数添加延迟

How do I add a delay to only one function?

本文关键字:一个 函数 添加 延迟 何仅      更新时间:2023-10-16

我有一个旋转编码器,需要实时更新,还有一个max6675热电偶模块,需要至少250ms的延迟才能更新。当我在循环中包含thermo函数时,延迟会应用于整个循环,从而抵消我的编码器功能。如何在不将延迟应用于整个循环的情况下仅将其添加到热函数。我试着添加一个基于毫秒的假延迟,但最大值无法加载。

void encoders(){
State = digitalRead(CLK);
if(State != lastState){
if(digitalRead(DT) != State){
setTemp = setTemp + 5;
}else {
setTemp = setTemp - 5;
}
lastState = State;
}   
delay(0);
}

void readTemp(){
float realTemp = thermo.readFahrenheit();
}
void loop(){
currentRead = millis();
if(currentRead > lastRead + readDelay){
readTemp();
lastRead = currentRead;
}

encoders();

Serial.println(setTemp);
Serial.println(realTemp);
}

你真的很接近。现在的问题是,一旦readTemp函数退出,您正在读取一个超出范围的局部变量。谷歌"C++变量范围";了解更多关于如何工作的信息。我假设您也有一个同名的全局变量,因为在循环中使用它时不会报告编译错误。如果是这样的话,那么你想要这样的东西:

我还修正了你的时间线,以确保毫秒滚动的安全。

void readTemp(){
realTemp = thermo.readFahrenheit();
}
void loop(){
currentRead = millis();
if(currentRead - lastRead >= readDelay){
readTemp();
lastRead = currentRead;
}

encoders();

Serial.println(setTemp);
Serial.println(realTemp);
}

您还应该从编码器函数中删除延迟(0(行。这句话往好里说毫无作用,往坏里说会引起一些奇怪的行为。