Problema con HC-SR04

Buenas noches a todos, soy un poco novato en este foro y perdonen si este hilo no va aquí o ya existe pero no lo encuentro.
Tengo un sensor HC-SR04 programado de esta manera:

long distancia;

long tiempo;

void setup(){
 Serial.begin(9600);
 pinMode(11, OUTPUT); 
 pinMode(12, INPUT); 
}

void loop(){
 digitalWrite(11,LOW); 
 delayMicroseconds(5);
 digitalWrite(11, HIGH); 
 delayMicroseconds(10);
 tiempo=pulseIn(12, HIGH); 
 distancia= int(0.017*tiempo); 
 Serial.println("Distancia ");
 Serial.println(distancia);
 Serial.println(" cm");
 delay(1000);
}

El problema es que cuando intento medir distancias superiores a 70 cm aproximadamente, o cuando detecta una superficie estraña ( algo curvo) marca una lectura de 0cm, pero se queda ahí, mandando esa lectura aún que varie la distancia ( le pongo la mano delante ), y tengo que desconectar y conectar el pin del voltaje para que vuelva a medir.
Por debajo de los 70 cm aproximadamente va perfecto.

?Alguna idea?

fijate si te ayuda este codigo

/*
Sensor de proximidad y al ser inferior a 10cm 
envia un pulso de alarma por  el pin 13

 HC-SR04 conexiones:
  VCC al arduino 5v 
  GND al arduino GND
  Echo al Arduino pin 6 
  Trig al Arduino pin 7
  
Descargar planos de conexiones en http://elprofegarcia.com/
 */
 
#define Pecho 6
#define Ptrig 7
#define Micro 8
long duracion, distancia;   
 
void setup() {                
  Serial.begin (9600);       // inicializa el puerto seria a 9600 baudios
  pinMode(Pecho, INPUT);     // define el pin 6 como entrada (echo)
  pinMode(Ptrig, OUTPUT);    // define el pin 7 como salida  (triger)
  pinMode(13, 1);            // Define el pin 13 como salida
  pinMode(8, 1);
  }
  
void loop() {
  
  digitalWrite(Ptrig, LOW);
  delayMicroseconds(2);
  digitalWrite(Ptrig, HIGH);   // genera el pulso de triger por 10ms
  delayMicroseconds(10);
  digitalWrite(Ptrig, LOW);
  
  duracion = pulseIn(Pecho, HIGH);
  distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
  
  if (distancia >= 500 || distancia <= 0){  // si la distancia es mayor a 500cm o menor a 0cm 
    Serial.println("---");                  // no mide nada
  }
  else {
    Serial.print(distancia);           // envia el valor de la distancia por el puerto serial
    Serial.println("cm");              // le coloca a la distancia los centimetros "cm"
    digitalWrite(13, 0);               // en bajo el pin 13
    digitalWrite(8,0);                 // el pin 8 en bajo
  }
  
   if (distancia <= 10 && distancia >= 1){
    digitalWrite(13, 1);     // en alto el pin 13 si la distancia es menor a 10cm
    digitalWrite(8,1);
    Serial.println("Alarma.......");         // envia la palabra Alarma por el puerto serial
  }
  delay(400);                                // espera 400ms para que se logre ver la distancia en la consola
}

es facil, si te ayuda cambia el titulo de tu post a (RESUELTO)

La rueda ya está inventada, ¿porqué os complicáis la vida queriendo volver a inventarla? Existen librerías que hacen esta función ala perfección. Un ejemplo:

http://playground.arduino.cc/Code/NewPing

Gracias a ambos, carmeloco, ya probé a usar las librerias, pero como me daba ese error intenté hacerlo yo mismo, y resKte aún con tu código me sigue pasando… ¿Será cosa del sensor?
Gracias!

Holaa gonzalo . Elimina el delay y mira la diferencia

ya si no anda ni con las librerias de arduino y con ninguno de los dos codigos, es seguro que tu sensor esta funcionando mal ..... no creo que este sucio, pero verificalo ..... sino a reembolsar por garantia y ya ... saludos 8)

Saludos
Coloca una foto de como esta cableado tu circuito. Puede ser que no este bien cableado.
Ademas toma un multimetro y mide si le llegan los 5V.

Gracias a todos, esta solucionado, por desgracia mi sensor esta roto por algo, me han dejado otro y funciona a la perfección.