Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "TempInput.h"
  2. #include "globals.h"
  3. #include "defines.h"
  4. #include "Logs.h"
  5. TempInput::TempInput(uint8_t index)
  6. : m_address{0}
  7. , m_index(index)
  8. , m_lastSensorRequestMs(0)
  9. , m_hasReadSensor(false)
  10. {
  11. }
  12. void TempInput::begin()
  13. {
  14. setValue(TEMP_T_INVALID);
  15. g_dallasTemperature.getAddress(m_address, m_index);
  16. }
  17. void TempInput::loop()
  18. {
  19. const auto& currentMs = millis();
  20. if (currentMs - m_lastSensorRequestMs >= SENSORS_CHECK_INTERVAL)
  21. {
  22. LOG(5, "TempInput: requesting value");
  23. m_lastSensorRequestMs = currentMs;
  24. m_hasReadSensor = false;
  25. g_dallasTemperature.requestTemperaturesByAddress(m_address);
  26. }
  27. if (currentMs - m_lastSensorRequestMs >= SENSORS_REQUEST_DELAY &&
  28. !m_hasReadSensor)
  29. {
  30. LOG(5, "TempInput: reading value");
  31. m_hasReadSensor = true;
  32. auto raw = g_dallasTemperature.getTempC(m_address);
  33. temp_t temp = TEMP_T_INVALID;
  34. if (raw != DEVICE_DISCONNECTED_C)
  35. {
  36. temp = (temp_t) (raw * 10);
  37. }
  38. setValue(temp);
  39. }
  40. else
  41. {
  42. setValue(m_lastValue);
  43. }
  44. }