/*Based on Ignacio Miró Orozco
  (Professor at Polytechnic University of Valencia)code*/

/*This program simulates parking sistem of a car
  turning on and turning off a sound with more or
  less frequency in function of distance*/

#define echoPin 5 // Echo Pin
#define trigPin 4 // Trigger Pin
#define buzzer 11    // Buzzer

long distance;
long times;
int del;

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

void loop() {
  digitalWrite(trigPin, LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);

  times = pulseIn(echoPin, HIGH);
  distance = int(0.017 * times);

  Serial.print("Distancia ");
  Serial.print(distance);
  Serial.println(" cm");

  if (distance <= 20)  {
    if (distance >= 0 && distance <= 3)    del = 100;
    if (distance > 3  && distance <= 6)    del = 200;
    if (distance > 6  && distance <= 9)    del = 300;
    if (distance > 9  && distance <= 12)   del = 400;
    if (distance > 12 && distance <= 15)   del = 600;
    if (distance > 15)                    del = 800;
    tone(buzzer, 349);
    delay(del);
    noTone(buzzer);
    if (distance >= 3) delay(200);
  }
  else
  {
    delay(200);
    noTone(buzzer);
  }
}