LED_BREATH_ATY.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. * @file LED_BREATH_ATY.c
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief functions of LED for C platform
  20. *
  21. * @version
  22. * - 1_01_250814 > ATY
  23. * -# Preliminary version, first Release
  24. ********************************************************************************
  25. */
  26. #ifndef __LED_BREATH_ATY_C
  27. #define __LED_BREATH_ATY_C
  28. #include "LED_BREATH_ATY.h"
  29. /******************************* For user *************************************/
  30. /******************************************************************************/
  31. void SetLedBreathMode(struct LED_BREATH_ATY_Dev* dev, LedBreathMode_t mode)
  32. {
  33. dev->breathMode = mode;
  34. dev->breathTimer = 0;
  35. dev->breathDir = 1;
  36. dev->breathVal = 0;
  37. dev->breathPauseCnt = 0;
  38. }
  39. void LedBreath(struct LED_BREATH_ATY_Dev* dev)
  40. {
  41. dev->breathUpdate = 0;
  42. dev->breathTimer++;
  43. switch(dev->breathMode)
  44. {
  45. case BREATH_MODE_SMOOTH:
  46. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
  47. break;
  48. case BREATH_MODE_STEP:
  49. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathStep = 10; dev->breathUpdate = 1; }
  50. break;
  51. case BREATH_MODE_FAST:
  52. if(dev->breathTimer >= BREATH_LED_SPEED_MID / 4) { dev->breathUpdate = 1; }
  53. break;
  54. case BREATH_MODE_SLOW:
  55. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 4) { dev->breathUpdate = 1; }
  56. break;
  57. case BREATH_MODE_PAUSE_TOP:
  58. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
  59. if(dev->breathVal == dev->breathMax && dev->breathPauseCnt < 10) {
  60. dev->breathPauseCnt++;
  61. dev->breathUpdate = 0;
  62. }
  63. else if(dev->breathVal == dev->breathMax) {
  64. dev->breathPauseCnt = 0;
  65. }
  66. break;
  67. case BREATH_MODE_PAUSE_BOTTOM:
  68. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
  69. if(dev->breathVal == dev->breathMin && dev->breathPauseCnt < 10) {
  70. dev->breathPauseCnt++;
  71. dev->breathUpdate = 0;
  72. }
  73. else if(dev->breathVal == dev->breathMin) {
  74. dev->breathPauseCnt = 0;
  75. }
  76. break;
  77. case BREATH_MODE_PULSE:
  78. if(dev->breathDir == -1){
  79. dev->breathVal = 1;
  80. dev->breathUpdate = 1;
  81. }
  82. else{
  83. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
  84. }
  85. default:
  86. if(dev->breathTimer >= BREATH_LED_SPEED_MID * 2) { dev->breathUpdate = 1; }
  87. break;
  88. }
  89. if(dev->breathUpdate) {
  90. dev->breathTimer = 0;
  91. dev->breathVal += (dev->breathDir * dev->breathStep);
  92. if(dev->breathVal >= dev->breathMax) {
  93. dev->breathVal = dev->breathMax;
  94. dev->breathDir = -1;
  95. }
  96. else if(dev->breathVal <= dev->breathMin) {
  97. dev->breathVal = dev->breathMin;
  98. dev->breathDir = 1;
  99. }
  100. dev->pwmSet(dev->breathVal);
  101. }
  102. }
  103. #endif /* __LED_BREATH_ATY_C */
  104. /************************************ etc *************************************/
  105. /* init */
  106. // void LED_1_Breath_PWM_SET(uint8_t breathVal){
  107. // // __HAL_TIM_SET_COUNTER(&htim2, 0);
  108. // __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, breathVal * 65535 / 100);
  109. // }
  110. // struct LED_BREATH_ATY_Dev LED_BREATH_ATY_t_2 = {
  111. // .breathMode = BREATH_MODE_FAST,
  112. // .breathTimer = 0,
  113. // .breathDir = 1,
  114. // .breathVal = 0,
  115. // .breathPauseCnt = 0,
  116. // .breathStep = 1,
  117. // .breathMax = BREATH_LED_MAX,
  118. // .breathMin = BREATH_LED_MIN,
  119. // .breathUpdate = 0,
  120. // .pwmSet = LED_2_Breath_PWM_SET,
  121. // .lock = __ATY_UNLOCKED,
  122. // .debugEnable = 0,
  123. // };
  124. /* use */
  125. // LedBreath(&LED_BREATH_ATY_t_1); // put at 1ms cycle
  126. /******************************************************************************/
  127. /******************************** End Of File *********************************/