Wakeup Light with touch user interface, anti-aliased Font, SD card access and RTC usage on STM32F746NG-DISCO board
Dependencies: BSP_DISCO_F746NG_patch_fixed LCD_DISCO_F746NG TS_DISCO_F746NG FATFileSystem TinyJpgDec_interwork mbed-src
Diff: LED.cpp
- Revision:
- 1:35e2ad5cd1fe
- Child:
- 3:ecf7f1f8d749
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LED.cpp Thu Oct 29 05:00:04 2015 +0000 @@ -0,0 +1,71 @@ +#include "WakeupLight.h" + +#define COLOR_CREATE(_RED_,_GREEN_,_BLUE_,_WHITE_) (_RED_ | (_GREEN_ << 8) | (_BLUE_ << 16) | (_WHITE_ <<24)) +#define COLOR_RED(_COLOR_) (_COLOR_ & 0xFF) +#define COLOR_GREEN(_COLOR_) ((_COLOR_ >> 8) & 0xFF) +#define COLOR_BLUE(_COLOR_) ((_COLOR_ >> 16) & 0xFF) +#define COLOR_WHITE(_COLOR_) ((_COLOR_ >> 24) & 0xFF) + +#define LED_PERIOD 10 + +PwmOut ledBlue(PB_15); +PwmOut ledRed(PH_6); +PwmOut ledGreen(PB_4); +PwmOut ledWhite(PA_15); +Ticker ledTicker; +int32_t ledAnimationStep; +LED_ANIMATION_ENUM ledAnimation; + +void LED_SetColor(int32_t color) +{ + DPrintfCore("LED_SetColor: 0x%08X.\r\n",color); + + ledRed.write(1.0 * COLOR_RED(color) / 255.0); + ledGreen.write(1.0 * COLOR_GREEN(color) / 255.0); + ledBlue.write(1.0 * COLOR_BLUE(color) / 255.0); + ledWhite.write(1.0 * COLOR_WHITE(color) / 255.0); +} + +void LED_Callback() +{ + int32_t color; + + DPrintfCore("LED_Callback: Animation: %u, Step: %u.\r\n",ledAnimation,ledAnimationStep); + + if (ledAnimation==LAE_WAKEUP) + { + if (ledAnimationStep<255) + { + ledAnimationStep++; + color=COLOR_CREATE((ledAnimationStep/2),ledAnimationStep,0,0); + LED_SetColor(color); + } + else if (ledAnimationStep<(255+180)) + { + ledAnimationStep++; + + color=COLOR_CREATE(128,255,0,(ledAnimationStep-255)); + LED_SetColor(color); + } + } +} + +void LED_StartAnimation(LED_ANIMATION_ENUM animation) +{ + ledAnimationStep=0; + ledAnimation=animation; +} + +void LED_Init(void) +{ + ledRed.period_ms(LED_PERIOD); + ledGreen.period_ms(LED_PERIOD); + ledBlue.period_ms(LED_PERIOD); + ledWhite.period_ms(LED_PERIOD); + + LED_SetColor(COLOR_CREATE(0,0,0,0)); + + LED_StartAnimation(LAE_NONE); + + ledTicker.attach(&LED_Callback,0.05); +}