Tempo di risposta One Wire su più ingressi digitali

Salve a tutti, mi sto cimentando con arduino da poco tempo e vorrei chiedervi una delucidazione;
ho collegato dei sensori di temperatura digitali DS18S20 con sistema one wire ad un ingresso digitale; il tempo di scrittura per sensore è poco meno di un secondo quindi se faccio una catena di 10 sensori, tra prima ed ultima lettura passano 10 secondi.
Ho fatto una prova mettendo più sensori su due bus one wire, ma il tempo totale di lettura non cambia e rimane 10 secondi.
E' inevitabile in quanto arduino "lavora" su un ingresso prima di passsare ad un altro, oppure ci sono soluzioni diverse per ridurre i tempi di lettura?

#include <OneWire.h>
 
float T1; // Valore di temperatura in °C dalla sonda DS18S20
float T2;
float T3;
float T4;

OneWire  ONE_WIRE_BUS(5); 
OneWire  ONE_WIRE_BUS1(10);
 
// Indirizzo della sonda DS18S20
// Nota: trova l'indirizzo della tua sonda col programma precedente e incollalo al posto di questo
  byte T_SENSOR1[8] = {0x10,0xFB,0x24,0x38,0x02,0x08,0x00,0xFB};
  byte T_SENSOR2[8] = {0x10,0x34,0x33,0x38,0x02,0x08,0x00,0x6D};
  byte T_SENSOR3[8] = {0x10,0x25,0x10,0x38,0x02,0x08,0x00,0xB7};
  byte T_SENSOR4[8] = {0x10,0xE9,0x38,0x38,0x02,0x08,0x00,0x93};
 
void setup()
  {
  Serial.begin(9600); // Inizializzo la porta seriale
  }
 
void writeTimeToScratchpad(byte* address)
  {
  ONE_WIRE_BUS.reset(); // Resetto il bus
  ONE_WIRE_BUS.select(address);   // Seleziono la mia sonda DS18S20
  ONE_WIRE_BUS.write(0x44,1);   // Richiamo la funzione di conversione temperatura (44h)
  // che posiziona il valore di temperatura nello scratchpad (comando Convert T)
  delay(1000);   // Attendo un secondo che la scrittura sia completa
  }
 
void readTimeFromScratchpad(byte* address, byte* data)
  {
  ONE_WIRE_BUS.reset();   // Resetto il bus
  ONE_WIRE_BUS.select(address);   // Seleziono la mia sonda DS18S20
  ONE_WIRE_BUS.write(0xBE); // Comando di lettura dello scratchpad (comando Read Scratchpad)
  for (byte i=0;i<9;i++)
    {
    data[i] = ONE_WIRE_BUS.read(); // Leggo i 9 bytes che compongono lo scratchpa
    }
  }

void writeTimeToScratchpad1(byte* address)
  {
  ONE_WIRE_BUS1.reset(); // Resetto il bus
  ONE_WIRE_BUS1.select(address);   // Seleziono la mia sonda DS18S20
  ONE_WIRE_BUS1.write(0x44,1);   // Richiamo la funzione di conversione temperatura (44h)
  // che posiziona il valore di temperatura nello scratchpad (comando Convert T)
  delay(1000);   // Attendo un secondo che la scrittura sia completa
  }
 
void readTimeFromScratchpad1(byte* address, byte* data)
  {
  ONE_WIRE_BUS1.reset();   // Resetto il bus
  ONE_WIRE_BUS1.select(address);   // Seleziono la mia sonda DS18S20
  ONE_WIRE_BUS1.write(0xBE); // Comando di lettura dello scratchpad (comando Read Scratchpad)
  for (byte i=0;i<9;i++)
    {
    data[i] = ONE_WIRE_BUS1.read(); // Leggo i 9 bytes che compongono lo scratchpad
    }
  }
 

float getTemperature(byte* address)
  {
  int tr;
  byte data[12];
  writeTimeToScratchpad(address); // Richiamo conversione temperatura
  readTimeFromScratchpad(address,data); // effettuo la lettura dello Scratchpad
  tr = data[0];   // Posiziono in TR il byte meno significativo
  // il valore di temperatura è contenuto nel byte 0 e nel byte 1
 
  // Il byte 1 contiene il segno
  if (data[1] > 0x80) // Se il valore è >128 allora la temperatura è negativa
    {
    tr = !tr + 1; // Correzione per complemento a due
    tr = tr * -1; // Ottengo il valore negativo
    }
 
  int cpc = data[7];   // Byte 7 dello scratchpad: COUNT PER °C (10h)
  int cr = data[6];   // Byte 6 dello scratchpad: COUNT REMAIN (0Ch)
  tr = tr >> 1;   // Rilascio il bit 0 come specificato dal datasheet per avere una risoluzione > di 9bit
 
  // Calcolo la temperatura secondo la formula fornita sul datasheet:
  // TEMPERATURA = LETTURA - 0.25 + (COUNT PER °C - COUNT REMAIN)/(COUNT PER °C)
 
  return tr - (float)0.25 + (cpc - cr)/(float)cpc;
  }
 

float getTemperature1(byte* address)
  {
  int tr1;
  byte data1[12];
  writeTimeToScratchpad1(address); // Richiamo conversione temperatura
  readTimeFromScratchpad1(address,data1); // effettuo la lettura dello Scratchpad
  tr1 = data1[0];   // Posiziono in TR il byte meno significativo
  // il valore di temperatura è contenuto nel byte 0 e nel byte 1
 
  // Il byte 1 contiene il segno
  if (data1[1] > 0x80) // Se il valore è >128 allora la temperatura è negativa
    {
    tr1 = !tr1 + 1; // Correzione per complemento a due
    tr1 = tr1 * -1; // Ottengo il valore negativo
    }
 
  int cpc1 = data1[7];   // Byte 7 dello scratchpad: COUNT PER °C (10h)
  int cr1 = data1[6];   // Byte 6 dello scratchpad: COUNT REMAIN (0Ch)
  tr1 = tr1 >> 1;   // Rilascio il bit 0 come specificato dal datasheet per avere una risoluzione > di 9bit
 
  // Calcolo la temperatura secondo la formula fornita sul datasheet:
  // TEMPERATURA = LETTURA - 0.25 + (COUNT PER °C - COUNT REMAIN)/(COUNT PER °C)
 
  return tr1 - (float)0.25 + (cpc1 - cr1)/(float)cpc1;
  }
 
// Conversione da Fahrenheit a Celsius
float f2c(float val)
  {
  float aux = val - 32;
  return (aux * 5 / 9);
  }
 
// COnversione da Celsius a Fahrenheit
float c2f(float val)
  {
  float aux = (val * 9 / 5);
  return (aux + 32);
  }
 
void loop()
  {
   // Lettura temperatura (la DS18S20 fornisce il valore in °C)
  T1 = getTemperature1(T_SENSOR1);
  T2 = getTemperature(T_SENSOR2);
  T3 = getTemperature1(T_SENSOR3);
  T4 = getTemperature(T_SENSOR4);
 
  
 
  // Stampo i risultati su terminale seriale
 
  Serial.print("   Temperatura 1: ");
  Serial.print(T1,2);
  Serial.print("   Temperatura 2: ");
  Serial.print(T2,2);
  Serial.print("   Temperatura 3: ");
  Serial.print(T3,2);
  Serial.print("   Temperatura 4: ");
  Serial.print(T4,2);
  Serial.println(" C");
  // Attendo 30 secondi per ricominciare
  delay(30000);
  }

E' così: il micro non è dotato di multitasking hardware per cui il codice viene eseguito in cascata, un'istruzione dopo l'altra.

Grazie mille per la risposta precisa e tempestiva.