Clock Timer

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

main.cpp

Committer:
mosm
Date:
2018-12-14
Revision:
0:d27ad797b936

File content as of revision 0:d27ad797b936:

#include "mbed.h"
#include "LCD_DISCO_F429ZI.h"
#include <math.h>

LCD_DISCO_F429ZI lcd;

DigitalOut green(LED1, 0);
DigitalOut red(LED2, 1);

InterruptIn button(USER_BUTTON);

uint8_t str1[30], str2[30];

int qsecs = 0;
int seconds = 0;
int minutes = 0;
int hours = 0;

float multiplier = 9.5;

int radius = 70;
int centerx = 120;
int centery = 240;

float delaytime = 0.25;

struct save
{
    bool exists;
    int h;
    int m;
    int s;
}one, two;

void button_pressed()
{
    
    one.exists = 1;
    one.h = hours;
    one.m = minutes;
    one.s = seconds;
    
    red = 0;
    green = 1;   
    hours = 0; 
    minutes = 0;
    seconds = 0;
    qsecs = 0;
    
    lcd.Clear(LCD_COLOR_WHITE);
}

void button_notpressed()
{
   green = 0; 
   red = 0;
}

void DrawClock(int second)
{
    
    if (second == 0)
        lcd.Clear(LCD_COLOR_WHITE);

    double angle = second/multiplier;
    double endx = centerx+radius*sin(angle);
    double endy = centery-radius*cos(angle);
    lcd.DrawCircle(centerx, centery, radius);
    lcd.DrawLine(centerx, centery, endx, endy);
}

int main()
{   
    BSP_LCD_SetFont(&Font20);
    lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Timer Program", CENTER_MODE);
    lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"Mohammad Mustafa", CENTER_MODE);
    wait(2);
    lcd.Clear(LCD_COLOR_WHITE);
    
    one.exists = 0;
    
    while(1)
    {
        button.rise(&button_pressed);
        button.fall(&button_notpressed);
            
        if(button.read()==0)   
        {
            red = !red; 
            qsecs++;
        }   
        if(qsecs%4 == 0 && qsecs != 0)
        {
            qsecs = 0;
            seconds++;
        }
            
        if(seconds%60 == 0 && seconds != 0)
        {
            seconds = 0;
            minutes++;
        }
        if(minutes%12 == 0 && minutes != 0)
        {   
            minutes = 0;
            hours++;
        }
        
        if(one.exists)
        {
            sprintf((char*)str1, "Last Time: %d:%d:%d", one.h, one.m, one.s);
            lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&str1, LEFT_MODE);
        }
        
        sprintf((char*)str1, "HR:MIN:SEC:qSEC");
        sprintf((char*)str2, "%d:%d:%d:%d", hours, minutes, seconds, qsecs);
        lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&str1, CENTER_MODE);
        lcd.DisplayStringAt(0, LINE(7), (uint8_t *)&str2, CENTER_MODE);
        
        DrawClock(seconds%60);
        wait(delaytime);
    }
}