【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】7.RGB操作 - HarmonyOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

hehung 关注 私信
[文章]

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】7.RGB操作

`尝试了开发板的RGB功能。
RGB其实就是三个端口进行控制的,分别为10,11,和12.原理图如下:
2.png

我使用按键按下分别控制三个LED亮灭,程序实现上比较简单,如果扩展功能的话可以通过PWM控制这三个引脚实现亮度调节。

代码如下:
  1. /*this is my first application*/
  2. /*2020/11/08*/

  3. #include
  4. #include "ohos_init.h"
  5. #include "ohos_types.h"
  6. #include

  7. #include

  8. #include "ohos_init.h"
  9. #include "cmsis_os2.h"
  10. #include "wifiiot_gpio.h"
  11. #include "wifiiot_gpio_ex.h"
  12. #include "wifiiot_adc.h"

  13. #include
  14. #include
  15. #include
  16. #include

  17. #include



  18. #define LED_INTERVAL_TIME_US 500000    /*500ms*/
  19. #define LED_TASK_STACK_SIZE 512
  20. #define LED_TASK_PRIO 25

  21. #define KEY_INTERVAL_TIME_US 10000    /*10ms*/
  22. #define KEY_TASK_STACK_SIZE 1024
  23. #define KEY_TASK_PRIO 24

  24. #define RGB_INTERVAL_TIME_US 10000    /*10ms*/
  25. #define RGB_TASK_STACK_SIZE 1024
  26. #define RGB_TASK_PRIO 23

  27. static void *LedTask(const char *arg);
  28. static void *KeyTask(const char *arg);
  29. static void *RGBTask(const char *arg);

  30. /*LED Control*/
  31. enum LedState {
  32.     LED_ON = 0,
  33.     LED_OFF,
  34.     LED_SPARK,
  35. };

  36. uint8_t RGB_ctrl = 0;


  37. static void *LedTask(const char *arg)
  38. {
  39.     (void)arg;
  40.     enum LedState g_ledState = LED_SPARK;
  41.     g_ledState = LED_SPARK;
  42.    
  43.     while (1) {
  44.         switch (g_ledState) {
  45.             case LED_ON:
  46.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  47.                 usleep(LED_INTERVAL_TIME_US);
  48.                 break;
  49.             case LED_OFF:
  50.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  51.                 usleep(LED_INTERVAL_TIME_US);
  52.                 break;
  53.             case LED_SPARK:
  54.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  55.                 usleep(LED_INTERVAL_TIME_US);
  56.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  57.                 usleep(LED_INTERVAL_TIME_US);
  58.                 break;
  59.             default:
  60.                 usleep(LED_INTERVAL_TIME_US);
  61.                 break;
  62.         }
  63.     }

  64.     return NULL;
  65. }

  66. static void Led0Entry(void)
  67. {
  68.     osThreadAttr_t attr;

  69.     GpioInit();
  70.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
  71.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);

  72.     attr.name = "LedTask";
  73.     attr.attr_bits = 0U;
  74.     attr.cb_mem = NULL;
  75.     attr.cb_size = 0U;
  76.     attr.stack_mem = NULL;
  77.     attr.stack_size = LED_TASK_STACK_SIZE;
  78.     attr.priority = LED_TASK_PRIO;

  79.     if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
  80.         printf("[Led0Task] Falied to create LedTask!
  81. ");
  82.     }
  83. }
  84. SYS_RUN(Led0Entry);

  85. /*OLED board KEY Control - vased on ADC input*/
  86. static void *KeyTask(const char *arg)
  87. {
  88.     (void)arg;

  89.     WifiIotGpioValue Key_Status = WIFI_IOT_GPIO_VALUE1;
  90.     WifiIotGpioValue Last_key_Status = WIFI_IOT_GPIO_VALUE1;
  91.     // hi_u16 Key_adc_value = 0u;
  92.     // hi_u32 ret = 0;

  93.     while (1) {
  94.         GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
  95. //        printf("%d
  96. ", Key_Status);

  97.         if((Key_Status == WIFI_IOT_GPIO_VALUE0) && (Last_key_Status != Key_Status))
  98.         {
  99.             RGB_ctrl ++;
  100.             printf("Key pressed, RGB_ctrl = %d
  101. ", RGB_ctrl);
  102.         }
  103.         else
  104.         {

  105.         }

  106. //         ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &Key_adc_value,
  107. //                     HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);
  108. //         if (ret != HI_ERR_SUCCESS) {
  109. //             printf("ADC Read Fail
  110. ");
  111. //         }
  112. //         else
  113. //         {
  114. // //            printf("ADC value = %d", Key_adc_value);
  115. //         }
  116. //         /*User 按键ADC值读出来大概为116*/
  117. //         /*S1 按键ADC读出来大概为320*/
  118. //         /*S2 按键ADC读出来大概为548*/
  119. //         if(Key_adc_value <= 200)
  120. //         {
  121. //             printf("User key pressed
  122. ");
  123. //         }
  124. //         else if(Key_adc_value <= 400)
  125. //         {
  126. //             printf("User S1 pressed
  127. ");
  128. //         }   
  129. //         else if(Key_adc_value <= 600)
  130. //         {
  131. //             printf("User S2 pressed
  132. ");
  133. //         }
  134. //         else
  135. //         {

  136. //         }

  137.         Last_key_Status = Key_Status;
  138.         usleep(KEY_INTERVAL_TIME_US);
  139.     }

  140.     return NULL;
  141. }

  142. static void KeyEntry(void)
  143. {
  144.     osThreadAttr_t attr;

  145.     GpioInit();
  146.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
  147.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
  148. //    AdcRead();

  149.     attr.name = "KeyTask";
  150.     attr.attr_bits = 0U;
  151.     attr.cb_mem = NULL;
  152.     attr.cb_size = 0U;
  153.     attr.stack_mem = NULL;
  154.     attr.stack_size = KEY_TASK_STACK_SIZE;
  155.     attr.priority = KEY_TASK_PRIO;

  156.     if (osThreadNew((osThreadFunc_t)KeyTask, NULL, &attr) == NULL) {
  157.         printf("[KeyTask] Falied to create KeyTask!
  158. ");
  159.     }
  160. }
  161. SYS_RUN(KeyEntry);


  162. static void *RGBTask(const char *arg)
  163. {
  164.     (void)arg;

  165.     while (1) {
  166. //        GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
  167.         switch(RGB_ctrl)
  168.         {
  169.             case 0:
  170.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
  171.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  172.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  173.                 usleep(RGB_INTERVAL_TIME_US);
  174.                 break;
  175.             case 1:
  176.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  177.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
  178.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  179.                 usleep(RGB_INTERVAL_TIME_US);
  180.                 break;
  181.             case 2:
  182.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  183.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  184.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
  185.                 usleep(RGB_INTERVAL_TIME_US);
  186.                 break;
  187.             case 3:
  188.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
  189.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
  190.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
  191.                 usleep(RGB_INTERVAL_TIME_US);
  192.                 break;
  193.             case 4:
  194.                 RGB_ctrl = 0;
  195.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  196.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  197.                 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  198.                 usleep(RGB_INTERVAL_TIME_US);
  199.                 break;
  200.         }
  201.         
  202.     }

  203.     return NULL;
  204. }

  205. static void RGBEntry(void)
  206. {
  207.     osThreadAttr_t attr;

  208.     GpioInit();
  209.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  210.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);

  211.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  212.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);

  213.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  214.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
  215. //    AdcRead();

  216.     attr.name = "RGBTask";
  217.     attr.attr_bits = 0U;
  218.     attr.cb_mem = NULL;
  219.     attr.cb_size = 0U;
  220.     attr.stack_mem = NULL;
  221.     attr.stack_size = RGB_TASK_STACK_SIZE;
  222.     attr.priority = RGB_TASK_PRIO;

  223.     if (osThreadNew((osThreadFunc_t)RGBTask, NULL, &attr) == NULL) {
  224.         printf("[KeyTask] Falied to create KeyTask!
  225. ");
  226.     }
  227. }
  228. SYS_RUN(RGBEntry);


运行效果:
4.jpg
` 1.png 5.jpg

VID_20201221_223410

更多回帖

×
发帖