#include const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7; LiquidCrystal lcd(12, 11, 10, 9, 8, 7); const int buzzer = 4; const int motor1Pin = 3; // Motor 1 control pin (lid opening) const int motor2Pin = 2; // Motor 2 control pin (lid closing) bool lidOpen = false; // Lid status unsigned long openTime = 0; // Time when the lid opened const int songspeed = 1.5; #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_G5 784 #define NOTE_A5 880 #define NOTE_B5 988 const int buzPin = 4; const int trigPin = 6; const int echoPin = 5; bool close = false; int check_dist = 0; long duration; int distance; int previous_dist; unsigned long previousTime = 0; int notes[] = { //Note of the song, 0 is a rest/pulse NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, 0, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, 0, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_D5, NOTE_E5, NOTE_A4, 0, NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, 0, NOTE_C5, NOTE_A4, NOTE_B4, 0, NOTE_A4, NOTE_A4, //Repeat of first part NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, 0, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, 0, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_D5, NOTE_E5, NOTE_A4, 0, NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, 0 }; //*** int duration1[] = { //duration of each note (in ms) Quarter Note is set to 250 ms 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 250, 125, 125, 250, 125, 250, 125, 125, 125, 250, 125, 125, 125, 125, 375, 375, 250, 125, //Rpeat of First Part 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 250, 125, 125, 250, 125, 250, 125, 125, 125, 250, 125, 125, 125 }; void setup() { lcd.begin(16, 2); pinMode(motor1Pin, OUTPUT); pinMode(motor2Pin, OUTPUT); pinMode(buzPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); lcd.print("Hello World!"); delay(1000); lcd.clear(); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); unsigned long currentTime = millis(); distance = duration * 0.034/2; if (distance <= 20 && !lidOpen) { // Open the lid lidOpen = true; openTime = millis(); // Record the time when the lid opened digitalWrite(motor1Pin, HIGH); noTone(buzPin); } else if (distance > check_dist && lidOpen) { // Check if the lid should be closed if (millis() - openTime >= 4000) { // Close the lid after 4 seconds lidOpen = false; digitalWrite(motor1Pin, LOW); digitalWrite(motor2Pin, HIGH); // Polarize Motor 2 to close the lid delay(10); digitalWrite(motor2Pin, LOW); // Turn off Motor 2 after 1 second if (currentTime - previousTime >= 1000) { // Play melody when lid closes for (int i = 0; i < 76; i++) { int wait = duration1[i] * songspeed; tone(buzzer, notes[i], wait); delay(wait); } previousTime = currentTime; delay(500); } noTone(buzPin); } } // Display distance on LCD lcd.setCursor(0, 0); for (int i = 0; i < 9; i++){ lcd.print("Distance:"[i]); delay(50); } delay(15); previous_dist = distance; if(previous_dist < 99){ lcd.setCursor(11, 0); lcd.print(" "); lcd.setCursor(9, 0); lcd.print(distance); } else{ lcd.setCursor(9, 0); lcd.print(distance); } delay(100); lcd.setCursor(13, 0); lcd.print("cm"); delay(1000); }