#include <Wire.h> // Librería para la comunicación I2C, necesaria para conectar el OLED
#include <Adafruit_GFX.h> // Librería base para gráficos, utilizada por la pantalla OLED
#include <Adafruit_SSD1306.h> // Librería específica para controlar la pantalla OLED SSD1306
#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED en píxeles
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED en píxeles
// Declaración para un display SSD1306 conectado por I2C (pines SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Pines para el sensor de ultrasonido
const int trigPin = 5; // Pin de disparo
const int echoPin = 18; // Pin de eco
// Definiciones para el cálculo de distancia
#define SOUND_SPEED 0.034 // Velocidad del sonido en cm/µs
#define CM_TO_INCH 0.393701 // Conversión de cm a pulgadas
long duration; // Duración de la señal de eco
int distanceCm; // Distancia medida en cm
int distanceInch; // Distancia medida en pulgadas
void setup() {
Serial.begin(115200); // Inicializa la comunicación serie a 115200 baudios
pinMode(trigPin, OUTPUT); // Configura el pin de disparo como salida
pinMode(echoPin, INPUT); // Configura el pin de eco como entrada
// Inicializa la pantalla OLED y verifica su funcionamiento
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed")); // Mensaje de error si falla la inicialización
for(;;); // Bucle infinito en caso de error
}
delay(500); // Espera medio segundo
display.clearDisplay(); // Limpia la pantalla OLED
display.setTextSize(2); // Establece el tamaño del texto a 2
display.setTextColor(WHITE); // Establece el color del texto a blanco
}
void loop() {
// Limpia el pin de disparo
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // Espera 2 microsegundos
// Activa el pin de disparo durante 10 microsegundos
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lee el pin de eco, devuelve el tiempo de viaje de la onda sonora en microsegundos
duration = pulseIn(echoPin, HIGH);
// Calcula la distancia en cm
distanceCm = duration * SOUND_SPEED / 2;
// Convierte la distancia a pulgadas
distanceInch = distanceCm * CM_TO_INCH;
// Imprime la distancia en el Monitor Serial
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);
display.clearDisplay(); // Limpia la pantalla OLED
display.setCursor(0, 25); // Establece el cursor en la posición (0, 25)
// Muestra la distancia en cm
display.print(distanceCm);
display.print(" cm");
// Muestra la distancia en pulgadas (comentado)
/* display.print(distanceInch);
display.print(" in"); */
display.display(); // Actualiza la pantalla para mostrar la nueva información
delay(500); // Espera medio segundo antes de repetir el bucle
}