Использование библиотеки DallasTemperature - тормозит несколько секунд

orcsin
Offline
Зарегистрирован: 12.06.2015

Здравствуйте! Написал вот такую функцию считывания температуры, при работе который программа начинает тормозить, как будто где то 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);

}

Где я тут начудил?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

orcsin пишет:

как будто где то delay стоит. 

Так он там и стоит. Смотрите текст библиотеки.

orcsin пишет:

Где я тут начудил?

Это не Вы, а автор библиотеки начудил. Ну, а Вы, в свою очередь, начудили с часами, раз они у Вас делэев боятся.

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Замер температуры с полной точностью у этого датчика требует 0.75 секунд времени

чтобы не висеть впустую все это время надо замер делать в два этапа:

- запрос измерения

- отсчитываем секунду по mills, можем заниматься другими делами

- считываем результат

orcsin
Offline
Зарегистрирован: 12.06.2015

axill, если вы не читали код, то там именно это и реализовано

orcsin
Offline
Зарегистрирован: 12.06.2015

По часам не правильно выразился.. у меня двоеточие мигает раз в секунду, вот оно и замерзает, по нему и сужу.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, а чего оно у Вас делэев-то боится? Сделайте, чтобы не боялась и мгала нормально.

axill
Offline
Зарегистрирован: 05.09.2011

orcsin пишет:

axill, если вы не читали код, то там именно это и реализовано

чудес не бывает, значит внутри getTempC стоит безусловная задержка