Go Down

Topic: Duda con Dallas ds18B20 (Read 648 times) previous topic - next topic

Marcial

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 instrucion que me relantiza es :

TmpSen1.requestTemperatures();


que estaré haciendo mal?


Gracias

juanjodcv

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

Code: [Select]
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.

Marcial

Muchas gracias por tu respuesta. TEMPERATURE_PRECISION

El motivo de la demora lo entiendo, el codigo que has posteado me funciona a la perfeccion pero con TEMPERATURE_PRECISION=0

es asi como desactiva el delay?
por cierto, ya metidos en gastos y molestias en esta linea  :

delayInMillis = 750 / (1 << (12 - TEMPERATURE_PRECISION));

te importaria explicarme que hace el operador "<<" que no lo encuentro explicacion por ningun lado

Un saludo

Marcial

Me respondo yo mismo, el << lo enconrtre  :*

Lamento preguntas tan choras, pero la ignorancia es muy atrevida

Go Up