Buenas, estoy intentando hacer un controlador para mi acuario, y me he encontrado con un problema con la sonda de temperatura. Uso Dallas ds18B20 ,
tengo lectura correcta, pero al acceder a la sonda, me ralentiza el programa un monton
la libreria tiene activado por defecto un delay interno debido a que este sensor necesita un tiempo para hacer la medida, el cual es proporcional a la resolucion con la que trabajas.
puedes desactivar ese delay pero tienes que ponerlo en tu codigo, pero si usar el comando delay, ya que estarias en las mismas, ya que delay para todo.
te pongo una muestra del codigo que uso yo
void READ_TEMP_18B20(DeviceAddress deviceAddress)
{
// method 1 - slower
//Serial.print(sensors.getTempC(deviceAddress));
//Serial.print(" Temp F: ");
//Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit
//delay (1000);
// method 2 - faster
// temp18b20 = sensors.getTempC(deviceAddress);
if (millis() - lastTempRequest >= delayInMillis) // waited long enough??
{
temp18b20 = sensors.getTempCByIndex(0);
idle = 0;
// immediately after fetching the temperature we request a new sample
// in the async modus
// for the demo we let the resolution change to show differences
//TEMPERATURE_PRECISION++;
//if (TEMPERATURE_PRECISION > 12) TEMPERATURE_PRECISION = 9;
//sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
sensors.requestTemperatures();
delayInMillis = 750 / (1 << (12 - TEMPERATURE_PRECISION));
lastTempRequest = millis();
}
}
el codigo lo saque de no se donde, buscando un poco por ahi.