//Connect the OLED Display to the Arduino Nano:
//OLED VCC to Arduino 5V
//OLED GND to Arduino GND
//OLED SDA to Arduino A4 (analog pin 4)
//OLED SCL to Arduino A5 (analog pin 5)
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
#define TRIG 2 // Trig pin of ultrasonic sensor connected to D2
#define ECHO 3 // Echo pin of ultrasonic sensor connected to D3
#define R 9 // Red LED connected to D9
#define G 10 // Green LED connected to D10
#define B 11 // Blue LED connected to D11
int distance = 0;
void setup() {
Serial.begin(9600); //slow baud rate of 9600 bits per second (bps).
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
display.begin(SSD1306_WHITE, 0x3C); // Address 0x3C for 128x32
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
// Measuring the distance
distance = getDistance();
// Display the distance on the OLED screen
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Distance: ");
display.print(distance);
display.print(" mm");
display.display();
// Control of the LEDs based on distance
if (distance >= 350) {
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
}
else if (distance >= 200 && distance < 350) {
digitalWrite(R, LOW);
digitalWrite(G, HIGH);
digitalWrite(B, LOW);
}
else if (distance >= 0 && distance < 200) {
digitalWrite(R, LOW);
digitalWrite(G, LOW);
digitalWrite(B, HIGH);
}
delay(100); // can be adjusted
}
int getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
return pulseIn(ECHO, HIGH) * 0.034 / 2;
}