#include <Ultrasonic.h>
#include <TM1637Display.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 15
#define BUZZER_PIN 5 // Pin del buzzer
#define LED_PIN_1 12
#define LED_PIN_2 14
#define LED_PIN_3 27
#define LED_PIN_4 26
#define LED_PIN_5 25
#define LED_PIN_6 33
#define CLK_PIN 16 // Pin del reloj del TM1637
#define DIO_PIN 17 // Pin de datos del TM1637
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
TM1637Display display(CLK_PIN, DIO_PIN);
unsigned long lastBuzzTime = 0;
unsigned long buzzDuration = 80; // Duración del zumbido en milisegundos
void setup() {
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(LED_PIN_4, OUTPUT);
pinMode(LED_PIN_5, OUTPUT);
pinMode(LED_PIN_6, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT); // Configurar el pin del buzzer como salida
Serial.begin(9600);
display.setBrightness(0x0a); // Configurar el brillo del display (0x00 - 0x0f)
}
void loop() {
long distance = ultrasonic.read();
Serial.print("Distance: ");
Serial.println(distance);
// Convertir la distancia a un arreglo de dígitos
int digits[4];
if (distance < 10000) {
digits[3] = distance / 1000; // Millares
digits[2] = (distance % 1000) / 100; // Centenas
digits[1] = (distance % 100) / 10; // Decenas
digits[0] = distance % 10; // Unidades
} else {
// Si la distancia es mayor a 9999 cm, mostrar "9999"
digits[3] = 9;
digits[2] = 9;
digits[1] = 9;
digits[0] = 9;
}
// Mostrar los dígitos en el display
display.showNumberDec(digits[3], false, 3, 0); // Mostrar el millar sin ceros a la izquierda
display.showNumberDec(digits[2], false, 2, 1); // Mostrar la centena sin ceros a la izquierda
display.showNumberDec(digits[1], false, 1, 2); // Mostrar la decena sin ceros a la izquierda
display.showNumberDec(digits[0], false, 0, 3); // Mostrar la unidad sin ceros a la izquierda
if (distance < 10) {
// Encender todos los LEDs
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
digitalWrite(LED_PIN_4, HIGH);
digitalWrite(LED_PIN_5, HIGH);
digitalWrite(LED_PIN_6, HIGH);
// Hacer sonar el buzzer constantemente
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
} else if (distance >= 11 && distance < 21) {
// Encender 5 LEDs
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
digitalWrite(LED_PIN_4, HIGH);
digitalWrite(LED_PIN_5, HIGH);
digitalWrite(LED_PIN_6, LOW);
// Hacer sonar el buzzer durante 1 segundo cada 1 segundo
unsigned long currentTime = millis();
if (currentTime - lastBuzzTime >= 80) {
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
delay(buzzDuration); // Mantener el tono durante la duración especificada
noTone(BUZZER_PIN); // Detener el tono
lastBuzzTime = currentTime; // Actualizar el tiempo del último zumbido
}
} else if (distance >= 22 && distance < 32) {
// Encender 4 LEDs
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
digitalWrite(LED_PIN_4, HIGH);
digitalWrite(LED_PIN_5, LOW);
digitalWrite(LED_PIN_6, LOW);
// Hacer sonar el buzzer durante 1 segundo cada 2 segundos
unsigned long currentTime = millis();
if (currentTime - lastBuzzTime >= 120) {
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
delay(buzzDuration); // Mantener el tono durante la duración especificada
noTone(BUZZER_PIN); // Detener el tono
lastBuzzTime = currentTime; // Actualizar el tiempo del último zumbido
}
} else if (distance >= 33 && distance < 43) {
// Encender 3 LEDs
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
digitalWrite(LED_PIN_4, LOW);
digitalWrite(LED_PIN_5, LOW);
digitalWrite(LED_PIN_6, LOW);
// Hacer sonar el buzzer durante 1 segundo cada 3 segundos
unsigned long currentTime = millis();
if (currentTime - lastBuzzTime >= 160) {
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
delay(buzzDuration); // Mantener el tono durante la duración especificada
noTone(BUZZER_PIN); // Detener el tono
lastBuzzTime = currentTime; // Actualizar el tiempo del último zumbido
}
} else if (distance >= 44 && distance < 54) {
// Encender 2 LEDs
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_4, LOW);
digitalWrite(LED_PIN_5, LOW);
digitalWrite(LED_PIN_6, LOW);
// Hacer sonar el buzzer durante 1 segundo cada 4 segundos
unsigned long currentTime = millis();
if (currentTime - lastBuzzTime >= 200) {
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
delay(buzzDuration); // Mantener el tono durante la duración especificada
noTone(BUZZER_PIN); // Detener el tono
lastBuzzTime = currentTime; // Actualizar el tiempo del último zumbido
}
} else if (distance >= 55 && distance < 65) {
// Encender 1 LED
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_4, LOW);
digitalWrite(LED_PIN_5, LOW);
digitalWrite(LED_PIN_6, LOW);
// Hacer sonar el buzzer durante 1 segundo cada 5 segundos
unsigned long currentTime = millis();
if (currentTime - lastBuzzTime >= 240) {
tone(BUZZER_PIN, 740); // Generar un tono de 740 Hz
delay(buzzDuration); // Mantener el tono durante la duración especificada
noTone(BUZZER_PIN); // Detener el tono
lastBuzzTime = currentTime; // Actualizar el tiempo del último zumbido
}
} else {
// Apagar todos los LEDs
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_4, LOW);
digitalWrite(LED_PIN_5, LOW);
digitalWrite(LED_PIN_6, LOW);
// Apagar el buzzer
noTone(BUZZER_PIN);
}
delay(100); // Esperar un momento antes de volver a leer la distancia
}