色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】播放音樂

開發板試用精選 ? 來源:開發板試用 ? 作者:電子發燒友論壇 ? 2022-10-31 14:41 ? 次閱讀

本文來源電子發燒友社區,作者:華仔stm32, 帖子地址:https://bbs.elecfans.com/jishu_2299368_1_1.html


前面因為北海的疫情,科室抽搞了人員去支援,所單位的事一直在超負荷工作,這一個月都沒有時間寫文章,現在恢復正常,接上面的繼續學習套件的學習,并分享給大家。

前面自己用pwm寫過一個可以播放音樂的帖子,是用liteos來寫的,這次學習了HarmonyOS來實現這一功能。

1、新建工程,按下圖

image.png

image.png

然后點擊創建:

image.png

等待下載結束,在彈出的對話框中選擇當前窗口:

image.png

2、主要代碼分析:

#define IOT_TEST_PWM_GPIO9 9 // 指定蜂鳴器的pwm輸出IO
#define IOT_PWM_PORT0 0

#define IOT_IO_NAME_GPIO_8 8    // 按鍵檢測IO
#define PWM_DUTY 50      //占空比
#define M_INTERVAL_TIME_TICK 60  
#define TICKS_DELAY  125*1000

3、頻率與音符的對應:

static const uint16 g_tuneFreqs[] = {
    0,        // 40M Hz 對應的分頻系數:
    1046 * 4, // 1046.50  1
    1174 * 4, // 1174.66  2
    1318 * 4, // 1318.51  3
    1396 * 4, // 1396.91  4
    1567 * 4, // 1567.99  5
    1760 * 4, // 1760.00  6
    1975 * 4, // 1975.53  7
    523 * 4,  // 523.25   1-  低一個8度的1
    587 * 4,  // 587.33   2-
    659 * 4,  // 659.26   3-   
    698 * 4,   // 698.46  4-
    783 * 4,  // 783.99   5-
    880 * 4,   // 880.00  6-
    987 * 4,  // 987.77   7-    
};

4、定義音符與節拍:

typedef enum
{
    D_DO = 1,  // 1
    D_RE,      // 2
    D_MI,      // 3
    D_FA,      // 4
    D_SO,      // 5
    D_LA,      // 6
    D_SI,      // 7
    C_DO,      // 1- 
    C_RE,      // 2- 
    C_MI,      // 3-
    C_FA,      // 4- 
    C_SO,      // 5- 
    C_LA,      // 6- 
    C_SI       // 7-     
} MusicTuneNotes;

typedef enum
{
    BEAT_1X4B = 1,   //4分之1拍為基礎值1
    BEAT_1X2B,
    BEAT_3X4B,
    BEAT_1B,
    BEAT_3X2B = 6,
    BEAT_2B = 8,
    BEAT_3B = 12,
    BEAT_4B = 16
} MusicTuneInterval;

/*音符與時間間隔結構體*/
typedef struct
{
    MusicTuneNotes tuneNotes;       //音符
    MusicTuneInterval interval;     //時間間隔
} MusicNotesInterval;

5、曲譜,數組里面定義了音符與節拍:

*曲譜*/
static const MusicNotesInterval g_interval[] = {
    {D_MI,BEAT_1X2B},{D_SO,BEAT_1X2B},{D_SO,BEAT_3X4B},{D_LA,BEAT_1X4B},{D_SO,BEAT_1X2B},{D_MI,BEAT_1X2B},{D_DO,BEAT_1X2B},
    {D_DO,BEAT_1X4B},{D_RE,BEAT_1X4B},{D_MI,BEAT_1X2B},{D_MI,BEAT_1X2B},{D_RE,BEAT_1X2B},{D_DO,BEAT_1X2B},{D_RE,BEAT_2B},
    {D_MI,BEAT_1X2B},{D_SO,BEAT_1X2B},{D_SO,BEAT_3X4B},{D_LA,BEAT_1X4B},{D_SO,BEAT_1X2B},{D_MI,BEAT_1X2B},{D_DO,BEAT_1X2B},
    {D_DO,BEAT_1X4B},{D_RE,BEAT_1X4B},{D_MI,BEAT_1X2B},{D_MI,BEAT_1X2B},{D_RE,BEAT_1X2B},{D_RE,BEAT_1X2B},{D_DO,BEAT_2B},
    {D_FA,BEAT_1B},{D_FA,BEAT_1B},{D_FA,BEAT_1X2B},{D_LA,BEAT_3X2B},{D_SO,BEAT_1B},{D_SO,BEAT_3X4B},{D_MI,BEAT_1X4B},
    {D_RE,BEAT_2B},{D_MI,BEAT_1X2B},{D_SO,BEAT_1X2B},{D_SO,BEAT_3X4B},{D_LA,BEAT_1X4B},{D_SO,BEAT_1X2B},{D_MI,BEAT_1X2B},
    {D_DO,BEAT_1X2B},{D_DO,BEAT_1X4B},{D_RE,BEAT_1X4B},{D_MI,BEAT_1X2B},{D_MI,BEAT_1X2B},{D_RE,BEAT_1X2B},{D_RE,BEAT_1X2B},
    {D_DO,BEAT_2B}
};

6、按鍵響應函數,當按鍵按下后更新標志位music:

/*按鍵響應函數*/
static void OnButtonPressed(char *arg)
{
    (void)arg;
    IoTGpioUnregisterIsrFunc(IOT_IO_NAME_GPIO_8);

    music = 1;
    printf("
>>>>>>>>>>button is enter >>>.[%d]
", music);

    IoTGpioRegisterIsrFunc(IOT_IO_NAME_GPIO_8, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, 
    OnButtonPressed, NULL);
}

7、音樂處理函數:

static void *BeeperMusicTask(const char *arg)
{
    (void)arg;
    
    printf("BeeperMusicTask start!
");

    hi_pwm_set_clock(PWM_CLK_XTAL); // 設置時鐘源為晶體時鐘(40MHz,默認時鐘源160MHz)

    while (1)
    {
        osDelay(M_INTERVAL_TIME_TICK);
        /*第一次點擊按鍵播放,播放完以后按鍵才能繼續生效*/
        if (music == 1)
        {
            for (size_t i = 0; i < sizeof(g_interval) / sizeof(g_interval[0]); i++)
            {  
                uint32 tune = g_interval[i].tuneNotes; // 音符
                uint16 freqDivisor = g_tuneFreqs[tune];
                uint32 tuneInterval = g_interval[i].interval * (TICKS_DELAY); // 音符時間
                IoTPwmStart(IOT_PWM_PORT0, PWM_DUTY, freqDivisor);
                usleep(tuneInterval);
                IoTPwmStop(IOT_PWM_PORT0);
                music = 0;
            }
        }
    }

    return NULL;
}

8、創建音樂播放任務:

static void BeepMusicEntry(void)
{
    osThreadAttr_t attr;
    /* 初始化按鍵 */
    IoTGpioInit(IOT_IO_NAME_GPIO_8);   //button
    IoTGpioSetDir(IOT_IO_NAME_GPIO_8, IOT_GPIO_DIR_IN);
    /* 注冊按鍵中斷回調 */
    IoTGpioRegisterIsrFunc(IOT_IO_NAME_GPIO_8, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, OnButtonPressed, NULL);
    /* 初始化蜂鳴器輸出IO */
    IoTGpioInit(IOT_TEST_PWM_GPIO9);      //BWM
    IoTGpioSetDir(IOT_TEST_PWM_GPIO9, IOT_GPIO_DIR_OUT);
    IoTPwmInit(IOT_PWM_PORT0);

    IoTWatchDogDisable();

    attr.name = "BeeperMusicTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 1024;
    attr.priority = osPriorityNormal;

    if (osThreadNew((osThreadFunc_t)BeeperMusicTask, NULL, &attr) == NULL)
    {
        printf("[BeeperMusicTask] Falied to create BeepTask!
");
    }
}

9、開機創建啟動:APP_FEATURE_INIT(BeepMusicEntry);

【設置編譯選項】

1、在applications/sample/wifi-iot/app/demo_beep下的BUILD.gn創建jison:

static_library("demo_beep") {
    sources = [
        "beep_music_demo.c"
    ]

    include_dirs = [
        "http://utils/native/lite/include",
        "http://kernel/liteos_m/components/cmsis/2.0",
        "http://base/iot_hardware/peripheral/interfaces/kits",
    ]
}

2、在applications/sample/wifi-iot/app下面創建BUILD.gn:

import("http://build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "demo_beep",
    ]
    deps = []
}

【編譯】:

image.png

到這一步就顯示編譯成功了:

image.png

【拷貝文件到HiBurn目錄下面】輸出的文件在/home/hihope/Documents/DevEco/Projects/lyevk_hm_beep/out/hispark_pegasus/wifiiot_hispark_pegasus目錄下面:

1660288320029.png

將Hi3861_wifiiot_app_allinone.bin復制到win下面。然后燒錄到開發板就OK了。

image.png

重啟開發板,按下按鍵,就可以播放音樂了。

image.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • wi-fi
    +關注

    關注

    14

    文章

    2147

    瀏覽量

    124612
  • HarmonyOS
    +關注

    關注

    79

    文章

    1979

    瀏覽量

    30274
  • HiSpark
    +關注

    關注

    1

    文章

    156

    瀏覽量

    6938
收藏 人收藏

    評論

    相關推薦

    Wi-Fi 8要來了!未來Wi-Fi技術演進方向揭秘

    產品銷售中,雖然Wi-Fi 7產品的銷量份額快速從年初的個位數百分比增長至14%,但Wi-Fi 6產品的銷量份額依然穩定在60%左右。如果從存量設備來看,那么Wi-Fi 7路由器的占比將遠遠小于這個數。 ? 智能手機等終端設備已
    的頭像 發表于 11-24 03:14 ?1720次閱讀
    <b class='flag-5'>Wi-Fi</b> 8要來了!未來<b class='flag-5'>Wi-Fi</b>技術演進方向揭秘

    華為海思正式進入Wi-Fi FEM賽道?

    大家都知道了,2018年11 月離開銳迪科(RDA),前往福建晉江創立三伍微,專注于Wi-Fi射頻前端芯片,從路由器Wi-Fi FEM,到手機Wi-Fi FEM,再到IoT FEM全覆
    發表于 12-11 17:42

    Wi-Fi 4到Wi-Fi 7:網速飆升40倍的無線革命

    1 Wi-Fi技術的快速發展 每一代新的Wi-Fi協議發布,都會帶來更高的無線速率。 ? 從Wi-Fi 4到Wi-Fi 7:無線網絡技術顯著提升,實現了網速的巨大飛躍。 ? ?
    的頭像 發表于 12-09 10:10 ?291次閱讀
    從<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:網速飆升40倍的無線革命

    Wi-Fi 7與Wi-Fi 6E有什么區別

    也許很多人還在考慮是否要將使用的Wi-Fi設備升級到Wi-Fi 6或Wi-Fi 6E,而這些標準的繼任者卻已經開始“登堂入室”了。Wi-Fi 7是新一代
    的頭像 發表于 11-07 11:38 ?870次閱讀

    未來的Wi-Fi路由器

    轉載自——鐘林談芯 沒有創新就沒有未來,Wi-Fi路由器也是如此。 進入2024年以后,Wi-Fi路由器市場變得更加艱難,利潤大幅下滑,BOM成本價高于市場價,接不接訂單,都陷入兩難。 國內主芯片
    的頭像 發表于 06-20 15:32 ?454次閱讀

    請問用蜂鳴器播放音樂的時候如何同時播放兩段音樂

    我用 PWM 控制的音樂播放,可以按照樂譜播放音符 但現在有個需求,是在播放背景音樂的時候同時疊加一個前景
    發表于 06-14 08:23

    DA16200 超低功耗 Wi-Fi 模塊開發套件 Pro數據手冊

    電子發燒友網站提供《DA16200 超低功耗 Wi-Fi 模塊開發套件 Pro數據手冊.rar》資料免費下載
    發表于 05-30 17:53 ?1次下載
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模塊開發<b class='flag-5'>套件</b> Pro數據手冊

    DA16200 超低功耗 Wi-Fi 模塊開發套件數據手冊

    電子發燒友網站提供《DA16200 超低功耗 Wi-Fi 模塊開發套件數據手冊.rar》資料免費下載
    發表于 05-30 17:13 ?0次下載
    DA16200 超低功耗 <b class='flag-5'>Wi-Fi</b> 模塊開發<b class='flag-5'>套件</b>數據手冊

    華為獲得全球首個國際Wi-Fi聯盟WFA企業級Wi-Fi 7認證!

    Wi-Fi聯盟已發布Wi-Fi 7認證標準,華為是第一批送測廠商,獲得業界首個企業級Wi-Fi 7 的Wi-Fi聯盟官方認證。
    的頭像 發表于 04-28 10:17 ?756次閱讀
    華為獲得全球首個國際<b class='flag-5'>Wi-Fi</b>聯盟WFA企業級<b class='flag-5'>Wi-Fi</b> 7認證!

    驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦

    驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦 MM6108-EKH08開發套件專為驗證物聯網Wi-Fi HaLow用例而設計。該
    的頭像 發表于 04-11 12:01 ?1759次閱讀
    驗證物聯網<b class='flag-5'>Wi-Fi</b> HaLow用例的MM6108-EKH08開發<b class='flag-5'>套件</b>來啦

    Wi-Fi 7與Wi-Fi 6的相關知識科普

    科普:Wi-Fi 7 vs. Wi-Fi 6,青出于藍
    的頭像 發表于 03-12 10:59 ?771次閱讀
    <b class='flag-5'>Wi-Fi</b> 7與<b class='flag-5'>Wi-Fi</b> 6的相關知識科普

    Wi-Fi的誕生與發展

    短距離無線通信技術有Wi-Fi、ZigBee、藍牙以及Z-Wave,今天我們先揭開Wi-Fi的神秘面紗。Chrent短距離無線通信技術——Wi-Fi過去的20多年,Wi-Fi靠著僅有的
    的頭像 發表于 03-07 08:26 ?1280次閱讀
    <b class='flag-5'>Wi-Fi</b>的誕生與發展

    Wi-Fi HaLow和傳統Wi-Fi的區別

    Wi-Fi HaLow和傳統Wi-Fi的區別? Wi-Fi是一種無線網絡技術,可以連接到互聯網或局域網,為用戶提供無線上網的便利。隨著科技的發展和互聯網的普及,Wi-Fi也在不斷演進和
    的頭像 發表于 02-02 15:28 ?1318次閱讀

    康普攜手Wi-Fi聯盟,RUCKUS Wi-Fi 7系列接入點成Wi-Fi

     康普高級副總裁兼網絡、智能蜂窩和安全解決方案總裁Bart Giordano對此表示: “我們非常榮幸能與Wi-Fi Alliance形成長期合作伙伴關系,將我們的RUCKUS Wi-Fi 7 接入點平臺作為Wi-Fi CERT
    的頭像 發表于 01-23 14:10 ?782次閱讀

    BT Wi-Fi模式是否可以通過ModustoolBox對套件進行編程來實現?

    想配置用于分析 CYW43439 的 CY8CPROTO-062S2-43439 原型開發套件。 瀏覽文檔我無法弄清楚如何在不同的 Wi-Fi 和藍牙模式(電源模式、連接模式等)下配置套件。 在
    發表于 01-22 06:19
    主站蜘蛛池模板: 久久伦理影院| 肉动漫h黄动漫日本免费观看| 我的美女奴隶| 校花爽好大快深点h| 健身房被教练啪到腿软H| 亚洲最大在线视频| 美女MM131爽爽爽| 成人性生交大片免费看4| 亚洲国产亚综合在线区尤物| 久久九九日本韩国精品| aa级毛片毛片免费观看久| 色婷婷亚洲五月| 九九热精品免费观看| chinese帅哥gv在线看| 无码人妻少妇色欲AV一区二区 | 久久精品亚洲国产AV涩情| 97国内精品久久久久久久影视| 日韩午夜中文字幕电影| 果冻传媒妈妈要儿子| 5566av资源| 忘忧草在线影院WWW日本动漫| 国产亚洲日韩欧美视频| 永久久久免费人妻精品| 色狠狠一区二区| 伦理片在线线看手机版| 国产精品免费大片| 99爱视频在线观看| 亚洲九九视频| 男人有噶坏| 高中生被C到爽哭视频免费| 亚洲欧美国产旡码专区| 日本一区不卡在线播放视频免费 | 久久国产精品免费网站| 成人网18免费韩国| 中文字幕精品在线观看| 午夜一区欧美二区高清三区| 男人J放进女人P全黄网站| 娇妻让壮男弄的流白浆| 国产成人高清亚洲一区app| 99re8热视频这在线视频| 亚洲午夜一区二区电影院|