Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Contador ascendente/descendente con codificador rotatorio.
- 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: [email protected]
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa controlamos un conteo ascendente/descendente (del 0 al 9 y viceversa) mediante
- un codificador rotatorio. Si giramos en el sentido de las agujas del reloj, la cuenta aumenta y
- se enciende el LED Azul, y si giramos en el sentido antihorario la cuenta disminuye y el LED Rojo
- es ahora el que se enciende, apagándose el LED Azul.
- 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[ ]~| LED_Rojo(+)
- | [ ]A0 -| N |- 5[ ]~| LED_Azul(+)
- | [ ]A1 -| O |- 4[ ] | Pin CLK del codificador rotatorio
- | [ ]A2 +---+ INT1/3[ ]~| Pin DT del codificador rotatorio
- | [ ]A3 INT0/2[ ] |
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Alimentación del codificador rotatorio
- - VCC --> +5V de Arduino.
- - GND --> GND de Arduino.
- - SW --> No conectado.
- - El terminal "com" del display conectado a GND a través de una R=220 ohms
- - Cátodo(-) de los LEDS a GND a través de una R=220 omhs (diferente para cada LED).
- */
- int pinA = 4; // Pin digital para el pin CLK del codificador rotatorio
- int pinB = 3; // Pin digital para el pin DT del codificador rotatorio
- int LED_Azul = 5; // Pin digital para el LED Azul
- int LED_Rojo = 6; // Pin digital para el LED Rojo
- // Variables para el funcionamiento del programa
- int contadorPosicion = 0;
- int valorInicial = 0;
- int valorActual = 0;
- boolean horario;
- void setup()
- {
- pinMode(pinA, INPUT); // Pin digital 4 como entrada
- pinMode(pinB, INPUT); // Pin digital 3 como entrada
- pinMode(LED_Azul, OUTPUT); // Pin digital 5 como salida
- pinMode(LED_Rojo, OUTPUT); // Pin digital 6 como salida
- // 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);
- // Guardamos el valor inicial del codificador rotatorio
- valorInicial = digitalRead(pinA);
- }
- void loop()
- {
- // Leemos el valor actual del pin CLK
- valorActual = digitalRead(pinA);
- // Si el valor en el pin CLK cambia (flanco de bajada o de subida), es decir, si hemos
- // modificado la posición del mando del codificador rotatorio.
- if (valorActual != valorInicial)
- {
- // Si el valor en el pin CLK es diferente al del pin DT (sentido horario)
- if (digitalRead(pinB) != valorActual)
- {
- // La posición aumenta una unidad hasta llegar al número 9
- if(contadorPosicion < 9)
- {
- contadorPosicion++;
- }
- horario = true;
- }
- // Si el valor en el pin CLK es igual al del pin DT (sentido antihorario)
- else
- {
- // La posición disminuye una unidad hasta llegar al número 0
- if(contadorPosicion > 0)
- {
- contadorPosicion--;
- }
- horario = false;
- }
- // Si movemos el mando del codificador rotatorio en sentido horario
- if(horario)
- {
- digitalWrite(LED_Rojo, LOW); // Se apaga el LED Rojo
- digitalWrite(LED_Azul, HIGH); // Se enciende el LED Azul
- }
- // Si movemos el mando del codificador rotatorio en sentido antihorario
- else
- {
- digitalWrite(LED_Rojo, HIGH); // Se enciende el LED Rojo
- digitalWrite(LED_Azul, LOW); // Se apaga el LED Azul
- }
- }
- // Actualizamos el valor inicial del pin CLK del codificador rotatorio
- valorInicial = valorActual;
- // Actualizamos el valor del contador en el display de 7 segmentos.
- actualizarNumero();
- }
- // 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(contadorPosicion){
- 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment