Realizar un programa en el Arduino para controlar un display de 7 segmentos x 3.
Para la realización de la práctica se necesitan un display de 7 segmentos de 3 módulos (x3)
y dos pulsadores (no se cuentan los cables y resistencias necesarias).
Uno de los dos pulsadores permitirá seleccionar el módulo que se quiere mostrar
(sólo se muestra 1 simultáneamente), es decir, cada pulsación se avanzará al módulo siguiente,
considerando que hay 3 módulos que se numerarán del 1 al 3. El otro pulsador, cuando se pulse,
incrementará en 1 el valor del display seleccionado con el pulsador anterior.
El programa debe recordar que valor tenía cada uno de los displays.Nos ha dicho el profesor que esto
ultimo se hace con vectores */
int num = 0;
int delayTime;
int counter=1;
// estadoBoton1 será el que pulse para contar
//estadoBoton2 será el que cambie entre módulos
int estadoBoton1 = 0;
int estadoBoton2 = 0;
int P1 = 3;
int P2 = 2;
//Displays multiplexados
int LED1=4;
int LED2=5;
int LED3=6;
void setup (){
//Entradas digitales de los Botones
pinMode(P2, INPUT);
pinMode(P1, INPUT);
//Salidas digitales
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
//3 Leds multiplexados
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop(){
estadoBoton1 = digitalRead(P1);
estadoBoton2 = digitalRead(P2);
Serial.println(estadoBoton1);
delay(50);
Serial.println(estadoBoton2);
delay(50);
//Contador del 1 al 9 y vuelve al 0
if (estadoBoton1 == HIGH) {
num = num+ 1;
}
if (num >= 10){
num=0;
}
//A partir de aqui lo he copiado de internet que se supone que es para cambiar entre displays, pero no he comprobado si funciona
if (estadoBoton2 == HIGH) {
counter + 1;
}
//resetear contador
if(counter == 4) {
counter = 1;
}
}
if(counter == 1)
{
delayTime = 250;
}
else if(counter == 2)
{
delayTime = 100;
}
else if(counter == 3)
{
delayTime = 50;
}
//Light show!
digitalWrite(LED4, HIGH);
delay(delayTime);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
delay(delayTime);
digitalWrite(LED5, LOW);
digitalWrite(LED6, HIGH);
delay(delayTime);
digitalWrite(LED6, LOW);
delay(delayTime);
}
//Esto ya lo teniamos de antes, es para mostrar cada uno de los numeros
switch (num) {
case 0:
limpiar();
cero();
break;
case 1:
limpiar();
uno();
break;
case 2:
limpiar();
dos();
break;
case 3:
limpiar();
tres();
break;
case 4:
limpiar();
cuatro();
break;
case 5:
limpiar();
cinco();
break;
case 6:
limpiar();
seis();
break;
case 7:
limpiar();
siete();
break;
case 8:
limpiar();
ocho();
break;
case 9:
limpiar();
nueve();
}
}
void cero(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
}
void uno(){
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
}
void dos(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(13,HIGH);
}
void tres(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(13,HIGH);
}
void cuatro(){
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
void cinco(){
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
void seis(){
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
void siete(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
}
void ocho(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
void nueve(){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
}
void limpiar(){
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}