#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Define pins for Potentiometer, LEDs, and LCD
int trigPin = 5;
int echoPin = 18;
int potPin = 32;
int led[] = { 12, 13, 14, 15, 16, 17, 23, 19 };
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte customChar1[8] = {
0B01110,
0B11111,
0B00001,
0B01110,
0B10001,
0B00001,
0B01111,
0B10001
};
byte customChar2[8] = {
0B00000,
0B00100,
0B01010,
0B00110,
0B00010,
0B01010,
0B00110,
0B00010
};
byte customChar3[8] = {
0B01110,
0B10000,
0B01000,
0B01000,
0B01000,
0B01000,
0B01100,
0B01100
};
byte customChar4[8] = {
0B00010,
0B00010,
0B00000,
0B01010,
0B10101,
0B10001,
0B10101,
0B11001
};
void setup() {
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize ultrasonic sensor pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
for (int i = 0; i < 8; i++) {
pinMode(led[i], OUTPUT);
}
lcd.createChar(0, customChar1);
lcd.createChar(1, customChar2);
lcd.createChar(2, customChar3);
}
void ledPattern1() {
digitalWrite(led[0], 1);
digitalWrite(led[1], 1); //1
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //2
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //3
digitalWrite(led[1], 0);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //4
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //5
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 0); //6
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 0); //7
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //8
digitalWrite(led[1], 0);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //9
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 0); //10
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
}
void ledPattern2() {
digitalWrite(led[0], 0);
digitalWrite(led[1], 0); //1
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //2
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //3
digitalWrite(led[1], 1);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //4
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //5
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 0);
delay(500);
digitalWrite(led[0], 1); //6
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 0);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //7
digitalWrite(led[1], 1);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 0);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //8
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 0);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 0); //9
digitalWrite(led[1], 0);
digitalWrite(led[2], 0);
digitalWrite(led[3], 0);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
digitalWrite(led[0], 1); //10
digitalWrite(led[1], 1);
digitalWrite(led[2], 1);
digitalWrite(led[3], 1);
digitalWrite(led[4], 1);
digitalWrite(led[5], 1);
digitalWrite(led[6], 1);
digitalWrite(led[7], 1);
delay(500);
}
void loop() {
long duration, inches, cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
inches = duration / 74 / 2;
cm = duration / 29 / 2;
lcd.setCursor(0, 0);
lcd.print(cm);
lcd.setCursor(5, 0);
lcd.print("cm");
delay(100);
if (cm < 35) {
// Turn off all LEDs
for (int i = 0; i < 8; i++) {
digitalWrite(led[i], LOW);
}
} else if (cm >= 35) {
ledPattern1();
} else if (cm >= 40) {
ledPattern2();
} else {
// Turn on all LEDs and display message
for (int i = 0; i < 8; i++) {
digitalWrite(led[i], HIGH);
}
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.write(byte(2));
delay(5000);
}
lcd.clear();
}