成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發(fā)板漂流計(jì)劃之小車控制由簡入繁之按鍵控制

開發(fā)
實(shí)現(xiàn)最簡單的按鍵控制小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止的Demo,代碼在openharmonny1.10 和openharmony3.00 測(cè)試可以正常工作。

[[427555]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

1.簡介

實(shí)現(xiàn)最簡單的按鍵控制小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止的Demo,代碼在openharmonny1.10 和openharmony3.00 測(cè)試可以正常工作。

2. 功能介紹

1).短按 OLED 擴(kuò)展板S1按鍵 - 前進(jìn)

2).長按 OLED 擴(kuò)展板S1按鍵 - 左轉(zhuǎn)

3).短按 OLED 擴(kuò)展板S2按鍵 - 后退

4).長按 OLED 擴(kuò)展板S2按鍵 - 右轉(zhuǎn)

5).短按核心板User按鍵 - 停止

3.電機(jī)的控制代碼

3.1 電機(jī)的控制需要用到PWM,所以需要先將PWM 功能開啟,開啟方式如下

device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk

  1. # CONFIG_PWM_SUPPORT is not set 

 改為

  1. CONFIG_PWM_SUPPORT=y 

 3.2 電機(jī)的控制代碼

電機(jī)控制代碼是從潤和Gitee小車樣例代碼car_control.c和car_control.h 修改而來。

主要修改如下

將car_control.c中

  1. #include <app_demo_robot_car.h> 
  2.  
  3. extern hi_u32  g_car_speed; 

 移除app_demo_robot_car.h和extern ,改為如下

  1. hi_u16  g_car_speed; 

 在car_control.h中添加以下define

  1. #define     MAX_SPEED                         (100) 
  2. #define     MIN_SPEED                         (30000) 
  3. #define     PWM_DUTY_LEFT_RIGHT               (5000) 
  4. #define     PWM_DUTY_FORWARD_BACK             (10000) 

 小車前進(jìn)

  1. /*car go forward */ 
  2. hi_void car_go_forward(hi_void) 
  3.     correct_car_speed(); 
  4.     gpio_control(HI_IO_NAME_GPIO_0, HI_GPIO_IDX_0, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_0_GPIO); 
  5.     pwm_control(HI_IO_NAME_GPIO_1,HI_IO_FUNC_GPIO_1_PWM4_OUT,HI_PWM_PORT_PWM4, g_car_speed); 
  6.     gpio_control(HI_IO_NAME_GPIO_9, HI_GPIO_IDX_9, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_9_GPIO); 
  7.     pwm_control(HI_IO_NAME_GPIO_10,HI_IO_FUNC_GPIO_10_PWM1_OUT,HI_PWM_PORT_PWM1, g_car_speed); 

 小車后退

  1. /*car go back */ 
  2. hi_void car_go_back(hi_void) 
  3.     correct_car_speed(); 
  4.     pwm_control(HI_IO_NAME_GPIO_0,HI_IO_FUNC_GPIO_0_PWM3_OUT,HI_PWM_PORT_PWM3, g_car_speed);  
  5.     gpio_control(HI_IO_NAME_GPIO_1, HI_GPIO_IDX_1, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_1_GPIO); 
  6.     pwm_control(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_PWM0_OUT,HI_PWM_PORT_PWM0, g_car_speed);  
  7.     gpio_control(HI_IO_NAME_GPIO_10, HI_GPIO_IDX_10, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_10_GPIO); 

 小車左轉(zhuǎn)

  1. /*car turn left */ 
  2. hi_void car_turn_left(hi_void) 
  3.     correct_car_speed(); 
  4.     pwm_control(HI_IO_NAME_GPIO_0,HI_IO_FUNC_GPIO_0_PWM3_OUT,HI_PWM_PORT_PWM3, PWM_DUTY_LEFT_RIGHT);  
  5.     gpio_control(HI_IO_NAME_GPIO_1, HI_GPIO_IDX_1, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_1_GPIO); 
  6.     gpio_control(HI_IO_NAME_GPIO_9, HI_GPIO_IDX_9, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_9_GPIO); 
  7.     pwm_control(HI_IO_NAME_GPIO_10,HI_IO_FUNC_GPIO_10_PWM1_OUT,HI_PWM_PORT_PWM1, PWM_DUTY_LEFT_RIGHT); 

 小車右轉(zhuǎn)

  1. /*car turn right */ 
  2. hi_void car_turn_right(hi_void) 
  3.     correct_car_speed(); 
  4.     gpio_control(HI_IO_NAME_GPIO_0, HI_GPIO_IDX_0, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_0_GPIO); 
  5.     pwm_control(HI_IO_NAME_GPIO_1,HI_IO_FUNC_GPIO_1_PWM4_OUT,HI_PWM_PORT_PWM4, PWM_DUTY_LEFT_RIGHT); 
  6.     pwm_control(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_PWM0_OUT,HI_PWM_PORT_PWM0,PWM_DUTY_LEFT_RIGHT); 
  7.     gpio_control(HI_IO_NAME_GPIO_10, HI_GPIO_IDX_10, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_10_GPIO); 

 小車停止

  1. /*car stop */ 
  2. hi_void car_stop(hi_void) 
  3.     correct_car_speed(); 
  4.     pwm_control(HI_IO_NAME_GPIO_0,HI_IO_FUNC_GPIO_0_PWM3_OUT,HI_PWM_PORT_PWM3, PWM_DUTY_STOP);  
  5.     gpio_control(HI_IO_NAME_GPIO_1, HI_GPIO_IDX_1, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_1_GPIO); 
  6.     pwm_control(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_PWM0_OUT,HI_PWM_PORT_PWM0, PWM_DUTY_STOP); 
  7.     gpio_control(HI_IO_NAME_GPIO_10, HI_GPIO_IDX_10, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_10_GPIO); 
  8.  

4. 按鍵長按短按功能能的實(shí)現(xiàn)

按鍵功能的實(shí)現(xiàn)唐佐林老師已經(jīng)做了很深入的分享,我這邊也是參考唐老師的分享來實(shí)現(xiàn)的,

附上唐老師的帖子鏈接:

實(shí)現(xiàn)按鍵“按下事件”和“釋放事件”的通用框架(V0.0.1)

實(shí)現(xiàn)物理按鍵的“長按事件”(按鍵通用框架 V0.0.2)

實(shí)現(xiàn)S1,S2,User三個(gè)物理按鍵的獨(dú)立事件-上(解決思路分析)

實(shí)現(xiàn)S1,S2,User三個(gè)物理按鍵的獨(dú)立事件-下(DTButton-V0.0.3)

本案例中按鍵功能實(shí)現(xiàn)在KeyEvent.c和KeyEvent.h

4.1 主要函數(shù)介紹在KeyEvent.h中

  1. /* 
  2.   Description:  
  3.       Key event callback function pointer type. 
  4.  
  5.   Parameter: 
  6.       id --  key id 
  7.       event  -- key event type 
  8.  
  9.   Return Value: 
  10.       0     -- Success 
  11.       other -- Failure 
  12. */ 
  13. typedef void (*PKeyEventCallback)(KEY_ID_TYPE keyid, KEY_EVENT_TYPE event); 
  14.  
  15. /* 
  16.   Description:  
  17.        initialize key event process context. 
  18.  
  19.   Parameter: 
  20.       None 
  21.  
  22.   Return Value: 
  23.       0     -- Success 
  24.       other -- Failure 
  25. */ 
  26. int KeyEvent_Init(void); 
  27.  
  28. /* 
  29.   Description:  
  30.       To register callback functions for a GPIO key
  31.  
  32.   Parameter: 
  33.       name     -- target GPIO port name for a phisical key 
  34.       callback -- callback function for key event 
  35.       event    -- the target key event to trigger callback 
  36.  
  37.   Return Value: 
  38.       0     -- Success 
  39.       other -- Failure 
  40. */ 
  41. int KeyEvent_Connect(const charname, PKeyEventCallback callback, unsigned int event); 
  42.  
  43. /* 
  44.   Description:  
  45.       To unregister callback functions for a GPIO key
  46.  
  47.   Parameter: 
  48.       name -- target GPIO port name for a phisical key 
  49.  
  50.   Return Value: 
  51.       None 
  52. */ 
  53. void KeyEvent_Disconnect(const charname); 
  54.  
  55. /* 
  56.   Description:  
  57.       To close key event process context. 
  58.  
  59.   Parameter: 
  60.       None 
  61.  
  62.   Return Value: 
  63.       None 
  64. */ 
  65. void KeyEvent_Close(void); 

4.2 使用范例

先初始化按鍵事件處理、并注冊(cè)回調(diào)函數(shù)和所需的事件

  1. ret += KeyEvent_Init(); // 初始化按鍵事件處理上下文 
  2.   /* 設(shè)置GPIO_5按鍵的回調(diào)函數(shù),同時(shí)需要響應(yīng)按下,釋放以及長按三個(gè)事件 */ 
  3.   /* 按鍵觸發(fā)順序: Pressed -> LongPressed(optional) -> Released */ 
  4.   ret += KeyEvent_Connect("GPIO_5", KeyEvent_Callback, KEY_EVENT_PRESSED | KEY_EVENT_LONG_PRESSED | KEY_EVENT_RELEESED); 

如只需要按下的功能只需要注冊(cè)KEY_EVENT_PRESSED

  1. ret += KeyEvent_Connect("GPIO_5", KeyEvent_Callback, KEY_EVENT_PRESSED); 

接著實(shí)現(xiàn)KeyEvent_Callback回調(diào)

  1. static void KeyEvent_Callback(KEY_ID_TYPE keyid, KEY_EVENT_TYPE event) 
  2.     printf("[CarDemo] KeyEvent_Callback() : keyid=%d event= %d\n", (int)keyid, (int)event); 
  3.  
  4.     int ret = -1; 
  5.     switch (keyid) 
  6.     { 
  7.     case KEY_ID_USER: 
  8.          printf("[CarDemo] KEY_ID_USER\n"); 
  9.         if( event == KEY_EVENT_PRESSED ) { /*  按下事件處理代碼 */  
  10.             car_stop(); 
  11.         } 
  12.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  長按事件處理代碼 */ 
  13.  
  14.         } 
  15.         if( event == KEY_EVENT_RELEESED ) { /*  松開事件處理代碼 */  
  16.  
  17.         } 
  18.         break; 
  19.     case KEY_ID_S1: 
  20.          printf("[CarDemo] KEY_ID_S1\n"); 
  21.         if( event == KEY_EVENT_PRESSED ){  /*  按下事件處理代碼 */  
  22.             car_go_forward(); 
  23.         } 
  24.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  長按事件處理代碼 */ 
  25.             car_turn_left(); 
  26.         } 
  27.         if( event == KEY_EVENT_RELEESED ){ /*  松開事件處理代碼 */  
  28.  
  29.         } 
  30.         break; 
  31.     case KEY_ID_S2: 
  32.          printf("[CarDemo] KEY_ID_S2\n"); 
  33.         if( event == KEY_EVENT_PRESSED )      { /*  按下事件處理代碼 */  
  34.             car_go_back(); 
  35.         } 
  36.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  長按事件處理代碼 */  
  37.             car_turn_right(); 
  38.         } 
  39.         if( event == KEY_EVENT_RELEESED ){ /*  松開事件處理代碼 */  
  40.  
  41.         } 
  42.         break; 
  43.      
  44.     default
  45.         break; 
  46.     } 
  47.  

5.附上完整的代碼如附件car.zip

5.1解壓附件將car目錄放到applications/sample/wifi-iot/app/下

#開發(fā)板漂流計(jì)劃#小車控制由簡入繁之按鍵控制-鴻蒙HarmonyOS技術(shù)社區(qū)

5.2修改applications/sample/wifi-iot/app/BUILD.gn

  1. import("//build/lite/config/component/lite_component.gni"
  2.  
  3. lite_component("app") { 
  4.     features = [ 
  5.         "car"
  6.     ] 

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1286

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-10-08 14:48:03

鴻蒙HarmonyOS應(yīng)用

2021-10-22 10:41:18

鴻蒙HarmonyOS應(yīng)用

2020-12-16 10:05:48

鴻蒙開發(fā)板Onenet平臺(tái)

2020-11-09 10:04:40

鴻蒙

2021-01-08 10:00:53

鴻蒙訊飛平臺(tái)語音控制

2021-09-28 10:02:26

鴻蒙HarmonyOS應(yīng)用

2021-09-09 10:06:09

鴻蒙HarmonyOS應(yīng)用

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-11-23 09:32:43

WIFI連接

2013-12-19 09:32:01

SDN南向網(wǎng)絡(luò)控制

2022-04-19 11:09:13

Wi-Fi IoT智能小車鴻蒙

2020-11-30 10:18:02

鴻蒙小車

2021-02-01 13:58:51

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-09-07 15:35:49

設(shè)備開發(fā)鴻蒙

2019-06-13 11:50:41

Python面向?qū)ο?/a>編程語言

2020-12-17 10:02:16

鴻蒙Hi3861開發(fā)板

2020-10-27 10:08:19

Hi3861ADC驅(qū)動(dòng)

2017-04-25 10:46:57

Spring BootRESRful API權(quán)限

2011-06-20 10:19:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久精品青青大伊人av | 久久国产区 | 一区二区手机在线 | 久久一区二区三区电影 | 成人亚洲 | 福利久久| 亚洲国产二区 | 亚洲性人人天天夜夜摸 | 九九亚洲精品 | 国产欧美精品一区二区 | 男女精品网站 | www.久草 | 亚洲高清在线观看 | 久久久噜噜噜www成人网 | 亚洲综合99| 一区二区三区在线免费观看 | 久久久xxx| 91在线一区 | 国产在线精品一区 | 亚洲三级国产 | 亚洲综合二区 | 欧美国产视频 | 久久精品一二三影院 | 日韩成人免费视频 | 亚洲毛片在线观看 | 亚洲人成人一区二区在线观看 | 国产精品福利在线观看 | 午夜视频一区二区三区 | 亚洲男人天堂 | 青青草原精品99久久精品66 | 精品一区二区三 | 久久一区二区三区四区 | 欧美一级毛片久久99精品蜜桃 | 国产电影一区二区三区爱妃记 | 在线观看视频一区 | 欧美日韩高清在线一区 | av日韩一区 | 天天综合天天 | 亚洲欧洲色视频 | 国产一区日韩在线 | 在线成人www免费观看视频 |