const byte trigPin = 13;
const byte echoPin = 12;
const byte buzzerPin = 27;
byte ledPins[] = { 15, 2, 4, 5, 18, 19, 21, 22, 23, 14 };
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
for (int i = 0; i < sizeof(ledPins); i++) {
pinMode(ledPins[i], OUTPUT);
}
indicatorTest();
}
void loop() {
int dist = getDist();
indicator(dist);
delay(100);
}
void indicatorTest() {
for (int i = 0; i < sizeof(ledPins); i++) {
digitalWrite(ledPins[i], HIGH);
delay(100);
}
for (int i = sizeof(ledPins)-1; i >= 0; i--) {
digitalWrite(ledPins[i], LOW);
delay(100);
}
}
void ledHigh(byte ledCount) {
for (int i = 0; i < ledCount; i++) {
digitalWrite(ledPins[i], HIGH);
delay(10);
}
for (int i = ledCount-1; i >= 0; i--) {
digitalWrite(ledPins[i], LOW);
delay(10);
}
}
void buzzer() {
for (int i = 0; i < 2; i++) {
digitalWrite(buzzerPin, HIGH);
delay(2);
digitalWrite(buzzerPin, LOW);
delay(2);
}
}
void indicator(int dist) {
if (dist <= 150 && dist > 135) {
ledHigh(1);
} else if (dist <= 135 && dist > 120) {
ledHigh(2);
} else if (dist <= 120 && dist > 105) {
ledHigh(3);
} else if (dist <= 105 && dist > 90) {
ledHigh(4);
} else if (dist <= 90 && dist > 75) {
ledHigh(5);
} else if (dist <= 75 && dist > 60) {
ledHigh(6);
} else if (dist <= 60 && dist > 45) {
ledHigh(7);
} else if (dist <= 45 && dist > 30) {
ledHigh(8);
} else if (dist <= 30 && dist > 15) {
ledHigh(9);
} else if (dist <= 15 && dist > 0) {
ledHigh(10);
} else {
ledHigh(0);
}
if (dist < 150) {
int buzzerInterval = map(dist, 0, 149, 0, 1000);
buzzer();
delay(buzzerInterval);
}
}
int getDist() {
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long int t = pulseIn(echoPin, HIGH);
float v = 0.034;
long int d = (v*t)/2;
return d;
}