// ---------- Ultrasonico ----------
const int trigPin = 3;
const int echoPin = 2;
// ---------- Segmentos a-g ----------
int segments[7] = {6, 7, 8, 9, 10, 11, 12};
// ---------- Numeros en display (catodo comun) ----------
byte digits[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
int contador = 0;
bool detectado = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
mostrar(contador);
}
long medirDistancia() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracion = pulseIn(echoPin, HIGH);
long distancia = duracion * 0.034 / 2;
return distancia;
}
void mostrar(int numero) {
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], digits[numero][i]);
}
}
void loop() {
long distancia = medirDistancia();
if (distancia < 20 && !detectado) {
contador++;
if (contador > 9) contador = 0;
mostrar(contador);
detectado = true;
delay(500);
}
if (distancia > 30) {
detectado = false;
}
delay(100);
}