#include <LiquidCrystal_I2C.h>
#define BUZZER 10
const int trigPin = 13; // Pin de trigger del sensor ultrasónico
const int echoPin = 12; // Pin de eco del sensor ultrasónico
const int distanciaLimite = 11; // Distancia límite en metros
long DO = 523.25;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, pantalla LCD de 16x2 caracteres
const char *textoCompleto = "En está noche te tortura la locura procura estar a mi altura aunque baja es tu estatura";
char textoFragmento[17];
int inicio = 0;
int fin = 0;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sensor de");
lcd.setCursor(0, 1);
lcd.print("proximidad");
delay(2000);
lcd.clear();
}
void loop()
{
long duration, distancia;
// Genera un pulso ultrasónico
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lee la duración del eco
duration = pulseIn(echoPin, HIGH);
// Calcula la distancia en centímetros
distancia = duration * 0.034 / 2;
// Muestra la distancia en el monitor serial
Serial.print("Distancia: ");
Serial.println(distancia);
// Actualiza la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
if (distancia == distanciaLimite)
{
//tone(BUZZER, DO, 250);
// Con delay dejamos un breve intervalo entre sonidos
// Copia el fragmento sin cortar las palabras y desplázalo horizontalmente
int i = 0;
while (i < 16 && inicio + i < strlen(textoCompleto))
{
textoFragmento[i] = textoCompleto[inicio + i];
lcd.print(textoFragmento);
delay(20); // velocidad de desplazamiento
lcd.clear();
i++;
}
// Mueve los punteros al siguiente fragmento
inicio++;
if (inicio >= strlen(textoCompleto))
{
inicio = 0;
}
}
}