Comportamento del sensore Ping

Buongiorno durante la realizzazione del mio progetto
sto avendo strani problemi di configurazione a livello software del sensore ad ultrasuoni.

Non riesco ad avere una lettura precisa.

Non sò se dipenda proprio dal sensore in questione, oppure sbaglio io nel calcolare qualcosa.

vi mostro la parte interessata.

void distanza()
{
  
  long dur;
  long dis;

  digitalWrite(out,LOW);
  delayMicroseconds(2);

  digitalWrite(out,HIGH);
  delayMicroseconds(10);
  digitalWrite(out,LOW);

  dur=pulseIn(in,HIGH);

  long cm = microsecondsToCentimeters(dur);
  long mm = microsecondsToMillimeters(dur);
  //lcd.clear();
  lcd.setCursor(0,1);
  Serial.println(mm);
  lcd.print(mm);
  finale = mm;
  
  delay(100);
  
  
}



long microsecondsToMillimeters(long microseconds)
{

// 340 m/s
// 34000 cm/s
// 340000 mm/s
// 340 mm/ms
// 0.34 mm/micros

// 1/0.34 mm/micros = 2.9411 micros/mm

return microseconds / 2.9411 / 2;
}

Il problema è che non mi legge affatto i millimetri.
legge dei numeri ma non sono precisi.

Mentre invece per quanto riguarda i centimetri funziona perfettamente.
ho misurato anche con un metro e corrisponde.

Cosa sbaglio in tutto ciò?

Parere personale FORSE SBAGLIO :), ma mi viene da pensare questo...

la misura di millimetri sono intervalli di tempo molto brevi, se pulsein() "sbaglia" di qualche microsecondo o se il sensore commette un errore di qualche microsecondo, ci si ritrova con errori di millimetri, Ma nella logica del codice non ci sono errori, deve essere caratteristiche hardware non risolvibili.

Thejuster:
Buongiorno

Ti reinvitiamo a presentarti, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.