Este es el código que usé, como lo dije, lo encontré en la web para un reloj con displays 7 segmentos
int ocup=0;
int disp=0;
long duracion1, distancia1, duracion2, distancia2, duracion3, distancia3, duracion4, distancia4;
byte Digit[10][8] =
{ { 1,1,1,1,1,1,0,0 }, // 0
{ 0,1,1,0,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1,0 }, // 2
{ 1,1,1,1,0,0,1,0 }, // 3
{ 0,1,1,0,0,1,1,0 }, // 4
{ 1,0,1,1,0,1,1,0 }, // 5
{ 1,0,1,1,1,1,1,0 }, // 6
{ 1,1,1,0,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1,0 }, // 8
{ 1,1,1,0,0,1,1,0 } // 9
};
void setup() {
Serial.begin(9600); // inicia el puerto serial a 9600 baudios
pinMode(2, OUTPUT); // define el pin 2 como salida (trigger)
pinMode(3, INPUT); // define el pin 3 como entrada (echo1)
pinMode(4, OUTPUT); // define el pin 4 como salida (Leds1)
pinMode(5, INPUT); // define el pin 5 como entrada (echo2)
pinMode(6, OUTPUT); // define el pin 6 como salida (leds2)
pinMode(7, INPUT); // define el pin 7 como entrada (echo3)
pinMode(8, OUTPUT); // define el pin 8 como salida (leds3)
pinMode(9, INPUT); // define el pin 9 como entrada (echo4)
pinMode(10, OUTPUT); // define el pin 10 como salida (leds4)
for (int i= 43; i<54; i++)
pinMode(i, OUTPUT);
}
void loop() {
digitalWrite(2, LOW);
delayMicroseconds(2);
digitalWrite(2, HIGH); // genera el pulso de 10 us
delayMicroseconds(10);
digitalWrite(2, LOW);
duracion1 = pulseIn(3, HIGH); // capturamos la duración del pulso
distancia1 = (duracion1/2)/29; // calcula la distancia en cms
if (distancia1 >=1 && distancia1 <=49){
digitalWrite(4, LOW);
}
if (distancia1 >=50 && distancia1 <=499){
digitalWrite(4, HIGH);
}
digitalWrite(2, HIGH); // genera el pulso de 10 us
delayMicroseconds(10);
digitalWrite(2, LOW);
duracion2 = pulseIn(5, HIGH); // capturamos la duración del pulso
distancia2 = (duracion2/2)/29; // calcula la distancia en cms
if (distancia2 >=2 && distancia2 <=49){
digitalWrite(6, LOW);
}
if (distancia2 >=50 && distancia2 <=499){
digitalWrite(6, HIGH);
}
digitalWrite(2, HIGH); // genera el pulso de 10 us
delayMicroseconds(10);
digitalWrite(2, LOW);
duracion3 = pulseIn(7, HIGH); // capturamos la duración del pulso
distancia3 = (duracion3/2)/29; // calcula la distancia en cms
if (distancia3 >=2 && distancia3 <=49){
digitalWrite(8, LOW);
}
if (distancia3 >=50 && distancia3 <=499){
digitalWrite(8, HIGH);
}
digitalWrite(2, HIGH); // genera el pulso de 10 us
delayMicroseconds(10);
digitalWrite(2, LOW);
duracion4 = pulseIn(9, HIGH); // capturamos la duración del pulso
distancia4 = (duracion4/2)/29; // calcula la distancia en cms
if (distancia4 >=2 && distancia4 <=49){
digitalWrite(10, LOW);
}
if (distancia4 >=50 && distancia4 <=499){
digitalWrite(10, HIGH);
}
if (digitalRead(4)==0){
ocup=ocup+1;}
if (digitalRead(4)==1){
disp=disp+1;}
if (digitalRead(6)==0){
ocup=ocup+1;}
if (digitalRead(6)==1){
disp=disp+1;}
if (digitalRead(8)==0){
ocup=ocup+1;}
if (digitalRead(8)==1){
disp=disp+1;}
if (digitalRead(10)==0){
ocup=ocup+1;}
if (digitalRead(10)==1){
disp=disp+1;}
int k = disp * 100 + ocup ;
CalculaDigitos(k) ;
}
void Display(int pos, int N)
{ digitalWrite(50,LOW); // Apaga todos los digitos
digitalWrite(51,LOW);
digitalWrite(52,LOW);
digitalWrite(53,LOW);
for (int i= 0 ; i<8 ; i++)
digitalWrite(i+43 , Digit[N][i]);
digitalWrite(50 + pos, HIGH); // Enciende el digito pos
delay(1);
ocup=0;
disp=0;
}
void CalculaDigitos(int Num)
{
int Digit0 = ocup %10 ;
int Digit1 = (ocup % 100) / 10 ;
int Digit2 = disp %10 ;
int Digit3 = (disp % 100) / 10 ;
Display(3 , Digit3);
Display(2 , Digit2);
Display(1 , Digit1);
Display(0 , Digit0);
}
y este es el enlace de donde lo saqué.
Estoy usando displays de cátodo común y como lo dije funciona, pero 3 de ellos parpadean y la luminosidad es bastante baja.