int disp_pin[14]; /* array de pines de los display (14 en total para los 7 leds de cada display) */
int i=0;
int u=0; /* "i" e "u" son contadores que se utilizaran para controlar los display */
int aux=0; /* contador auxiliar */
int aux1=0;
/* Declaramos los pines de Arduino en los que estarán conectados los 4 botones */
const int buttonPin = 22;
const int buttonPin1 = 24;
const int buttonPin2 = 26;
const int buttonPin3 = 28;
/* estado inicial de los botones */
int buttonState = 0;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
/* Usamos una funcion para definir los pines de los display*/
void define_segment_pins(int a, int b, int c, int d, int e, int f, int g, int a1, int b1, int c1, int d1, int e1, int f1, int g1) /* Assigns 7-segment display pins to board */
{
/* pines del primer display */
disp_pin[0] = a;
disp_pin[1] = b;
disp_pin[2] = c;
disp_pin[3] = d;
disp_pin[4] = e;
disp_pin[5] = f;
disp_pin[6] = g;
/* pines del segundo display */
disp_pin[7] = a1;
disp_pin[8] = b1;
disp_pin[9] = c1;
disp_pin[10] = d1;
disp_pin[11] = e1;
disp_pin[12] = f1;
disp_pin[13] = g1;
}
/* funcion para controlar el encendido del primer display de 7 segmentos (recibe un numero y dependiendo de este, una configuracion de encendido es elegida)*/
void display_number(int num) /* funcion para mostrar un numero (0-9) */
{
switch(num)
{
case 0:
digitalWrite(disp_pin[0], LOW); /* cuando el estado es "LOW" el led en ese pin se enciende, dado a que trabajamos con displays de anodo comun */
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], LOW);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], HIGH);
break;
case 1:
digitalWrite(disp_pin[0], HIGH); /* cuando el estado es "HIGH" el led en ese pin se apaga*/
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], HIGH);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], HIGH);
digitalWrite(disp_pin[6], HIGH);
break;
case 2:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], HIGH);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], LOW);
digitalWrite(disp_pin[5], HIGH);
digitalWrite(disp_pin[6], LOW);
break;
case 3:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], HIGH);
digitalWrite(disp_pin[6], LOW);
break;
case 4:
digitalWrite(disp_pin[0], HIGH);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], HIGH);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], LOW);
break;
case 5:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], HIGH);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], LOW);
break;
case 6:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], HIGH);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], LOW);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], LOW);
break;
case 7:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], HIGH);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], HIGH);
digitalWrite(disp_pin[6], HIGH);
break;
case 8:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], LOW);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], LOW);
break;
case 9:
digitalWrite(disp_pin[0], LOW);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], HIGH);
digitalWrite(disp_pin[5], LOW);
digitalWrite(disp_pin[6], LOW);
break;
default:
digitalWrite(disp_pin[0], HIGH);
digitalWrite(disp_pin[1], LOW);
digitalWrite(disp_pin[2], LOW);
digitalWrite(disp_pin[3], LOW);
digitalWrite(disp_pin[4], LOW);
digitalWrite(disp_pin[5], HIGH);
digitalWrite(disp_pin[6], LOW);
break;
}
}
/* funcion para controlar el encendido del segundo display */
void display_number1(int num1)
{
switch(num1)
{
case 0:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], LOW);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], HIGH);
break;
case 1:
digitalWrite(disp_pin[7], HIGH);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], HIGH);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], HIGH);
digitalWrite(disp_pin[13], HIGH);
break;
case 2:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], HIGH);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], LOW);
digitalWrite(disp_pin[12], HIGH);
digitalWrite(disp_pin[13], LOW);
break;
case 3:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], HIGH);
digitalWrite(disp_pin[13], LOW);
break;
case 4:
digitalWrite(disp_pin[7], HIGH);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], HIGH);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], LOW);
break;
case 5:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], HIGH);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], LOW);
break;
case 6:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], HIGH);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], LOW);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], LOW);
break;
case 7:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], HIGH);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], HIGH);
digitalWrite(disp_pin[13], HIGH);
break;
case 8:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], LOW);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], LOW);
break;
case 9:
digitalWrite(disp_pin[7], LOW);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], HIGH);
digitalWrite(disp_pin[12], LOW);
digitalWrite(disp_pin[13], LOW);
break;
default:
digitalWrite(disp_pin[7], HIGH);
digitalWrite(disp_pin[8], LOW);
digitalWrite(disp_pin[9], LOW);
digitalWrite(disp_pin[10], LOW);
digitalWrite(disp_pin[11], LOW);
digitalWrite(disp_pin[12], HIGH);
digitalWrite(disp_pin[13], LOW);
break;
}
}
/*en esta funcion definimos las variables a ser utilizadas*/
void setup() {
/* asignamos los pines conectados a los botones como entradas */
pinMode(buttonPin, INPUT); /* al ser declarado como entrada o "INPUT" el arduino recibira una señal de ese pin */
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
/* asignamos los pines conectados a los displays de 7 segmentos como salidas (los pines utilizados son 6-12 para el primer display y 47-53 para el sagundo display) */
pinMode(6, OUTPUT); /* al ser declarado como salida u "output" el arduino emitira una señal (voltaje) por ese pin */
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(47, OUTPUT);
pinMode(48, OUTPUT);
pinMode(49, OUTPUT);
pinMode(50, OUTPUT);
pinMode(51, OUTPUT);
pinMode(52, OUTPUT);
pinMode(53, OUTPUT);
define_segment_pins(12,11,10,9,8,7,6,53,52,51,50,49,48,47); /* pines de los display en arduino */
Serial.begin(9600);
}
/* este es el loop que se ejecutara de manera indefinida, y donde se encuentran las principales funciones del codigo*/
void loop() {
aux=0;
/* con este condicional nos aseguramos de que al encender el sistema, los display inicien en 0*/
if(aux1==0){ /*dado a que aux1 es igual a 0 al iniciar, este condicional si se ejecutara*/
display_number(0);
aux1=1;
}
/*aqui se usa la funcion de arduino "digitalRead" para leer el estado de los 4 botones, si se presiona un boton el estado pasara de 0 a 1*/
buttonState = digitalRead(buttonPin);
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
/* si el estado el primer boton es 1, si se ejecutara lo que esta dentro de este condional*/
if (buttonState == 1) {
i++; /*el contador i aumenta su valor en 1*/
if(i>9){ /* siel valor de i se vuelve mayor a 9, el contador i volvera a ser 0*/
i=0;
}
while(buttonState == 1){ /*esta funcion nos ayudara a que si el boton es presionado por mucho tiempo, el contador no siga aumentando su valor*/
buttonState = digitalRead(buttonPin);
delay(100);
aux++;
Serial.println(aux);
}
}
/**/
if (buttonState1 == 1) {
// turn LED on:
i--;
if(i<0){
i=0;
}
while(buttonState1 == 1){
buttonState1 = digitalRead(buttonPin1);
delay(100);
aux++;
Serial.println(buttonState1);
if(aux>=20){
i=0;
}
}
}
if (buttonState2 == 1) {
// turn LED on:
u++;
if(u>9){
u=0;
}
while(buttonState2 == 1){
buttonState2 = digitalRead(buttonPin2);
delay(100);
aux++;
Serial.println(aux);
}
}
if (buttonState3 == 1) {
// turn LED on:
u--;
if(u<0){
u=0;
}
while(buttonState3 == 1){
buttonState3 = digitalRead(buttonPin3);
delay(100);
aux++;
Serial.println(buttonState3);
if(aux>=20){
u=0;
}
}
}
display_number(i);
display_number1(u);
}