HC-SR04 Doesn't detect distances.

Hi, I have an HC-SR04 ultrasound sensor, I've copied this code (Sorry, it's in Spanish)

long distancia;
long tiempo;
void setup(){
  Serial.begin(9600);
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
}

void loop(){
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.println("Distancia ");
  Serial.println(distancia);
  Serial.println(" cm");
  delay(1000);
}

But i get always 0 cm. Sometimes it works correctly but stops suddenly.
What can be the problem?
Thanks

This is untested, but try the following code :

long distancia;
long tiempo;

void setup()
{
  Serial.begin(9600);
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(100);
}

void loop()
{

  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  digitalWrite(9,LOW);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia= tiempo / 29.1 / 2; /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.print("Distancia ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(1000);
}

Distance is in cm - adjust as needed.

Thanks, but it stays on 0cm :frowning:

I tested the code I gave you and it definitely works.

Did you copy/paste the code I gave you or did u edit your original code?
If you edited, then I suggest you copy/paste.

Alternatively you must have something wrong in your setup.

Have you got the connections to DO8 and DO9 the right way round?

If you can't find the problem, I suggest you post a photo of your setup.

Both the OP's code and asic's code work on my hc-sr04. This is a wiring/hardware problem. I have had problems in the past when the ground connection of the hc-sr04 was not solid.

It must be a hardware problem :frowning:
Thanks!