/** * @file LED_BREATH_ATY.c * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2026 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief functions of LED for C platform * * @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, // }; /* use */ // LedBreath(&LED_BREATH_ATY_t_1); // put at 1ms cycle /******************************************************************************/ /******************************** End Of File *********************************/