DS18B20 e Motore Stepper nello stesso momento

Buongiorno,
ho cercato a lungo e a fondo nell’etero e nel forum, quindi se mi direte che l’argomento è stato già trattato, sarà stata una mia disattenzione.
Detto questo, sto tirando su un progetto per una macchina in cui deve leggere 3 sonde DS18B20, muovere un motore stepper nema23 (con driver DM860), accendere luci, elttrovalvole ecc…
Concentrandoci sulle sonde e motore, ho capito che le sonde devono avere un tempo di “ritardo” per restituire all’arduino il valore della temperatura: a me questo ritardo dà molto fastidio perchè devo far ruotare il motore stepper in modo continuo. Ho già ridotto il tempo impostando la risoluzione delle sonde a 9bit, e poi aggiornando/chiedendo le temperature non ad ogni ciclo ma ogni 3sec, ma ovviamente ogni 3sec il motore si pialla per 200ms.

Ho tre temperature: sonda_CAMERA, sonda_BOILER, sonda_RADIATORE. L’ho volute mettere sue tre pin diversi (rinunciando alla comodità del OneWire) perché se si danneggiasse uno, avrei il problema dell’indirizzo (e non mi andava di creare codice per abbinare l’indirizzo alla specifica temperatura). Non credo che questa scelta dia più ritardo.

Negli esempi di DallasTemperature si trovano degli sketch che assicurano una lettura NO-BLOCKING ma la realtà è che non è così ma effettivamente il delay è stato ulteriormente ridotto.

La domanda è: E’ POSSIBILE ELIMINARE TOTALMENTE QUESTO RITARDO DOVUTO ALL’ACQUISIONE DATI TEMPERATURA DA TRE SONDE IN MODO DA NON BLOCCARE IL CICLO DELL’ISTRUZIONI DEL LOOP?

Vi posto il codice riassuntivo in riferimento alle sonde e al motore.

**** DEFINE e INCLUDE ****

// LIBRERIE -------------------------------------------------------------------------
#include <AccelStepper.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// DEFINE ----------------------------------------------------------------------------
//---------------------------- INPUT
#define sens_temp_camera 38
#define sens_temp_acqua_radiatore 40
#define sens_temp_acqua_boiler 39

//---------------------------- pin STEPPER
#define STEPPER_STEP_PIN 2
#define STEPPER_DIR_PIN 3

AccelStepper stepper(1, STEPPER_STEP_PIN, STEPPER_DIR_PIN);

OneWire sensTC(sens_temp_camera);
OneWire sensTR(sens_temp_acqua_radiatore);
OneWire sensTB(sens_temp_acqua_boiler);

DallasTemperature T_camera(&sensTC);
DallasTemperature T_radiatore(&sensTR);
DallasTemperature T_boiler(&sensTB);

float TC, TR, TB;

**** SETUP ****

void setup() {

  Serial.begin (9600);
  
  T_camera.begin();
  T_radiatore.begin();
  T_boiler.begin();

  T_camera.setResolution(9);
  T_radiatore.setResolution(9);
  T_boiler.setResolution(9);

  T_camera.requestTemperatures();
  T_radiatore.requestTemperatures();
  T_boiler.requestTemperatures();

  stepper.setMaxSpeed(10000);
  lettura = millis();


}

**** LOOP ****

void loop() {
  
  if ((millis() - lettura) >= 3000) {

    T_camera.setResolution(9);
    T_radiatore.setResolution(9);
    T_boiler.setResolution(9);

    T_camera.setWaitForConversion(false);
    T_camera.requestTemperatures();
    T_camera.setWaitForConversion(true);

    T_radiatore.setWaitForConversion(false);
    T_radiatore.requestTemperatures();
    T_radiatore.setWaitForConversion(true);

    T_boiler.setWaitForConversion(false);
    T_boiler.requestTemperatures();
    T_boiler.setWaitForConversion(true);

    TC = T_camera.getTempCByIndex(0);
    TR = T_radiatore.getTempCByIndex(0);
    TB = T_boiler.getTempCByIndex(0);

    Serial.println("Camera: " + String(TC) + "\tRadiatore: " + String(TR) + "\tBoiler: " + String(TB));
    
  lettura = millis();
  }

  
  stepper.setSpeed(3500);
  stepper.runSpeed();

}

Grazie per ogni risposta!