本文來源電子發(fā)燒友社區(qū),作者:hehung, 帖子地址:https://bbs.elecfans.com/jishu_2021276_1_1.html
`嘗試了開發(fā)板的RGB功能。
RGB其實就是三個端口進(jìn)行控制的,分別為10,11,和12.原理圖如下:

我使用按鍵按下分別控制三個LED亮滅,程序?qū)崿F(xiàn)上比較簡單,如果擴(kuò)展功能的話可以通過PWM控制這三個引腳實現(xiàn)亮度調(diào)節(jié)。
代碼如下:
復(fù)制代碼
運行效果:

`
?
`嘗試了開發(fā)板的RGB功能。
RGB其實就是三個端口進(jìn)行控制的,分別為10,11,和12.原理圖如下:

我使用按鍵按下分別控制三個LED亮滅,程序?qū)崿F(xiàn)上比較簡單,如果擴(kuò)展功能的話可以通過PWM控制這三個引腳實現(xiàn)亮度調(diào)節(jié)。
代碼如下:
- /*this is my first application*/
- /*2020/11/08*/
- #include
- #include "ohos_init.h"
- #include "ohos_types.h"
- #include
- #include
- #include "ohos_init.h"
- #include "cmsis_os2.h"
- #include "wifiiot_gpio.h"
- #include "wifiiot_gpio_ex.h"
- #include "wifiiot_adc.h"
- #include
- #include
- #include
- #include
- #include
- #define LED_INTERVAL_TIME_US 500000 /*500ms*/
- #define LED_TASK_STACK_SIZE 512
- #define LED_TASK_PRIO 25
- #define KEY_INTERVAL_TIME_US 10000 /*10ms*/
- #define KEY_TASK_STACK_SIZE 1024
- #define KEY_TASK_PRIO 24
- #define RGB_INTERVAL_TIME_US 10000 /*10ms*/
- #define RGB_TASK_STACK_SIZE 1024
- #define RGB_TASK_PRIO 23
- static void *LedTask(const char *arg);
- static void *KeyTask(const char *arg);
- static void *RGBTask(const char *arg);
- /*LED Control*/
- enum LedState {
- LED_ON = 0,
- LED_OFF,
- LED_SPARK,
- };
- uint8_t RGB_ctrl = 0;
- static void *LedTask(const char *arg)
- {
- (void)arg;
- enum LedState g_ledState = LED_SPARK;
- g_ledState = LED_SPARK;
- while (1) {
- switch (g_ledState) {
- case LED_ON:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_OFF:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_SPARK:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
- usleep(LED_INTERVAL_TIME_US);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- default:
- usleep(LED_INTERVAL_TIME_US);
- break;
- }
- }
- return NULL;
- }
- static void Led0Entry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
- attr.name = "LedTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = LED_TASK_STACK_SIZE;
- attr.priority = LED_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
- printf("[Led0Task] Falied to create LedTask!
- ");
- }
- }
- SYS_RUN(Led0Entry);
- /*OLED board KEY Control - vased on ADC input*/
- static void *KeyTask(const char *arg)
- {
- (void)arg;
- WifiIotGpioValue Key_Status = WIFI_IOT_GPIO_VALUE1;
- WifiIotGpioValue Last_key_Status = WIFI_IOT_GPIO_VALUE1;
- // hi_u16 Key_adc_value = 0u;
- // hi_u32 ret = 0;
- while (1) {
- GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
- // printf("%d
- ", Key_Status);
- if((Key_Status == WIFI_IOT_GPIO_VALUE0) && (Last_key_Status != Key_Status))
- {
- RGB_ctrl ++;
- printf("Key pressed, RGB_ctrl = %d
- ", RGB_ctrl);
- }
- else
- {
- }
- // ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &Key_adc_value,
- // HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);
- // if (ret != HI_ERR_SUCCESS) {
- // printf("ADC Read Fail
- ");
- // }
- // else
- // {
- // // printf("ADC value = %d", Key_adc_value);
- // }
- // /*User 按鍵ADC值讀出來大概為116*/
- // /*S1 按鍵ADC讀出來大概為320*/
- // /*S2 按鍵ADC讀出來大概為548*/
- // if(Key_adc_value <= 200)
- // {
- // printf("User key pressed
- ");
- // }
- // else if(Key_adc_value <= 400)
- // {
- // printf("User S1 pressed
- ");
- // }
- // else if(Key_adc_value <= 600)
- // {
- // printf("User S2 pressed
- ");
- // }
- // else
- // {
- // }
- Last_key_Status = Key_Status;
- usleep(KEY_INTERVAL_TIME_US);
- }
- return NULL;
- }
- static void KeyEntry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
- // AdcRead();
- attr.name = "KeyTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = KEY_TASK_STACK_SIZE;
- attr.priority = KEY_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)KeyTask, NULL, &attr) == NULL) {
- printf("[KeyTask] Falied to create KeyTask!
- ");
- }
- }
- SYS_RUN(KeyEntry);
- static void *RGBTask(const char *arg)
- {
- (void)arg;
- while (1) {
- // GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
- switch(RGB_ctrl)
- {
- case 0:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
- usleep(RGB_INTERVAL_TIME_US);
- break;
- case 1:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
- usleep(RGB_INTERVAL_TIME_US);
- break;
- case 2:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
- usleep(RGB_INTERVAL_TIME_US);
- break;
- case 3:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
- usleep(RGB_INTERVAL_TIME_US);
- break;
- case 4:
- RGB_ctrl = 0;
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0);
- usleep(RGB_INTERVAL_TIME_US);
- break;
- }
- }
- return NULL;
- }
- static void RGBEntry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
- // AdcRead();
- attr.name = "RGBTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = RGB_TASK_STACK_SIZE;
- attr.priority = RGB_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)RGBTask, NULL, &attr) == NULL) {
- printf("[KeyTask] Falied to create KeyTask!
- ");
- }
- }
- SYS_RUN(RGBEntry);
運行效果:

`
?
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
wi-fi
+關(guān)注
關(guān)注
15文章
2424瀏覽量
129559 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2153瀏覽量
36053 -
HiSpark
+關(guān)注
關(guān)注
1文章
156瀏覽量
7757
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
技術(shù)資訊 I Wi-Fi 模塊設(shè)計
本文要點Wi-Fi模塊設(shè)計旨在打造一套緊湊且高效的硬件和軟件解決方案,使設(shè)備能夠通過Wi-Fi網(wǎng)絡(luò)實現(xiàn)通信。Wi-Fi模塊設(shè)計是一個復(fù)雜的過程,要求研發(fā)人員兼具硬件與軟件工程方面的專業(yè)知識
Wi-Fi:無線連接的全球通用語
Wi-Fi 6(802.11ax)及未來的Wi-Fi 7,性能、效率與安全性不斷提升。 三、關(guān)鍵技術(shù)詞解析l IEEE 802.11:Wi-Fi技術(shù)的底層標(biāo)準(zhǔn),由電氣電子工程師協(xié)會制定
發(fā)表于 01-07 09:49
淺談Wi-Fi 6E與Wi-Fi 7的關(guān)鍵器件——BAW濾波器新技術(shù)
6E也能在6GHz頻段工作。2024年1月,Wi-Fi聯(lián)盟發(fā)布了Wi-Fi CERTIFIED 7認(rèn)證標(biāo)準(zhǔn),標(biāo)志著Wi-Fi 7正式問世。
發(fā)表于 09-19 18:29
?2128次閱讀
LitePoint Wi-Fi測試軟件減輕客戶設(shè)計負(fù)擔(dān)
自Wi-Fi 7于一年多前獲得Wi-Fi聯(lián)盟認(rèn)證以來,作為最新一代通信技術(shù),Wi-Fi正逐步成為用戶實現(xiàn)無所不在無線連接的新選擇。隨著每一代Wi-F
銳捷網(wǎng)絡(luò):Wi-Fi 7加速演進(jìn),2025年進(jìn)入快速爬坡期
隨著4K/8K、VR/AR、遠(yuǎn)程醫(yī)療、工業(yè)物聯(lián)網(wǎng)等新型應(yīng)用的不斷涌現(xiàn),家庭、企業(yè)和工業(yè)環(huán)境對Wi-Fi網(wǎng)絡(luò)提出了更高要求。在此驅(qū)動下,行業(yè)正向Wi-Fi 7加速演進(jìn),而2025年成為Wi-Fi
Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀(jì)元——1
已著手進(jìn)行Wi-Fi 8 相關(guān)技術(shù)功能的制定討論與研究。Wi-Fi 7的下一代自然就是Wi-Fi 8,正如市面上智能手機(jī)的命名邏輯一樣,Wi-Fi
發(fā)表于 06-13 11:09
貿(mào)澤電子開售Qorvo Wi-Fi 7前端模塊
入多輸出(MIMO)功能,全頻段Wi-Fi 5、6和6E。Wi-Fi 7可確保更高吞吐量、更低延遲和更高數(shù)據(jù)速率。多鏈路操作有助于建立多個有源鏈路,通過選擇最可用的傳輸鏈路來提高峰值數(shù)
適用于 Wi-Fi 7 應(yīng)用的 6 GHz 高功率前端模塊 skyworksinc
電子發(fā)燒友網(wǎng)為你提供()適用于 Wi-Fi 7 應(yīng)用的 6 GHz 高功率前端模塊相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有適用于 Wi-Fi 7 應(yīng)用的 6 GHz 高功率前端模塊的引腳圖、接線圖
發(fā)表于 05-27 18:34
適用于 Wi-Fi 7 應(yīng)用的 5 GHz 高功率前端模塊 skyworksinc
電子發(fā)燒友網(wǎng)為你提供()適用于 Wi-Fi 7 應(yīng)用的 5 GHz 高功率前端模塊相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有適用于 Wi-Fi 7 應(yīng)用的 5 GHz 高功率前端模塊的引腳圖、接線圖
發(fā)表于 05-27 18:33
華為加速Wi-Fi 7技術(shù)在行業(yè)場景的應(yīng)用
華為數(shù)據(jù)通信創(chuàng)新峰會2025期間,華為面向中東中亞地區(qū)舉辦第三季“Imagine Wi-Fi 7 to Reality”創(chuàng)新應(yīng)用大賽頒獎典禮,9位參賽者憑借Wi-Fi 7的應(yīng)用創(chuàng)新成果
適用于 Wi-Fi 7 應(yīng)用的 2.4 GHz 高功率前端模塊 skyworksinc
電子發(fā)燒友網(wǎng)為你提供()適用于 Wi-Fi 7 應(yīng)用的 2.4 GHz 高功率前端模塊相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有適用于 Wi-Fi 7 應(yīng)用的 2.4 GHz 高功率前端模塊的引腳圖
發(fā)表于 05-12 18:30
nRF Cloud Wi-Fi 定位服務(wù)
、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通過利用 nRF Cloud 的優(yōu)化定位算法,基于 Nordic SoC 和 模組的產(chǎn)品可在定位用例
發(fā)表于 04-17 15:07
Wi-Fi 定位服務(wù)
Wi-Fi 是一種著名的無線網(wǎng)絡(luò)技術(shù),用于設(shè)備的局域網(wǎng)和互聯(lián)網(wǎng)接入。Wi-Fi 通過 Wi-Fi 網(wǎng)絡(luò)為家庭、辦公室和學(xué)校等環(huán)境提供便捷的無線互聯(lián)網(wǎng)接入服務(wù)。
Wi-Fi 定位是一種
發(fā)表于 04-17 15:01
Skyworks ICE? Technology 用于 Wi-Fi? 7 應(yīng)用的 6 GHz 高功率前端模塊 skyworksinc
電子發(fā)燒友網(wǎng)為你提供()Skyworks ICE? Technology 用于 Wi-Fi? 7 應(yīng)用的 6 GHz 高功率前端模塊相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有Skyworks ICE
發(fā)表于 04-11 15:23
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】7.RGB操作
評論