uint32_t gPrevMillis = 0;
const uint32_t gInterval = 1000;
int8_t fDSGetTemperature(const uint16_t aReadRange = 10000) {
static bool lReadMode = false;
static uint32_t lPrevMillis = millis();
//# сброс запускаем за секунду до считывания, например у нас диапазон между заперами 10 секунд, значит сброс сенсоров вызываем за 9 секунд
static uint32_t lResetMillis = lPrevMillis + (uint32_t)aReadRange - 1000UL;
// Serial.print(millis());
// Serial.print("\t - lPrevMillis - ");
// Serial.print(lPrevMillis);
// Serial.print("\t - lResetMillis - ");
// Serial.println(lResetMillis);
uint32_t lCurrMillis = millis();
if (lCurrMillis >= lResetMillis && !lReadMode) {
//# произведем сброс всех сенсоров на шине и запустим измерение
// gDSSensors.reset(); //# сброс шины
// gDSSensors.write(0xCC); //# сброс всех DS на шине
// gDSSensors.write(0x44); //# начать преобразование (без паразитного питания)
//# установим флаг гготовности чтения
lReadMode = true;
Serial.print(millis());
Serial.println("\t - reset DS18B20");
}
if (lCurrMillis >= (lPrevMillis + (uint32_t)aReadRange) && lReadMode) {
//# произведем сброс всех сенсоров на шине и запустим измерение
// gDSSensors.reset(); //# сброс шины
// gDSSensors.write(0xCC); //# сброс всех DS на шине
// gDSSensors.write(0x44); //# начать преобразование (без паразитного питания)
//# сбросим флаг готовности чтения
lReadMode = false;
//# переназначим lPrevMillis
lPrevMillis = millis();
//# переназначим lResetMillis
lResetMillis = lPrevMillis + (uint32_t)aReadRange - 1000UL;
Serial.print(millis());
Serial.println("\t + read DS18B20");
}
return -127;
} // int8_t fDSGetTemperature()
void setup() {
Serial.begin(115200);
Serial.println("---=== START ===---");
}
void loop() {
uint32_t lCurrMillis = millis();
if (lCurrMillis - gPrevMillis >= gInterval) {
// save the last time you blinked the LED
gPrevMillis = lCurrMillis;
//Serial.print(millis());
//Serial.println("\t * request DS18B20");
fDSGetTemperature();
}
}