Использование библиотеки DallasTemperature - тормозит несколько секунд
- Войдите на сайт для отправки комментариев
Вс, 01/05/2016 - 20:38
Здравствуйте! Написал вот такую функцию считывания температуры, при работе который программа начинает тормозить, как будто где то delay стоит. Секунды на часах начинают тормозить, на кнопке перестаёт реагировать. Методом исключения нашёл что тормоза начинаются когда срабатывает строка float temperatureNow1 = sensorTemperatureDT1.getTempCByIndex(0);
int delayInMillis = 1000 void RequestSensorTemperatures() { millisNow = millis(); if (!askSensor) { // Если не запрашивали температуру с датчика - запросим; sensorTemperatureDT1.requestTemperatures(); sensorTemperatureDT2.requestTemperatures(); askSensor = true; // Подъем флага - температура запрошена! lastSensorTemperatureRequest = millisNow; // Запомним время запроса температуры; } if (askSensor & (millis() - lastSensorTemperatureRequest) >= delayInMillis) { // waited long enough?? float temperatureNow1 = sensorTemperatureDT1.getTempCByIndex(0); float temperatureNow2 = sensorTemperatureDT2.getTempCByIndex(0); Serial.println(temperatureNow1); Serial.println(temperatureNow2); askSensor = false; } }
Функция библиотеки:
// Fetch temperature for device index float DallasTemperature::getTempCByIndex(uint8_t deviceIndex){ DeviceAddress deviceAddress; if (!getAddress(deviceAddress, deviceIndex)){ return DEVICE_DISCONNECTED_C; } return getTempC((uint8_t*)deviceAddress); }
Где я тут начудил?
как будто где то delay стоит.
Так он там и стоит. Смотрите текст библиотеки.
Где я тут начудил?
Это не Вы, а автор библиотеки начудил. Ну, а Вы, в свою очередь, начудили с часами, раз они у Вас делэев боятся.
Замер температуры с полной точностью у этого датчика требует 0.75 секунд времени
чтобы не висеть впустую все это время надо замер делать в два этапа:
- запрос измерения
- отсчитываем секунду по mills, можем заниматься другими делами
- считываем результат
axill, если вы не читали код, то там именно это и реализовано
По часам не правильно выразился.. у меня двоеточие мигает раз в секунду, вот оно и замерзает, по нему и сужу.
Ну, а чего оно у Вас делэев-то боится? Сделайте, чтобы не боялась и мгала нормально.
axill, если вы не читали код, то там именно это и реализовано
чудес не бывает, значит внутри getTempC стоит безусловная задержка