Project 07
Ultrasonic — distance LEDs
The code.
//Declare
// US Pins
const int TRIG_PIN = 12; // Start burst
const int ECHO_PIN = 11; // Return value
// Led pins
const int LED_RED = 5;
const int LED_YELLOW = 4;
const int LED_GREEN = 3;
const int LED_BLUE = 2;
//Setup
void setup() {
// Init serial comm
Serial.begin(9600); // Run at 9600 bits per second
// Ultrasonic pin modes
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Led pin modes
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
allLedsOff();
}
//Run
void loop() {
// Get Distance
trigUltraSonic(); // Ping Ultrasonic Sensor
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Stopwatch duration
float distance = duration * 0.0343 / 2.0; // Distance calculation
printDistance(distance); // Print distance to Serial
// Light Leds
allLedsOff(); // Reset leds
if (duration == 0 || distance <= 2) { // Sensor timeout or Blind
digitalWrite(LED_BLUE, HIGH);
}
else lightLed(distance); // Show distance
// - else - loop reset leds
// - distance > 50 cm, LEDs will remain off.
delay(60); // Small stability delay between readings
}
//Logic
void trigUltraSonic(){
// Clear
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// Triger
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
}
void printDistance(int objDistance){
Serial.print("Distance: ");
Serial.print(objDistance);
Serial.println(" cm");
}
void lightLed(int objDistance){
if (objDistance > 2 && objDistance < 20) { // Under - up to 20 cm
digitalWrite(LED_YELLOW, HIGH);
}
else if (objDistance >= 20 && objDistance <= 30) { // Sweetspot - 20 to 30 cm
digitalWrite(LED_GREEN, HIGH);
}
else if (objDistance > 30 && objDistance <= 50) { // Over - 30 to 50 cm
digitalWrite(LED_RED, HIGH);
}
}
void allLedsOff(){
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
}