/* * GccApplication1.c * * Created: 10.07.2018 19:39:28 * Author : dozed */ #define button1 1234 #define button2 5678 #define button3 whatever typedef enum {CLOCK_INIT = 0, CLOCK_IDLE, CLOCK_ALARM, CLOCK_STOPWATCH_RUNNING, CLOCK_STOPWATCH_STOPPED, CLOCK_STOPWATCH_NOT_SET, CLOCK_USER_INPUT, CLOCK_SET_TIME} clock_state_e; clock_state_e clock_old_state = NULL; clock_state_e clock_state = CLOCK_INIT; clock_state_e clock_new_state = CLOCK_INIT; int counter = 0; //the counter variable that is being set by the interrupt //variables for the alarm bool alarm_active = false; bool alarm_triggered = false; int alarm_time = 0; //variables for the stopwatch bool stopwatch_running = false; bool stopwatch_set = false int stopwatch_started = 0; int stopwatch_stopped = 0; //other variables int user_input = 0; //variable to store user input int current_time = 0; int main(void) { //-----------INIT---------------- //SETUP PINS (needs to be done) //attach interrupt (needs to be done) //-----------END INIT------------ while (1) { timer_state = timer_new_state; switch(clock_state){ case CLOCK_INIT: //do some init stuff... lcd.init(); //I know, it's just c but I don't care //INIT done -> change to IDLE clock_new_state = CLOCK_IDLE; break; case CLOCK_IDLE: //IDLE MODE //print the IDLE Screen lcd.goto(0,0); lcd.print(counter /*do some claculations*/); lcd.goto(0,1); lcd.print("< current time >"); //check buttons if(button_pressed(1)){ timer_new_state = CLOCK_ALARM; } else if(button_pressed(2){ //do something } else if(button_pressed(3)){ //do something } case CLOCK_ALARM: //CLOCK ALARM //check if the alarm time was set if(user_input == 0){ alarm_time = user_input; user_input = 0; } if(alarm_active){ lcd.goto(0,0); lcd.print(current_time); lcd.goto(0,1); lcd.print("alarm >"); } } //do some other stuff (like checking if an alarm has been triggered) } } bool button_pressed(int button_number) { bool button_state = /*check the state of the button here*/; return(button_state); }