//Tarea tema 1 ejercicio 1
/*
ACTIVIDAD 1
Esta tarea consiste en utilizar la placa Arduino para generar una secuencia de números
con una pantalla de 7 segmentos de cátodo común y dos pulsadores. En concreto, el
funcionamiento del sistema debe ser el siguiente:
-Inicialmente la pantalla de 7 segmentos estará apagada, y permanecerá en ese estado
mientras no se accione ningún pulsador.
-Cuando se accione el pulsador 1, comenzará a mostrarse en la pantalla una secuencia
ascendente de números, desde el 0 hasta el 9. Cada número tendrá una duración de 1
segundo.
-Cuando se accione el pulsador 2, comenzará a mostrarse en la pantalla una secuencia
descendente de números, desde el 9 hasta el 0. Cada número tendrá una duración de
1 segundo.
-Cuando acabe cualquiera de las 2 secuencias, la pantalla se apagará, y el sistema
quedará a la espera de una nueva pulsación.
Para poder verificar que esta tarea ha sido llevada a cabo, tanto en la programación
como en el montaje del circuito, se pedirá que se suba al Moodle un VÍDEO donde se
muestre el funcionamiento del circuito. Se ruega que cada participante pronuncie su
nombre al principio del vídeo. Se podrá consultar cualquier duda correspondiente a
esta tarea en el foro de la sesión 1.
AUTOR: FRANCISCO ORTIZ DESCALZO
*/
unsigned long tiempoActual = 0; // Variable tiempo actual temporizador
unsigned long tiempoAnterior = 0; // Variable tiempo anterior temporizador
int intervalo = 1000; // Temporización de un segundo
boolean subida = false; // variables booleanas para saber estado de cuenta
boolean bajada = false;
int j = 0; // VARIABLE PARA CONTAR EL NUMERO
int segA = 2; // variables pines del display 7 segmentos
int segB = 3;
int segC = 4;
int segD = 5;
int segE = 6;
int segF = 7;
int segG = 8;
int segPUNTO = 9;
int pulsador1 = 10; // pines de los pulsadores
int pulsador2 = 11;
void setup() {
// Los pulsadores como entrada
pinMode(pulsador1, INPUT);
pinMode(pulsador2, INPUT);
// Todos los pines de los segmentos como salidas
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segPUNTO, OUTPUT);
// Apago inicialmente todos los segmentos
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segPUNTO, LOW);
// Display apagado de inicio
displayApagado();
}
// FUNCION PRINCIPAL
void loop()
{
temporizador();
pulsadores();
}
// FUNCION QUE AL TEMPORIZAR: realiza la cuenta ascendente o descendente del display
void temporizador()
{
tiempoActual = millis();
if (tiempoActual - tiempoAnterior > intervalo) // Temporizacion si se cumple el intervalo de 1 segundo
{
tiempoAnterior = tiempoActual; // Actulizamos tiempo anterior para la siguiiente temporizacion
if (subida) // Aumento del contador
{
if (j > 9)
{ // Si j>9 se apaga
displayApagado();
subida = false;
bajada = false;
}
else
{
display7Segmentos(j); // llama a la función con el numero a mostrar como parametro
j++; // Aumenta la cuenta en 1 (j=j+1)
}
}
if (bajada)
{
if (j < 0)
{ // Si j<0 se apaga
displayApagado();
subida = false;
bajada = false;
}
else
{
display7Segmentos(j); // llama a la función con el numero a mostrar como parametro
j--; // Disminuye la cuenta en 1 (j=j-1)
}
}
}
}
// Funcion que indica el estado del sistema al pulsar uno de los pulsadores
void pulsadores()
{
if (digitalRead(pulsador1) == HIGH) // Pulsador 1 pulsado
{
subida = true; // Estado: Subida
bajada = false;
j = 0; // iniciamos la subida en 0
}
if (digitalRead(pulsador2) == HIGH) // Pulsador 2 pulsado
{
subida = false; // Estado: Bajada
bajada = true;
j = 9; // Iniciamos la bajada en 9
}
}
// Funcion que gestiona, según la cuenta, que numero se muestra en el display
void display7Segmentos(int numero)
{
if (numero == 0) display0(); // ejecutamos una funcion u otra dependiendo del valor que le pasemos como parametro
else if (numero == 1) display1();
else if (numero == 2) display2();
else if (numero == 3) display3();
else if (numero == 4) display4();
else if (numero == 5) display5();
else if (numero == 6) display6();
else if (numero == 7) display7();
else if (numero == 8) display8();
else if (numero == 9) display9();
}
// Función de apaga el display
void displayApagado()
{
digitalWrite(segA, LOW); // Apagado
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segPUNTO, LOW);
}
// funciones que muestran numeros
void display0()
{
digitalWrite(segA, HIGH); // Muestra un 0
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
digitalWrite(segPUNTO, LOW);
}
void display1()
{
digitalWrite(segA, LOW); // Muestra un 1
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segPUNTO, LOW);
}
void display2()
{
digitalWrite(segA, HIGH); // Muestra un 2
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display3()
{
digitalWrite(segA, HIGH); // Muestra un 3
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display4()
{
digitalWrite(segA, LOW); // Muestra un 4
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display5()
{
digitalWrite(segA, HIGH); // Muestra un 5
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display6()
{
digitalWrite(segA, HIGH); // Muestra un 6
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display7()
{
digitalWrite(segA, HIGH); // Muestra un 7
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segPUNTO, LOW);
}
void display8()
{
digitalWrite(segA, HIGH); // Muestra un 8
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}
void display9()
{
digitalWrite(segA, HIGH); // Muestra un 9
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segPUNTO, LOW);
}