PikaPiZero_RGB.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "PikaPiZero_RGB.h"
  2. #include <stdint.h>
  3. #include "BaseObj.h"
  4. #include "RGB_ASM.h"
  5. #include "dataStrs.h"
  6. #include "pika_bsp.h"
  7. #include "main.h"
  8. void RGB_reset() {
  9. GPIOB->BRR = GPIO_PIN_12; // reset
  10. delay_us(50);
  11. }
  12. #define RED 0x000800
  13. #define GREEN 0x080000
  14. #define BLUE 0x000008
  15. #define WHITE 0x080808
  16. #define CUTDOWN 0x000000
  17. void RGB_setVoid() {
  18. __asm("nop");
  19. }
  20. void PikaPiZero_RGB_enable(PikaObj* self) {
  21. __HAL_RCC_GPIOB_CLK_ENABLE();
  22. LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  23. /*Configure GPIO*/
  24. /* PB12 */
  25. GPIO_InitStruct.Pin = LL_GPIO_PIN_12;
  26. GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  27. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  28. LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  29. }
  30. void PikaPiZero_RGB_init(PikaObj* self) {}
  31. void PikaPiZero_RGB_red(PikaObj* self) {
  32. RGB_set(RED);
  33. RGB_set(RED);
  34. RGB_set(RED);
  35. RGB_set(RED);
  36. }
  37. void PikaPiZero_RGB_blue(PikaObj* self) {
  38. RGB_set(BLUE);
  39. RGB_set(BLUE);
  40. RGB_set(BLUE);
  41. RGB_set(BLUE);
  42. }
  43. void PikaPiZero_RGB_green(PikaObj* self) {
  44. RGB_set(GREEN);
  45. RGB_set(GREEN);
  46. RGB_set(GREEN);
  47. RGB_set(GREEN);
  48. }
  49. void PikaPiZero_RGB_white(PikaObj* self) {
  50. RGB_set(WHITE);
  51. RGB_set(WHITE);
  52. RGB_set(WHITE);
  53. RGB_set(WHITE);
  54. }
  55. void PikaPiZero_RGB_flow(PikaObj* self) {
  56. if (!obj_isArgExist(self, "flowState")) {
  57. obj_setInt(self, "flowState", 0);
  58. }
  59. int flowState = obj_getInt(self, "flowState");
  60. if (0 == flowState) {
  61. RGB_set(RED);
  62. RGB_set(BLUE);
  63. RGB_set(GREEN);
  64. RGB_set(WHITE);
  65. goto exit;
  66. }
  67. if (1 == flowState) {
  68. RGB_set(BLUE);
  69. RGB_set(GREEN);
  70. RGB_set(WHITE);
  71. RGB_set(RED);
  72. goto exit;
  73. }
  74. if (2 == flowState) {
  75. RGB_set(GREEN);
  76. RGB_set(WHITE);
  77. RGB_set(RED);
  78. RGB_set(BLUE);
  79. goto exit;
  80. }
  81. if (3 == flowState) {
  82. RGB_set(WHITE);
  83. RGB_set(RED);
  84. RGB_set(BLUE);
  85. RGB_set(GREEN);
  86. goto exit;
  87. }
  88. exit:
  89. obj_setInt(self, "flowState", (flowState + 1) % 4);
  90. }