Tics y movimientos en servo aleatorios

Hola, soy nuevo por aquí y os comento llevo teniendo unos problemas de hace tiempo que no se como resolver y es que el servo no para de moverse aleatoriamente 1 o 2 grados como mucho pero bastantes veces este es mi codigo esta algo resumido porque es muy largo

#include <DallasTemperature.h>   //libreria para q funcion sonda tmp
#include <OneWire.h>             //libreria para q funcion sonda tmp

OneWire ourWire1(11);                              //declara pin de la sonda tmp
OneWire ourWire2(2);                               //declara pin de la sonda tmp
DallasTemperature sensors1 (&ourWire1);            //para funcionamiento de la sonda tmp
DallasTemperature sensors2 (&ourWire2);            //para funcionamiento de la sonda tmp


#include <Servo.h>
Servo servo;

int numerito = 0;
int pulsadorPin = 4;



void setup() {
  servo.attach(13);
  Serial.begin(9600);
  pinMode(pulsadorPin, INPUT);
  servo.write(155);                                     //posición inicial del servo
}


void loop() {
  int NUmcontador = digitalRead(pulsadorPin);        //tiene que in en el void loop sino no funciona
  int posser = servo.read();                         //tiene que in en el void loop sino no funciona

    sensors1.requestTemperatures();                    //solicita info de la sonda tmp              
    sensors2.requestTemperatures();                    //solicita info de la sonda tmp
    float temp1 = (sensors1.getTempCByIndex(0));
    float temp2 = (sensors2.getTempCByIndex(0));       
    delay(10);
    
  Serial.println(posser);


  if (NUmcontador == 1) {                    //este if va a detectar cuando se pulsa el pulsador
    numerito++;                                      // y suma uno a esta variable
    delay(400);                                     //tiempo suficiente para que no detecte doble pulsacion
  }
}

he llegado a la conclusión de que los siguientes comandos son los causantes de esto:

sensors1.requestTemperatures();                    
sensors2.requestTemperatures();                    
float temp1 = (sensors1.getTempCByIndex(0));
float temp2 = (sensors2.getTempCByIndex(0)); 

ya que cuando los quito el servo se comporta normal pero no puedo prescindir de ellos ya que necesito usar 2 sensores de temperatura

Busca un hilo en el que acaban de sugerir eluso de la librería Non-Blocking para el DS18B20

entonces utilizando otra librería compatible puede que se solucione?

Justamente obviaste en el código la parte del manejo de los servos, difícil deducir qué puede estar ocurriendo.

Damos por cierto que el pin 4 (el del botón) tiene una resistencia a masa, ¿es así?

La librería DallasTemperature espera durante 750 mseg. a que el sensor devuelva la lectura, eso puede traer problemas con los servos, y tu tienes 2 sensores... :man_facepalming:t2:
Instala la librería NonBlockingDallas que encuentras en el Administrador de Bibliotecas en lugar de DallasTemperature.
Creo que tienes que modificar levemente el código pero vale la pena.

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