Как добавить задержку только к одной функции? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть энкодер, который мне нужно обновлять в режиме реального времени, и у меня есть модуль термопары max6675, которому требуется минимальная задержка 250 мс для обновления. Когда я включаю термофункцию в l oop, задержка применяется ко всему l oop, отменяя мою функцию кодировщика. Как я могу добавить задержку только к моей термофункции, не применяя ее ко всему l oop. Я попытался добавить ложную задержку на основе миллисекунд, но макс не загружается.

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);

}

1 Ответ

0 голосов
/ 15 июля 2020

Вы действительно близки. Проблема, с которой вы столкнулись, заключается в том, что вы читаете локальную переменную, которая выходит за пределы области видимости, как только функция readTemp завершается. Google "Область переменных C ++" для получения дополнительной информации о том, как это работает. Я предполагаю, что у вас также есть глобальная переменная с этим именем, поскольку вы не сообщаете об ошибке компиляции при попытке использовать ее в l oop. Если это так, то вам нужно что-то вроде этого:

Я также исправил вашу линию синхронизации, чтобы она была безопасной для миллисекундного опрокидывания.

void readTemp(){
  realTemp = thermo.readFahrenheit();
}

void loop(){
  currentRead = millis();
  if(currentRead - lastRead >= readDelay){
    readTemp();
    lastRead = currentRead;
  }
  
  encoders();
  

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

}

Вам также следует удалить эту строку задержки (0) из функция кодировщика. Эта строка в лучшем случае ничего не делает, а в худшем может вызвать какое-то странное поведение.

...