Problema Hc-Sr04

Salve , ho un problema con Hc-SR04 con questo codice se mi pongo davanti al sensore fino a 120 cm funziona , superati inizia a darmi sempre fuori portata .

const int triggerPort = 9;
const int echoPort = 10;
const int led = 13;
void setup() {
  pinMode(triggerPort, OUTPUT);
  pinMode(echoPort, INPUT); 
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  Serial.print( "Sensore Ultrasuoni: ");
}
 
void loop() {
 
  digitalWrite( triggerPort, LOW );
  digitalWrite( triggerPort, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( triggerPort, LOW );
 
  long durata = pulseIn( echoPort, HIGH );
 
  long distanza = 0.034 * durata / 2;
 
  Serial.print("distanza: ");

  if( durata > 57000 ){
    Serial.println("Fuori portata   ");
  }
  else{ 
    Serial.print(distanza); 
    Serial.println(" cm     ");
  }

allora ho provato con la libreria NewPing , ma anche con questa ho un problema ogni tanto mi rileva 0cm di distanza con un oggetto anche se esso è presente

 #include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 300 

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 

void setup() {
  Serial.begin(115200); 
}

void loop() {
  delay(90); 
  unsigned int uS = sonar.ping();
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); 
  Serial.println("cm");
}

come posso risolvere ?

Nel primo listato hai usato per la distanza il tipo long: prova ad usare unsigned long.