|
@@ -0,0 +1,148 @@
|
|
|
|
|
+/**
|
|
|
|
|
+* @file LED_BREATH_ATY.c
|
|
|
|
|
+*
|
|
|
|
|
+* @param Project DEVICE_GENERAL_ATY_LIB
|
|
|
|
|
+*
|
|
|
|
|
+* @author ATY
|
|
|
|
|
+*
|
|
|
|
|
+* @copyright
|
|
|
|
|
+* - Copyright 2017 - 2025 MZ-ATY
|
|
|
|
|
+* - This code follows:
|
|
|
|
|
+* - MZ-ATY Various Contents Joint Statement -
|
|
|
|
|
+* <a href="https://mengze.top/MZ-ATY_VCJS">
|
|
|
|
|
+* https://mengze.top/MZ-ATY_VCJS</a>
|
|
|
|
|
+* - CC 4.0 BY-NC-SA -
|
|
|
|
|
+* <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
|
|
|
|
|
+* https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
|
|
|
|
|
+* - Your use will be deemed to have accepted the terms of this statement.
|
|
|
|
|
+*
|
|
|
|
|
+* @brief functions of LED for all embedded device
|
|
|
|
|
+*
|
|
|
|
|
+* @version
|
|
|
|
|
+* - 1_01_250814 > ATY
|
|
|
|
|
+* -# Preliminary version, first Release
|
|
|
|
|
+********************************************************************************
|
|
|
|
|
+*/
|
|
|
|
|
+
|
|
|
|
|
+#ifndef __LED_BREATH_ATY_C
|
|
|
|
|
+#define __LED_BREATH_ATY_C
|
|
|
|
|
+
|
|
|
|
|
+#include "LED_BREATH_ATY.h"
|
|
|
|
|
+
|
|
|
|
|
+/******************************* For user *************************************/
|
|
|
|
|
+
|
|
|
|
|
+/******************************************************************************/
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void SetLedBreathMode(struct LED_BREATH_ATY_Dev* dev, LedBreathMode_t mode)
|
|
|
|
|
+{
|
|
|
|
|
+ dev->breathMode = mode;
|
|
|
|
|
+ dev->breathTimer = 0;
|
|
|
|
|
+ dev->breathDir = 1;
|
|
|
|
|
+ dev->breathVal = 0;
|
|
|
|
|
+
|
|
|
|
|
+ dev->breathPauseCnt = 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void LedBreath(struct LED_BREATH_ATY_Dev* dev)
|
|
|
|
|
+{
|
|
|
|
|
+ dev->breathUpdate = 0;
|
|
|
|
|
+ dev->breathTimer++;
|
|
|
|
|
+
|
|
|
|
|
+ switch(dev->breathMode)
|
|
|
|
|
+ {
|
|
|
|
|
+ case BREATH_MODE_SMOOTH:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_STEP:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathStep = 10; dev->breathUpdate = 1; }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_FAST:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID / 4) { dev->breathUpdate = 1; }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_SLOW:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 4) { dev->breathUpdate = 1; }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_PAUSE_TOP:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
|
|
|
|
|
+ if(dev->breathVal == dev->breathMax && dev->breathPauseCnt < 10) {
|
|
|
|
|
+ dev->breathPauseCnt++;
|
|
|
|
|
+ dev->breathUpdate = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(dev->breathVal == dev->breathMax) {
|
|
|
|
|
+ dev->breathPauseCnt = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_PAUSE_BOTTOM:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
|
|
|
|
|
+ if(dev->breathVal == dev->breathMin && dev->breathPauseCnt < 10) {
|
|
|
|
|
+ dev->breathPauseCnt++;
|
|
|
|
|
+ dev->breathUpdate = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(dev->breathVal == dev->breathMin) {
|
|
|
|
|
+ dev->breathPauseCnt = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BREATH_MODE_PULSE:
|
|
|
|
|
+ if(dev->breathDir == -1){
|
|
|
|
|
+ dev->breathVal = 1;
|
|
|
|
|
+ dev->breathUpdate = 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ else{
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(dev->breathUpdate) {
|
|
|
|
|
+ dev->breathTimer = 0;
|
|
|
|
|
+ dev->breathVal += (dev->breathDir * dev->breathStep);
|
|
|
|
|
+
|
|
|
|
|
+ if(dev->breathVal >= dev->breathMax) {
|
|
|
|
|
+ dev->breathVal = dev->breathMax;
|
|
|
|
|
+ dev->breathDir = -1;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(dev->breathVal <= dev->breathMin) {
|
|
|
|
|
+ dev->breathVal = dev->breathMin;
|
|
|
|
|
+ dev->breathDir = 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ dev->pwmSet(dev->breathVal);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#endif /* __LED_BREATH_ATY_C */
|
|
|
|
|
+
|
|
|
|
|
+/************************************ etc *************************************/
|
|
|
|
|
+/* init */
|
|
|
|
|
+// void LED_1_Breath_PWM_SET(uint8_t breathVal){
|
|
|
|
|
+// // __HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
+// __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, breathVal * 65535 / 100);
|
|
|
|
|
+// }
|
|
|
|
|
+// struct LED_BREATH_ATY_Dev LED_BREATH_ATY_t_2 = {
|
|
|
|
|
+// .breathMode = BREATH_MODE_FAST,
|
|
|
|
|
+// .breathTimer = 0,
|
|
|
|
|
+// .breathDir = 1,
|
|
|
|
|
+// .breathVal = 0,
|
|
|
|
|
+// .breathPauseCnt = 0,
|
|
|
|
|
+// .breathStep = 1,
|
|
|
|
|
+// .breathMax = BREATH_LED_MAX,
|
|
|
|
|
+// .breathMin = BREATH_LED_MIN,
|
|
|
|
|
+// .breathUpdate = 0,
|
|
|
|
|
+// .pwmSet = LED_2_Breath_PWM_SET,
|
|
|
|
|
+// .lock = _ATY_UNLOCKED,
|
|
|
|
|
+// .debugEnable = 0,
|
|
|
|
|
+// .LOG = printf
|
|
|
|
|
+// };
|
|
|
|
|
+
|
|
|
|
|
+/* use */
|
|
|
|
|
+// LedBreath(&LED_BREATH_ATY_t_1); // put at 1ms cycle
|
|
|
|
|
+
|
|
|
|
|
+/******************************************************************************/
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/******************************** End Of File *********************************/
|