Sensore ultrasuoni HC-SR04 rilevamenti incostanti

Ciao a tutti,
praticamente sto provando il sensore ad ultrasuoni e sto cercando di fare in modo che da 3 cm a 45 cm un led si illumini in proporzione alla distanza (vicino, luminoso; distante, meno luminoso).
Il problema sta nel fatto che è come se leggesse distanze a caso. Non si stabilizza mai ed il led non ha mai luminosità costante, indicandomi come se le distanze cambiassero istantaneamente.
Il sensore è a sbalzo sul tavolo, al limite della breadboard, quindi ho limitato le interferenze.
Cosa può essere? Per completezza vi posto il codice. Grazie infinite.

int trigg = 9;
int eco = 10;
int led = 11;


void setup() {

pinMode (trigg, OUTPUT);
pinMode (eco, INPUT);
pinMode (led, OUTPUT);

}

void loop() {

digitalWrite (trigg,LOW);
delayMicroseconds (10);
digitalWrite (trigg, HIGH);
delayMicroseconds (5);
digitalWrite (trigg, LOW);

long tempo = pulseIn (eco,HIGH);
if (tempo > 2647 || tempo < 176) { digitalWrite (led, LOW);}

if (tempo <= 2647 && tempo >= 176){
 long r = (0,034*tempo/2);
 int r2 = 45-r;

  int ledval = map(r2,0,30,0,255);
  analogWrite (led, ledval);
  delay(150);
  }
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Perchè usi la pulseIn() ? Esistono librerie ben fatte per quel sensore, tipo la NewPing.

Scusami, ora mi sono presentato. Comunque avevo letto su un tutorial di usare quella funzione, userò la NewPing. Per curiosità.. quale sarebbe la differenza?

Ho usato la libreria NewPing e ora mi dice che non può compilarlo :o
mi dice "exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno."

Rimetto il codice magari ho sbagliato qualcosa.

#include <NewPing.h>

#define trigg 9
#define eco 10
#define led 11
#define distanzamax 100


NewPing sonar(trigg,eco,distanzamax);

void setup() {

pinMode (led, OUTPUT);

}

void loop() {

unsigned int uSdist = sonar.ping();
unsigned int r = uSdist/US_ROUNDTRIP_CM;
unsigned int r2 = 100-r;
  int ledval = map(r2,0,100,0,255);
  analogWrite (led, ledval);
  delay(50);
}

Grazie per l'aiuto!