// https://wokwi.com/projects/349517308198126162
// https://forum.arduino.cc/t/sensor-for-car-lift/1058371

# define trigPin 13
# define echoPin 12
# define led 11
# define rele 10
# define buzzer 9

int buzzerState = 0;

unsigned long currentMillis;
unsigned long previousMillis;

const long interval = 777;    // was 5000 - life too short!

void setup()
{
  Serial.begin (115200);  // it's 2022, not 1984

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(led, OUTPUT);
  pinMode(rele, OUTPUT);

  pinMode(buzzer, OUTPUT);
}

void loop()
{
  long distance;

  distance = getEcho();
  currentMillis = millis();

// check distance, set LED and relay and maybe launch a tone burst
  if (distance < 10) { 
    if (buzzerState == 0) {
      tone(buzzer, 1000); // hearing this better at 1000 Hz
      buzzerState = 1;    // no more tone until we've seen the distnace go > 10
      previousMillis = currentMillis;
    }

    digitalWrite(led, HIGH);
    digitalWrite(rele, LOW);
  }
  else {
//    noTone(buzzer);  would immediately stop buzzer
    buzzerState = 0;      // allow again the tone to trigger on

    digitalWrite(led, LOW);
    digitalWrite(rele, HIGH);
  }

// always check to see if a tone burst has gone on long enough  
  if (currentMillis - previousMillis >= interval)
      noTone(buzzer);

// print the distance occasionally
  static unsigned long lastPrint;
  if (currentMillis - lastPrint > 777) {
    Serial.print(distance);
    Serial.println(" cm");

    lastPrint = currentMillis;
  }
//  delay(50); no delay is necessary. loop() is running at full speed.
}

long getEcho()
{
  long duration, distance;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);

  distance = (duration / 2) / 29.1;

  return distance;
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
bz1:1
bz1:2
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
led1:A
led1:C
led2:A
led2:C
r2:1
r2:2
r3:1
r3:2