How to make distance measurement using VL53L0X sensor and OLED display

 







            CODE 

#include <Wire.h>

#include <VL53L0X.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <MedianFilter.h>


// -------- OLED CONFIG --------

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 64

#define OLED_RESET -1


Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


// -------- SENSOR & FILTER --------

VL53L0X sensor;

MedianFilter filter(10, 0);


// -------- RANGE LIMIT (mm) --------

#define MAX_RANGE 2000


void setup()

{

  Serial.begin(9600);

  Wire.begin();


  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

    while (1);

  }


  display.clearDisplay();

  display.setRotation(2);

  display.setTextColor(SSD1306_WHITE);

  display.display();


  sensor.init();

  sensor.setTimeout(500);

}


// -------- DISPLAY DISTANCE --------

void displayDistance(int val)

{

  display.clearDisplay();

  display.setTextWrap(true);


  display.setTextSize(4);

  display.setCursor(0, 0);

  display.print(val);


  display.setTextSize(2);

  display.setCursor(0, 40);

  display.print("mm");


  display.display();

}


// -------- DISPLAY OUT OF RANGE (FULL WORD) --------

void displayOutOfRange()

{

  display.clearDisplay();


  display.setTextWrap(false);     // no line break

  display.setTextSize(2);        // 🔴 IMPORTANT: size 1

  display.setCursor(2, 25);     // center look

  display.print("OUT OF RNG");


  display.display();

}


void loop()

{

  int r = sensor.readRangeSingleMillimeters();


  if (sensor.timeoutOccurred() || r == 0 || r > MAX_RANGE) {

    Serial.println("**OUT OF RANGE**");

    displayOutOfRange();

    delay(200);

    return;

  }


  filter.in(r);

  int o = filter.out();


  Serial.print("Distance: ");

  Serial.print(o);

  Serial.println(" mm");


  displayDistance(o);

  delay(10);

}

Post a Comment

Previous Post Next Post

Contact Form