Problema con un sensor ds18b20 y un encoder digital

Buen día, estoy haciendo un programa de un control ON / OFF midiendo la temperatura con un sensor ds18b20 y colocando el setpoint de la temperatura con un encoder , aun falta crear algunas partes del codigo pero mi duda es: El encoder da valores correctamente empezando de 20 hasta 60 pero porque cuando descomento aguatemp.requestTemperatures(); y agua = aguatemp.getTempCByIndex(0); para obtener los valores del sensor e imprimirlo en el monitor serie con Serial.print(agua); el encoder empieza a fallar es decir no da valores o da solo un valor girando varias veces, muchisimas gracias compañeros!

//INCLUIR LIBRERIAS

#include <OneWire.h>  //Incluimos libreria del sensor DS18B20
#include <DallasTemperature.h> //Incluimos libreria del sensor DS18B20

OneWire ourWire(13);   //Establecemos que utlizaremos el pin 13
DallasTemperature aguatemp(&ourWire); //DecLaramos la variable aguatemp

//LIBRERIAS ENCODER

#include <Arduino.h>
#include <SimpleEncoder.h>

//VARIABLES

float agua;
int relay = 8;
int relay2 = 9;
int palrele = 0;
int palrele2 = 0;
int ledverdeON = 6;
int ledrojoOFF = 7;

int ledazul = A1;
int lednaranja= A2;
int ledrojo = A3;
int estado = 0;

// VARIABLES ENCODER

const int BTN = 10;
const int encA = 11;
const int encB = 12;
long startValue = 0;
long lowerValue = 20;
long upperValue = 60;

SimpleEncoder encoder(BTN, encA, encB, startValue, lowerValue, upperValue);

void setup() 
{
  pinMode(relay,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(ledverdeON, OUTPUT);
  pinMode(ledrojoOFF, OUTPUT);

  Serial.begin(9600);		
}

void loop() 
{
  // ENCODER DIGITAL
    if (encoder.CHANGING) 
    {
        Serial.println("Current value is: " + String(encoder.VALUE));
    }

  //OBTENEMOS TEMPERATURA DEL AGUA
  //aguatemp.requestTemperatures();
  //agua = aguatemp.getTempCByIndex(0);
  //Serial.print("Temperatura Real: ");
  //Serial.println(agua);
  //Serial.println("");

}

Es muy probable que la librería DallasTemperature sea bloqueante, entonces hasta que no retorna un valor no deja que se haga nada más.
Tendrías que revisar el código de la librería en cuestión.

De ser así podrías usar para el manejo del encoder alguna librería que trabaje con interrupciones como EncoderStepCounter.

Agrego: Revisé la librería y efectivamente espera, dependiendo de la resolución, entre 94 y 750 mseg. a que se realice la conversión del valor leído por el sensor. Claramente va a interferir a la "modesta" SimpleEncoder

Porque no usas esta librería para el encoder en especial cuando usa interrupciones.
GitHub - PaulStoffregen/Encoder: Quadrature Encoder Library for Arduino de Paul Stoffregen

Y esta libreria para el Dallas que no es bloqueante

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.