Led siete segmentos con tres dígitos (2/2)

Vamos con la segunda parte del control de leds de siete segmentos con tres dígitos.

Primero el esquema. Por alguna razón siempre que compro un componente no me suele aparecer en fritzing, así que hasta que aprenda a hacer piezas, usaremos un led de 4 dígitos. Eso sí, sólo voy a usar 12 patillas, cinco estarán abajo y seis arriba (como vimos en el artículo anterior). Espero que a pesar del inconveniente el esquema sea legible, bastante problema tenemos ya con con poder ver todas las conexiones de arduino a las patillas del led.

LedSieteSegmentosTresDigitos-con arduino_bb_mini

Podeis ver (espero) que usamos tres transistores NPN para controlar qué led está activo en cada momento. Estos leds se controlan con las patillas 48, 49 y 50.

Vamos con el código, reutilizado del artículo anterior.

int PinA = 22;
int PinB = 23;
int PinC = 24;
int PinD = 25;
int PinE = 26;
int PinF = 27;
int PinG = 28;
int PinPD = 29;

void setup() {
// put your setup code here, to run once:
pinMode(PinA, OUTPUT);
pinMode(PinB, OUTPUT);
pinMode(PinC, OUTPUT);
pinMode(PinD, OUTPUT);
pinMode(PinE, OUTPUT);
pinMode(PinF, OUTPUT);
pinMode(PinG, OUTPUT);
pinMode(PinPD, OUTPUT);
pinMode(48, OUTPUT);  //Ojo, estos no tienen nombre
pinMode(49, OUTPUT);
pinMode(50, OUTPUT);
}

void printNumber(int number) {
switch (number) {
case 1:
digitalWrite(PinA, LOW); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, LOW);
digitalWrite(PinE, LOW); digitalWrite(PinF, LOW); digitalWrite(PinG, LOW); digitalWrite(PinPD, LOW);
break;
case 2:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, LOW); digitalWrite(PinD, HIGH);
digitalWrite(PinE, HIGH); digitalWrite(PinF, LOW); digitalWrite(PinG, HIGH); digitalWrite(PinPD, HIGH);
break;
case 3:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, LOW); digitalWrite(PinF, LOW); digitalWrite(PinG, HIGH); digitalWrite(PinPD, LOW);
break;
case 4:
digitalWrite(PinA, LOW); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, LOW);
digitalWrite(PinE, LOW); digitalWrite(PinF, HIGH); digitalWrite(PinG, HIGH); digitalWrite(PinPD, HIGH);
break;
case 5:
digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, LOW); digitalWrite(PinF, HIGH); digitalWrite(PinG, HIGH); digitalWrite(PinPD, LOW);
break;
case 6:
digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, HIGH); digitalWrite(PinF, HIGH); digitalWrite(PinG, HIGH); digitalWrite(PinPD, HIGH);
break;
case 7:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, LOW);
digitalWrite(PinE, LOW); digitalWrite(PinF, LOW); digitalWrite(PinG, LOW); digitalWrite(PinPD, LOW);
break;
case 8:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, HIGH); digitalWrite(PinF, HIGH); digitalWrite(PinG, HIGH); digitalWrite(PinPD, HIGH);
break;
case 9:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, LOW); digitalWrite(PinF, HIGH); digitalWrite(PinG, HIGH); digitalWrite(PinPD, LOW);
break;
case 0:
digitalWrite(PinA, HIGH); digitalWrite(PinB, HIGH); digitalWrite(PinC, HIGH); digitalWrite(PinD, HIGH);
digitalWrite(PinE, HIGH); digitalWrite(PinF, HIGH); digitalWrite(PinG, LOW); digitalWrite(PinPD, HIGH);
break;
}
}

void loop() {
// put your main code here, to run repeatedly:
for (int i = 0; i < 10; i++) {
unsigned long milisAnt = millis();
while ((milisAnt + 1000) > millis()) {
digitalWrite(48, HIGH); //activamos el transistor que permite poner a tierra el primer dígito
digitalWrite(49, LOW); // Los demás apagados
digitalWrite(50, LOW); // Los demás apagados
printNumber(i);
delay(5);  // Ojo con el número, si es pequeño, no se ven los números, si es grande, parpadea YMMV
digitalWrite(48, LOW); // Los demás apagados
digitalWrite(49, HIGH);//activamos el transistor que permite poner a tierra el segundo dígito
digitalWrite(50, LOW); // Los demás apagados
printNumber((i+1)%10);
delay(5);
digitalWrite(48, LOW); // Los demás apagados
digitalWrite(49, LOW); // Los demás apagados
digitalWrite(50, HIGH); //activamos el transistor que permite poner a tierra el tercer dígito
printNumber((i+2)%10);
delay(5);
}
}
}

 

Por fin, vídeo con el resultado del cableado infernal y el código

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *