martes, 9 de agosto de 2022

Arduino 05 Contador Ascendente-Descendente.

 

Contador Ascendente-Descendente.


Dr. Héctor Darío Aguirre Arvizu
22-08-09

     Aquí veremos cómo construir un contador ascendente descendente con un display de 7 segmentos de cátodo común.

     En una entrada previa he hecho la versión para el display de ánodo común.


     Disponemos de un display de 7 segmentos 5161AS. 


Nos vamos a la hoja de datos (ver la liga) y obtenemos la siguiente información:


     Sin embargo, en esta información no nos dicen cómo están distribuidas las terminales en el propio display, es decir, no nos dicen cuál es la uno, dos, tres, etc. Podemos suponer que es como en los circuitos integrados que se hace en sentido de las manecillas del reloj. Una nueva búsqueda nos da la siguiente información (mi arduino uno):
Aquí y apodemos ver la correlación entre segmentos del display y las terminales, por ello:
     Aquí presentamos inclusive, en el extremo externo a cada LED, la conexión que se hará en las terminales del Arduino.
     A continuación te presento el diagrama:

     A continuación te muestro una fotografía de cómo queda conectado:


     Ya en el principio de te habíamos puesto la imagen generada den Thinkercad del circuito. Puedes revisarla.
     Desde aquí te presento el programa. Solamente tienes que copiarlo (solo la letra pequeña) y de allí pegarlo a un sketch del programa Arduino, compilarlo (para verificar que hayas copiado correctamente), guardarlo en un archivo .ino, para después subirlo a tu tarjeta con las conexiones previamente realizadas.
     Desde aquí el programa.
//Contador ascendente-descendente con display de 7 segmentos con ánodo común
//Dr. Héctor Darío Aguirre Arvizu
//2022-10-22
// las terminales 3 y 8 del display 5161AS son el punto común que en este caso se conecta a GND o negativo.

const int p = 13; //asigna el pin 13 el encendido del punto decimal al inicio del programa; parpadea con el diodo del circuito
const int a = 12; // a partir de 12 hacia abajo asignamos los pines para los diferentes segmentos;
const int b = 11; // los colocamos como enteros asignados a un pin;
const int c = 10; // Ello permite no confundir a qué segmento (a, b, c, etc.) se le dará voltaje
const int d = 9;
const int e = 8;
const int f = 7;
const int g = 6;
const int x = 1000; // asignamos un valor fijo para que cada dígito prenda un segundo

void setup() {

  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop() {

    //Cero
  digitalWrite(a, HIGH); //Al ser un display de cátodo común cada segmento debe estar en alto para encender
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW); // cuando están en alto permanecen apagados
  delay(x);

    //Uno
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  delay(x);

    //Dos
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  delay(x);

    //Tres
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  delay(x);

    //Cuatro
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

   //Cinco
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Seis
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Siete
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  delay(x);

    //Ocho
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Nueve
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Ocho
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

   //Siete
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  delay(x);

    //Seis
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Cinco
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Cuatro
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  delay(x);

    //Tres
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  delay(x);

    //Dos
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  delay(x);

    //Uno
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  delay(x);

}
Hasta aquí el programa
Te coloco aquí el video del tema:


Espero te diviertas.


D. R. 2022 Darío Aguirre


3 comentarios: