#define TRIG_PIN 10
//US Sensor TRIG PIN = D10
#define ECHO_PIN 11
//US Sensor's ECHO PIN = D11
//US Sensor & OLED Display @5V
//OLED's SDA=A4
//OLED's SCL=A5
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
int distance_mm;
unsigned long measured_time;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 Allocation Failed"));
for (;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(32, 12);
display.print("STARTING...");
display.display();
delay(2000);
}
void loop() {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(20);
digitalWrite(TRIG_PIN, LOW);
measured_time = pulseIn(ECHO_PIN, HIGH);
distance_mm = (int)((float)measured_time / 5.83);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(8, 0);
display.setTextSize(2);
if (distance_mm < 100) display.print(" ");
if (distance_mm < 10) display.print(" ");
display.print(distance_mm);
display.setTextSize(1);
display.setCursor(97, 8);
display.print("mm");
display.drawLine(8, 27, 108, 27, WHITE); // 1000mm Bar graph
display.fillRect(8, 28, 8 + int(distance_mm + 0.5) / 10, 30, WHITE);
display.drawLine(8, 31, 108, 31, WHITE);
display.display();
delay(200);
}