Reloj

Dependencies:   mbed

main.cpp

Committer:
javiervicente
Date:
2021-12-09
Revision:
1:987fe977d122
Parent:
0:4182cf86e3bd

File content as of revision 1:987fe977d122:

#include "mbed.h"

#define botonPulsado 0
#define botonNoPulsado 1
#define tiempoMaximo 0.5

int horas=0;
int minutos=0;
int segundos=0;

Serial pc(USBTX, USBRX); // tx, rx

DigitalOut led(LED1);
DigitalIn boton(USER_BUTTON);
Timer temporizador;
Timer tiempoPulsado;

enum estados {normal,esperandoSoltarConf,esperandoPulsarHoras,esperandoSoltarHoras,esperandoPulsarMin,esperandoSoltarMin};
estados estado;

void intrementarReloj()
{
    if(temporizador>1.0) {
        temporizador.reset();
        segundos++;
        if (segundos==60) {
            segundos=0;
            minutos++;
            if(minutos==60) {
                minutos=0;
                horas++;
                if(horas==24) {
                    horas=0;
                }
            }
        }
    }
    pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
}

void funcionNormal()
{
    if(temporizador>1.0) {
        intrementarReloj();
    } else if(boton==botonPulsado) {
        tiempoPulsado.reset();
        tiempoPulsado.start();
        estado=esperandoSoltarConf;
    }
}



void funcionEsperandoSoltarConf()
{
    if(temporizador>1.0) {
        intrementarReloj();
    } else if (boton==botonNoPulsado) {
        if(tiempoPulsado>1) {
            estado=esperandoPulsarMin;
            pc.printf("Configurar Minutos\n");
        } else {
            estado=normal;
        }
    }

}


void funcionEsperandoPulsarMin()
{
    if (boton==botonPulsado) {
        tiempoPulsado.reset();
        tiempoPulsado.start();
        estado=esperandoSoltarMin;
    }
}

void funcionEsperandoSoltarMin()
{
    if (boton==botonNoPulsado) {
        if(tiempoPulsado>1) {
            estado=esperandoPulsarHoras;
            pc.printf("Configurar Horas\n");
        } else {
            minutos++;
            if (minutos==60) {
                minutos=0;
            }

            pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
            estado=esperandoPulsarMin;
        }
    }
}

void funcionEsperandoPulsarHoras()
{
    if (boton==botonPulsado) {
        tiempoPulsado.reset();
        tiempoPulsado.start();
        estado=esperandoSoltarHoras;
    }
}

void funcionEsperandoSoltarHoras()
{
    if (boton==botonNoPulsado) {
        if(tiempoPulsado>1) {
            estado=normal;
        } else {
            horas++;
            if (horas==24) {
                horas=0;
            }

            pc.printf("%02d:%02d:%02d\n",horas,minutos,segundos);
            estado=esperandoPulsarHoras;
        }
    }
}


int main()
{
    pc.baud(115200);
    estado=normal;
    temporizador.start();
    while(1) {
        switch(estado) {
            case normal:
                funcionNormal();
                break;
            case esperandoSoltarConf:
                funcionEsperandoSoltarConf();
                break;
            case esperandoPulsarHoras:
                funcionEsperandoPulsarHoras();
                break;
            case esperandoSoltarHoras:
                funcionEsperandoSoltarHoras();
                break;
            case esperandoPulsarMin:
                funcionEsperandoPulsarMin();
                break;
            case esperandoSoltarMin:
                funcionEsperandoSoltarMin();
                break;
        }
    }
}