A simple alarm clock for the 1 day workshop presented by Skool and ARM Hungary in 2015.
Dependencies: Skool_wkshp_lib2015 mbed
Diff: mbed_clock.cpp
- Revision:
- 4:2c4154aae49e
- Parent:
- 2:e084bab7bc1c
--- a/mbed_clock.cpp Fri Sep 25 14:05:41 2015 +0000 +++ b/mbed_clock.cpp Thu Oct 01 19:26:27 2015 +0000 @@ -12,6 +12,7 @@ uint32_t Systck_cnt = 0; uint32_t Systck_evt = 0; +uint32_t RGB_sel = 0; extern uint32_t Index; extern uint32_t new_key; @@ -45,8 +46,33 @@ Systck_evt++; } +void Drive_RGB_LED(void) { + switch (RGB_sel % 3) { + case 0: + R_LED = 0; + G_LED = 1; + B_LED = 1; + break; + case 1: + R_LED = 1; + G_LED = 0; + B_LED = 1; + break; + case 2: + R_LED = 1; + G_LED = 1; + B_LED = 0; + break; + default: + R_LED = 1; + G_LED = 1; + B_LED = 1; + break; + } + RGB_sel++; +} + int main() { - uint32_t RGB_sel = 0; uint32_t dummy; int i; float tone; @@ -66,9 +92,9 @@ init_ser_lcd(); write_ser_lcd(0x80, false); // set DDRAM addr to 0x00 - write_ser_text((char *)" Alarm clock ", 16); + write_ser_text((char *)"ARM SKOOL",16); write_ser_lcd(0xC0, false); // set DDRAM addr to 0x40, beginning of 2nd line - write_ser_text((char *)"ARM SKOOL",16); + write_ser_text((char *)" Alarm clock ", 16); wait(3.0); @@ -84,6 +110,7 @@ if ((Index < 0xFF) & (Keytable[Index] == '#')) { Main_FSM_States = IN_MENU; MainMenu_Handler(); + if (Main_FSM_States == FINISH) {Main_FSM_States = IN_LOOP;} } new_key = 0; Index = 0xFF; @@ -105,6 +132,7 @@ if (AlarmA_triggered) { AlarmA_triggered = 0; ShowAlarmText(); + Drive_RGB_LED(); for (i = 0; i < 54; i++) { if (song[i][0] > 0.0f) { tone = float(1.0f/scala[song[i][0]]); @@ -115,11 +143,13 @@ } wait(float(1.0f/song[i][1])); if ((new_key != 0) & (Index < 0xFF) & (Keytable[Index] == '#')) { + speaker = 0; i = 54; new_key = 0; Index = 0xFF; HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); } + Drive_RGB_LED(); } write_ser_lcd(0x01, false); // Clear display wait_us(1100); @@ -127,39 +157,19 @@ wait_us(30); ShowTime(); ShowDate(); + R_LED = 1; + G_LED = 1; + B_LED = 1; } if (Systck_cnt > 5) { - switch (RGB_sel % 3) { - case 0: - R_LED = 0; - G_LED = 1; - B_LED = 1; - break; - case 1: - R_LED = 1; - G_LED = 0; - B_LED = 1; - break; - case 2: - R_LED = 1; - G_LED = 1; - B_LED = 0; - break; - default: - R_LED = 1; - G_LED = 1; - B_LED = 1; - break; - } - RGB_sel++; Systck_cnt = 0; } //HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); - //__WFI(); - while (Systck_evt == 0) { - dummy++; - } + __WFI(); + //while (Systck_evt == 0) { + // dummy++; + //} Systck_evt = 0; } }