Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Contador ascendente/descendente con display de 7 segmentos.
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa controlamos un conteo ascendente/descendente (del 0 al 9 y viceversa) mediante
- 2 pulsadores, y visualizamos el número en el que estamos a través de un display de 7 segmentos.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
- | 5V/MISO2 [ ][ ] A4/SDA[ ] |
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] | Terminal "g" del display
- | [ ]IOREF MISO/12[ ] | Terminal "f" del display
- | [ ]RST MOSI/11[ ]~| Terminal "e" del display
- | [ ]3V3 +---+ 10[ ]~| Terminal "d" del display
- | [ ]5v -| A |- 9[ ]~| Terminal "c" del display
- | [ ]GND -| R |- 8[ ] | Terminal "b" del display
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] | Terminal "a" del display
- | -| I |- 6[ ]~| PA(I)
- | [ ]A0 -| N |- 5[ ]~| PA(D)
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] |
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
- - pulsadorIncremento --> Terminales PA(I) y PB(I).
- - pulsadorDecremento --> Terminales PA(D) y PB(D).
- - Conexión PULL-DOWN de los pulsadores.
- - PB(I) y PB(D) conectados a VCC.
- - PA(I) y PA(D) conectados a GND a través de una R=10K omhs (cada uno con su resistencia por separado).
- - El terminal "com" del display conectado a GND a través de una R=220 ohms
- */
- const int pulsadorIncremento = 6; // Pin digital para el pulsador de incremento
- const int pulsadorDecremento = 5; // Pin digital para el pulsador de decremento
- const int tiempoAntirrebote = 10; // Variable para almacenar el tiempo antirrebote
- // Variables necesarias para los cálculos internos
- int cuenta = 0;
- int estadoPulsadorIncremento;
- int estadoPulsadorAnteriorIncremento;
- int estadoPulsadorDecremento;
- int estadoPulsadorAnteriorDecremento;
- // Función antirrebote
- boolean antirrebote(int pin)
- {
- int contador = 0;
- boolean estado;
- boolean estadoAnterior;
- do
- {
- estado = digitalRead(pin);
- if(estado != estadoAnterior)
- {
- contador = 0;
- estadoAnterior = estado;
- }
- else
- {
- contador = contador+ 1;
- }
- delay(1);
- } while(contador < tiempoAntirrebote);
- return estado;
- }
- // Función del display: Se reciben 7 variables y se asignan a cada una de las salidas
- void display (int a, int b, int c, int d, int e, int f, int g)
- {
- digitalWrite (7,a);
- digitalWrite (8,b);
- digitalWrite (9,c);
- digitalWrite (10,d);
- digitalWrite (11,e);
- digitalWrite (12,f);
- digitalWrite (13,g);
- }
- // Función que actualiza el número que aparece en el display de 7 segmentos
- void actualizarNumero()
- {
- switch(cuenta){
- case 0:
- display (1,1,1,1,1,1,0); // Número "0"
- break;
- case 1:
- display (0,1,1,0,0,0,0); // Número "1"
- break;
- case 2:
- display (1,1,0,1,1,0,1); // Número "2"
- break;
- case 3:
- display (1,1,1,1,0,0,1); // Número "3"
- break;
- case 4:
- display (0,1,1,0,0,1,1); // Número "4"
- break;
- case 5:
- display (1,0,1,1,0,1,1); // Número "5"
- break;
- case 6:
- display (1,0,1,1,1,1,1); // Número "6"
- break;
- case 7:
- display (1,1,1,0,0,0,0); // Número "7"
- break;
- case 8:
- display (1,1,1,1,1,1,1); // Número "8"
- break;
- case 9:
- display (1,1,1,0,0,1,1); // Número "9"
- break;
- }
- }
- void setup()
- {
- // Asignación de los pines digitales para el display de 7 segmentos como salidas
- pinMode(7, OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(12, OUTPUT);
- pinMode(13, OUTPUT);
- // Asignación de los pines digitales para los pulsadores como entradas
- pinMode(pulsadorIncremento, INPUT);
- pinMode(pulsadorDecremento, INPUT);
- }
- void loop()
- {
- // Leemos el estado del pulsador de incremento
- estadoPulsadorIncremento = digitalRead(pulsadorIncremento);
- // Si hay un cambio en el estado del pulsador de incremento
- if(estadoPulsadorIncremento != estadoPulsadorAnteriorIncremento)
- {
- // y si se ha eliminado ya el rebote del pulsador de incremento
- if(antirrebote(pulsadorIncremento))
- {
- // Se incrementa la cuenta en una unidad
- cuenta++;
- // Si la cuenta es mayor que 9, permanece en 9.
- if(cuenta > 9)
- {
- cuenta = 9;
- }
- }
- }
- // Actualizamos el estado anterior del pulsador de incremento
- estadoPulsadorAnteriorIncremento = estadoPulsadorIncremento;
- // Leemos el estado del pulsador de decremento
- estadoPulsadorDecremento = digitalRead(pulsadorDecremento);
- // Si hay un cambio en el estado del pulsador de decremento
- if(estadoPulsadorDecremento != estadoPulsadorAnteriorDecremento)
- {
- // y si se ha eliminado ya el rebote del pulsador de decremento
- if(antirrebote(pulsadorDecremento))
- {
- // Se decrementa la cuenta en una unidad
- cuenta--;
- // Si la cuenta es menor que 0, permanece en 0.
- if(cuenta < 0)
- {
- cuenta = 0;
- }
- }
- }
- // Actualizamos el estado anterior del pulsador de decremento
- estadoPulsadorAnteriorDecremento = estadoPulsadorDecremento;
- // Actualizamos el número que aparece en el display de 7 segmentos
- actualizarNumero();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement