//Lector de proximidad con sensor ultasonico y pantalla OLED.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ancho del display OLED, en pixeles.
#define SCREEN_HEIGHT 32 // Alto del display OLED, en pixeles.
// Declaración para una pantalla SSD1306 conectada a I2C (SDA, SCL pines)
// Los pines para I2C son definidos por la libreria "Wire".
// En Arduino Uno: A4(SDA), A5(SCL)
#define OLED_RESET -1 // Restablecer pin # (o -1 si comparte el pin de restablecimiento de Arduino).
#define SCREEN_ADDRESS 0x3C ///< Ver datasheet para la Dirección; 0x3D para 128x64, 0x3C para 128x32.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int trigPin = 2; //conectamos "trig" al pin digital 2.
int echoPin = 3; //conectamos "echo" al pin digital 3.
float duracion, distancia_cm;
void setup() {
Serial.begin (9600); //iniciamos comunicación con el monitor serial.
pinMode(trigPin, OUTPUT); //declaramos el pin "trig" como salida.
pinMode(echoPin, INPUT); //declaramos el pin "echo" como entrada.
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 error de asignacion"));
for(;;); //No procede, repetir por siempre.
}
}
void loop() {
digitalWrite(trigPin, LOW); //para generar un pulso limpio ponemos a LOW 4us.
delayMicroseconds(4);
digitalWrite(trigPin, HIGH); //generamos Trigger (disparo) de 10us.
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// mide la duracion del pulso del pin ECHO.
duracion =pulseIn(echoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos.
//calcula la distancia en centimetros
distancia_cm = 0.017 * duracion; //convertimos a distancia, en cm.
// imprime la distancia en el monitor serial.
Serial.print("distancia: "); // mandamos a imprimir la leyenda de "distancia".
Serial.print(distancia_cm); //mandamos a llamar a la expresion "distancia_cm" y la imprimimos en el monitor serial.
Serial.println(" cm"); //mandamos a imprimir la leyenda de "cm" y brincamos un enter.
display.clearDisplay();
display.setTextSize(1); //Tamaño de texto de 8 pixeles.
display.setTextColor(SSD1306_WHITE); //Dibuja el texto en blanco.
display.setCursor(10, 3); //Empieza a dibujar en el pixel en X = 10 y Y = 3.
display.print("distancia "); //mandamos a imprimir la leyenda de "distancia".
display.print(distancia_cm); //mandamos a llamar a la expresion "distancia_cm" y la imprimimos en la pantalla OLED.
display.print(" cm"); //mandamos a imprimir la leyenda de "cm".
display.display();
delay(100);
}