0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-03 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:hehung, 帖子地址:https://bbs.elecfans.com/jishu_2021276_1_1.html


`尝试了开发板的RGB功能。
RGB其实就是三个端口进行控制的,分别为10,11,和12.原理图如下:
224259d4xjee12e74pbcre.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. while (1) {
  43. switch (g_ledState) {
  44. case LED_ON:
  45. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  46. usleep(LED_INTERVAL_TIME_US);
  47. break;
  48. case LED_OFF:
  49. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  50. usleep(LED_INTERVAL_TIME_US);
  51. break;
  52. case LED_SPARK:
  53. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  54. usleep(LED_INTERVAL_TIME_US);
  55. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  56. usleep(LED_INTERVAL_TIME_US);
  57. break;
  58. default:
  59. usleep(LED_INTERVAL_TIME_US);
  60. break;
  61. }
  62. }
  63. return NULL;
  64. }
  65. static void Led0Entry(void)
  66. {
  67. osThreadAttr_t attr;
  68. GpioInit();
  69. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
  70. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
  71. attr.name = "LedTask";
  72. attr.attr_bits = 0U;
  73. attr.cb_mem = NULL;
  74. attr.cb_size = 0U;
  75. attr.stack_mem = NULL;
  76. attr.stack_size = LED_TASK_STACK_SIZE;
  77. attr.priority = LED_TASK_PRIO;
  78. if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
  79. printf("[Led0Task] Falied to create LedTask!
  80. ");
  81. }
  82. }
  83. SYS_RUN(Led0Entry);
  84. /*OLED board KEY Control - vased on ADC input*/
  85. static void *KeyTask(const char *arg)
  86. {
  87. (void)arg;
  88. WifiIotGpioValue Key_Status = WIFI_IOT_GPIO_VALUE1;
  89. WifiIotGpioValue Last_key_Status = WIFI_IOT_GPIO_VALUE1;
  90. // hi_u16 Key_adc_value = 0u;
  91. // hi_u32 ret = 0;
  92. while (1) {
  93. GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
  94. // printf("%d
  95. ", Key_Status);
  96. if((Key_Status == WIFI_IOT_GPIO_VALUE0) && (Last_key_Status != Key_Status))
  97. {
  98. RGB_ctrl ++;
  99. printf("Key pressed, RGB_ctrl = %d
  100. ", RGB_ctrl);
  101. }
  102. else
  103. {
  104. }
  105. // ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &Key_adc_value,
  106. // HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);
  107. // if (ret != HI_ERR_SUCCESS) {
  108. // printf("ADC Read Fail
  109. ");
  110. // }
  111. // else
  112. // {
  113. // // printf("ADC value = %d", Key_adc_value);
  114. // }
  115. // /*User 按键ADC值读出来大概为116*/
  116. // /*S1 按键ADC读出来大概为320*/
  117. // /*S2 按键ADC读出来大概为548*/
  118. // if(Key_adc_value <= 200)
  119. // {
  120. // printf("User key pressed
  121. ");
  122. // }
  123. // else if(Key_adc_value <= 400)
  124. // {
  125. // printf("User S1 pressed
  126. ");
  127. // }
  128. // else if(Key_adc_value <= 600)
  129. // {
  130. // printf("User S2 pressed
  131. ");
  132. // }
  133. // else
  134. // {
  135. // }
  136. Last_key_Status = Key_Status;
  137. usleep(KEY_INTERVAL_TIME_US);
  138. }
  139. return NULL;
  140. }
  141. static void KeyEntry(void)
  142. {
  143. osThreadAttr_t attr;
  144. GpioInit();
  145. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
  146. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
  147. // AdcRead();
  148. attr.name = "KeyTask";
  149. attr.attr_bits = 0U;
  150. attr.cb_mem = NULL;
  151. attr.cb_size = 0U;
  152. attr.stack_mem = NULL;
  153. attr.stack_size = KEY_TASK_STACK_SIZE;
  154. attr.priority = KEY_TASK_PRIO;
  155. if (osThreadNew((osThreadFunc_t)KeyTask, NULL, &attr) == NULL) {
  156. printf("[KeyTask] Falied to create KeyTask!
  157. ");
  158. }
  159. }
  160. SYS_RUN(KeyEntry);
  161. static void *RGBTask(const char *arg)
  162. {
  163. (void)arg;
  164. while (1) {
  165. // GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
  166. switch(RGB_ctrl)
  167. {
  168. case 0:
  169. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
  170. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  171. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  172. usleep(RGB_INTERVAL_TIME_US);
  173. break;
  174. case 1:
  175. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  176. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
  177. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  178. usleep(RGB_INTERVAL_TIME_US);
  179. break;
  180. case 2:
  181. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  182. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  183. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
  184. usleep(RGB_INTERVAL_TIME_US);
  185. break;
  186. case 3:
  187. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
  188. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
  189. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
  190. usleep(RGB_INTERVAL_TIME_US);
  191. break;
  192. case 4:
  193. RGB_ctrl = 0;
  194. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  195. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  196. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
  197. usleep(RGB_INTERVAL_TIME_US);
  198. break;
  199. }
  200. }
  201. return NULL;
  202. }
  203. static void RGBEntry(void)
  204. {
  205. osThreadAttr_t attr;
  206. GpioInit();
  207. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  208. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
  209. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  210. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
  211. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  212. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
  213. // AdcRead();
  214. attr.name = "RGBTask";
  215. attr.attr_bits = 0U;
  216. attr.cb_mem = NULL;
  217. attr.cb_size = 0U;
  218. attr.stack_mem = NULL;
  219. attr.stack_size = RGB_TASK_STACK_SIZE;
  220. attr.priority = RGB_TASK_PRIO;
  221. if (osThreadNew((osThreadFunc_t)RGBTask, NULL, &attr) == NULL) {
  222. printf("[KeyTask] Falied to create KeyTask!
  223. ");
  224. }
  225. }
  226. SYS_RUN(RGBEntry);
复制代码


运行效果:
224611ftttmp0fnrfmtwh1.jpg
`224302cc5e3i4tinr38lcz.png 
224614k4oqqofbd4dh4pdo.jpg
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    15

    文章

    2380

    浏览量

    128900
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35580
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    7688
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    浅谈Wi-Fi 6E与Wi-Fi 7的关键器件——BAW滤波器新技术

    6E也能在6GHz频段工作。2024年1月,Wi-Fi联盟发布了Wi-Fi CERTIFIED 7认证标准,标志着Wi-Fi 7正式问世。
    发表于 09-19 18:29 1321次阅读
    浅谈<b class='flag-5'>Wi-Fi</b> 6E与<b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b>的关键器件——BAW滤波器新技术

    如何更新 NuMaker IoT 板上的 Wi-Fi 模块固件?

    更新 NuMaker IoT 板上的 Wi-Fi 模块固件
    发表于 09-04 08:28

    LitePoint Wi-Fi测试软件减轻客户设计负担

    Wi-Fi 7于一年多前获得Wi-Fi联盟认证以来,作为最新一代通信技术,Wi-Fi正逐步成为用户实现无所不在无线连接的新选择。随着每一代Wi-F
    的头像 发表于 08-06 15:34 895次阅读
    LitePoint <b class='flag-5'>Wi-Fi</b>测试软件减轻客户设计负担

    锐捷网络:Wi-Fi 7加速演进,2025年进入快速爬坡期

    随着4K/8K、VR/AR、远程医疗、工业物联网等新型应用的不断涌现,家庭、企业和工业环境对Wi-Fi网络提出了更高要求。在此驱动下,行业正向Wi-Fi 7加速演进,而2025年成为Wi-Fi
    的头像 发表于 08-01 10:29 843次阅读
    锐捷网络:<b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b>加速演进,2025年进入快速爬坡期

    Wi-Fi 8:开启极高可靠性 (UHR) 连接的新纪元——1

    已着手进行Wi-Fi 8 相关技术功能的制定讨论与研究。Wi-Fi 7的下一代自然就是Wi-Fi 8,正如市面上智能手机的命名逻辑一样,Wi-Fi
    发表于 06-13 11:09

    贸泽电子开售Qorvo Wi-Fi 7前端模块

    入多输出(MIMO)功能,全频段Wi-Fi 5、6和6E。Wi-Fi 7可确保更高吞吐量、更低延迟和更高数据速率。多链路操作有助于建立多个有源链路,通过选择最可用的传输链路来提高峰值数
    的头像 发表于 06-12 10:21 901次阅读

    适用于 Wi-Fi 7 应用的 5 GHz 高功率前端模块 skyworksinc

    电子发烧友网为你提供()适用于 Wi-Fi 7 应用的 5 GHz 高功率前端模块相关产品参数、数据手册,更有适用于 Wi-Fi 7 应用的 5 GHz 高功率前端模块的引脚图、接线图
    发表于 05-27 18:33
    适用于 <b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b> 应用的 5 GHz 高功率前端模块 skyworksinc

    华为加速Wi-Fi 7技术在行业场景的应用

    华为数据通信创新峰会2025期间,华为面向中东中亚地区举办第三季“Imagine Wi-Fi 7 to Reality”创新应用大赛颁奖典礼,9位参赛者凭借Wi-Fi 7的应用创新成果
    的头像 发表于 05-21 16:09 1000次阅读

    适用于 Wi-Fi 7 应用的 2.4 GHz 高功率前端模块 skyworksinc

    电子发烧友网为你提供()适用于 Wi-Fi 7 应用的 2.4 GHz 高功率前端模块相关产品参数、数据手册,更有适用于 Wi-Fi 7 应用的 2.4 GHz 高功率前端模块的引脚图
    发表于 05-12 18:30
    适用于 <b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b> 应用的 2.4 GHz 高功率前端模块 skyworksinc

    nRF Cloud Wi-Fi 定位服务

    、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通过利用 nRF Cloud 的优化定位算法,基于 Nordic SoC 和 模组的产品可在定位用例
    发表于 04-17 15:07

    Wi-Fi 定位服务

    Wi-Fi 是一种著名的无线网络技术,用于设备的局域网和互联网接入。Wi-Fi 通过 Wi-Fi 网络为家庭、办公室和学校等环境提供便捷的无线互联网接入服务。 Wi-Fi 定位是一种
    发表于 04-17 15:01

    Wi-Fi 7 与频率控制的关系

    作者:Poornima Apte 投稿人:DigiKey 北美编辑 2024-12-18 Wi-Fi 需要使用一定范围的无线电频率才能让设备进行通信拨号。多年来,Wi-Fi 一直使用 2.4 GHz
    的头像 发表于 01-25 14:45 1189次阅读
    <b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b> 与频率控制的关系

    华为海思正式进入Wi-Fi FEM赛道?

    转载自——钟林谈芯 昨天在网上看到一份九联UNR050 BE3600无线路由器拆机报告,Wi-Fi主芯片是海思新款Wi-Fi7芯片Hi1155,速率2.5G。 在海思AP Wi-Fi芯片系列中,还有
    发表于 12-11 17:42

    摩尔斯微电子发布Wi-Fi HaLow评估套件,加速物联网开发

    。 MM6108-EKH05评估套件充分发挥了Wi-Fi HaLow技术的强大功能,支持从智能家居到工业自动化的广泛应用。其数据传输速率高达32.5 Mbps,并能在1 GHz以下频率范围内进行可编程操作,是物联网
    的头像 发表于 12-11 13:40 1052次阅读

    Wi-Fi 4到Wi-Fi 7:网速飙升40倍的无线革命

    1 Wi-Fi技术的快速发展 每一代新的Wi-Fi协议发布,都会带来更高的无线速率。   从Wi-Fi 4到Wi-Fi 7:无线网络技术显著
    的头像 发表于 12-09 10:10 1610次阅读
    从<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> <b class='flag-5'>7</b>:网速飙升40倍的无线革命