在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】基于鴻蒙操作系統的《愛若琉璃》(蜂鳴器版本)

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

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


先上效果:《愛若琉璃》(蜂鳴器版本)

前言
經過一段時間的分享,基于Hi3861開發板鴻蒙開發已經完成了下面核心板和OLED板兩個子板的分享了。
我們今天分享紅綠黃燈板上的資源,對應原理圖在下面文件中:
HiSpark_WiFi_IoT_SSL_VER.A.pdf
這個紅綠燈板子上有三個LED,分別是紅黃綠三種顏色;
此外還有一個按鍵和一個無源蜂鳴器;
對應資源如下表所示:
[td]
板載資源 系統資源
紅燈_RED D10(GPIO10)/UART2_CTS/SPI0_CLK/PWM1_OUT/I2C0_SDA
黃燈_YELLOW A12(GPIO12)/UART2_RXD/SPI0_CS1/ADC0/PWM3_OUT
綠燈_GREEN A11(GPIO11)/UART2_TXD/SPI0_RXD/ADC5/PWM2_OUT
蜂鳴器_BEEP(MLT-8530) A9(GPIO09)/UART2_RTS/SPI0_TXD/ADC4/PWM0_OUT/I2C0_SC
按鍵_SWITCH MOSI(SPI0_TXD)/GPIO08/PWM1_OUT
LED和按鍵的驅動我們之前已經分享過了,請參見下文:HarmonyOS實現點亮LED
基于鴻蒙OS的按鍵驅動
一個ADC實現多個按鍵檢測
今天我們介紹一下鴻蒙系統下PWM的使用方法。
實現目標1. 蜂鳴器演奏歌曲《愛若琉璃》2. 解決上次《你笑起來真好看》遺留問題,實現點擊蜂鳴器板子上的按鍵,控制音樂播放或停止蜂鳴器原理圖
當BEEP為高電平的時候,三極管MMBT3904導通,蜂鳴器B1有電流流過;當BEEP為低電平的時候,三極管截止,蜂鳴器B1沒有電流流過。
按鍵中斷按鍵初始化
設置按鍵對應GPIO08為輸入、上拉模式的GPIO,并設置上升沿的中斷函數為:OnButtonPressed_isr
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH, OnButtonPressed_isr, NULL);
按鍵中斷函數
中斷函數中主要改變控制音樂播放的一個布爾變量,在真和假之間來回切換。
static void OnButtonPressed_isr(char* arg) {
(void)arg;

printf("[beep_demo.c] OnButtonPressed() rn");

bSongPlaying = !bSongPlaying;
}
PWM脈沖產生PWM初始化hi_pwm_set_clock(PWM_CLK_XTAL); //設置時鐘源為晶體時鐘;
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_PWM0_OUT);//IO復用為PWM功能
ret = GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);//設置為輸出
if (ret != WIFI_IOT_SUCCESS) {
printf("===== ERROR ======gpio -> GpioSetDir ret:%d rn", ret);
return;
}
hi_pwm_init(HI_PWM_PORT_PWM0);//初始化PWM
BUILD.gn文件
改寫工程中的兩個BUILD.gn文件。
編譯
添加完上面代碼,如果直接編譯的話,會報如下錯誤:
出錯的原因是未開啟PWM功能,開啟PWM功能:
在 vendorhisihi3861hi3861buildconfigusr_config.mk 文件中下圖位置,添加一行代碼:CONFIG_PWM_SUPPORT=y
再編譯就沒有問題了。
測試PWM功能
改變PWM輸出使用如下兩個函數:
hi_u32 hi_pwm_stop(hi_pwm_port port)
hi_u32 hi_pwm_start(hi_pwm_port port, hi_u16 duty, hi_u16 freq)
修改參數freq可以修改輸出脈沖的頻率,修改參數 duty可以改變占空比。
執行hi_pwm_start()函數開始PWM輸出,執行hi_pwm_stop()函數PWM輸出停止。
測試一hi_pwm_stop(HI_PWM_PORT_PWM0);
hi_pwm_start(HI_PWM_PORT_PWM0, 1, 2); //25ns/25ns
測試一測試二hi_pwm_stop(HI_PWM_PORT_PWM0);
hi_pwm_start(HI_PWM_PORT_PWM0, 3, 10); //75ns/250ns
測試二測試三hi_pwm_stop(HI_PWM_PORT_PWM0);
hi_pwm_start(HI_PWM_PORT_PWM0, 30, 100); //0.75us/2.5us
測試三
由上面的測試,我們可以得出,參數 duty 和 freq 的值,1單位代表25 ns。
實現《愛若琉璃》樂譜
現在我們實現了PWM輸出的控制,接下來就是實現本文的目標了,實現蜂鳴器演奏《愛若琉璃》,蜂鳴器演奏音樂的原理詳見之前網文:
蜂鳴器演奏音樂“你笑起來真好看”
由上面的網文我們知道,要想完成一個樂譜,我們只要確定“音符(音調)”和“節拍”即可。
音調表示一個音符響的頻率,節拍表示一個音符該唱多長的時間。
音符(音調)的確定
一般鋼琴鍵盤有88個按鍵:
鋼琴上88按鍵的頻率如下表所示:
比如中央C音的標準頻率就是261,在上面表格中就是:音名為C4的按鍵。
程序中定義一個音頻的數組:
因為上面初始化PWM的時候,使用的是外部晶振作為時鐘源hi_pwm_set_clock(PWM_CLK_XTAL);
根據上面示波器中實測的結果可以推算出,這個時鐘源為40M。
而輸出的脈沖頻率由這個函數決定的:hi_u32 hi_pwm_start(hi_pwm_port port, hi_u16 duty, hi_u16 freq)
參數freq決定了脈沖的頻率,這個參數是hi_u16類型,那么這個參數的有效范圍為:2~65535。
所以輸出的脈沖的最低頻率為:40M / 65535 (下面有計算方法) ,即40 * 1000 * 1000 / 65535 = 610.3608758678569?
所以這個Hi3861芯片只能產生頻率610以上的音,即D#5及以上的按鍵音,所以我們選擇C6那組按鍵的音作為主音。所以我們預定義正常音的C6對應數組的索引為63。#define N_B 63
我們要想讓蜂鳴器發出某個音只需要讓PWM輸出對應頻率的脈沖即可:
網上找個《愛若琉璃》的簡譜,然后按照對應關系創建如下樂譜數組:
在這里插入圖片描述節拍的確定
節拍就是一個音持續的時間,這里就是PWM脈沖持續的時間,那么持續的時間如何確定呢?
播放一個音
音符(音調)和節拍的計算方法我們上面介紹完了,那么如果我們利用蜂鳴器播放第一個音,應該怎么確定呢?
要想播放一個音,就要使用hi_pwm_start()函數來產生一定頻率的脈沖信號
那頻率是怎么計算出來的呢?也就是下面代碼中delay_time這個變量是怎么計算出來的呢?
delay_time = 40 * 1000 * 1000/((hi_u32)pitch_names_frequency[ai_ruo_liu_li[0]]);
hi_pwm_start(HI_PWM_PORT_PWM0, delay_time / 2, delay_time);
由上面示波器我們得出,hi_pwm_start()函數的最后一個參數,一個單位長度為25ns(即:1/(40*1000*1000)),所以我們發送一定頻率的脈沖,其實傳進去的參數即為單位長度(25ns)的個數,具體推導過程如下:
參數換算原理
一個音確定完之后,只要將這個音按照節拍播放即可,然后遍歷完咱們自己轉換的樂譜數組即可完成整首歌曲的播放。
因為在按鍵的中斷函數中,每按一次,改變一次布爾變量bSongPlaying的真假。
通過布爾變量bSongPlaying的真假,我們可以實現控制音樂播放的開啟或停止。


結果展示視頻展示請移步B站觀看:
https://www.bilibili.com/video/BV1sa411w7rh#reply3721065146
資料獲取
公眾號留言區置頂留言獲取本文對應工程文件及《愛若琉璃》的簡譜。
ps: 文章首發于電子發燒友。
歡迎關注
程序員小哈帶你玩轉嵌入式,微信搜索:嵌入式從0到1,更多干貨等著你。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • wi-fi
    +關注

    關注

    14

    文章

    2176

    瀏覽量

    125270
  • HarmonyOS
    +關注

    關注

    79

    文章

    1985

    瀏覽量

    30743
  • HiSpark
    +關注

    關注

    1

    文章

    156

    瀏覽量

    6966
收藏 人收藏

    評論

    相關推薦

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

    產品銷售中,雖然Wi-Fi 7產品的銷量份額快速從年初的個位數百分比增長至14%,但Wi-Fi 6產品的銷量份額依然穩定在60%左右。如果從存量設備來看,那么Wi-Fi 7路由器的占比將遠遠小于這個數。 ? 智能手機等終端設備已
    的頭像 發表于 11-24 03:14 ?2294次閱讀
    <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 HaLow評估套件,加速物聯網開發

    。 MM6108-EKH05評估套件充分發揮了Wi-Fi HaLow技術的強大功能,支持從智能家居到工業自動化的廣泛應用。其數據傳輸速率高達32.5 Mbps,并能在1 GHz以下頻率范圍內進行可編程操作,是物聯網
    的頭像 發表于 12-11 13:40 ?385次閱讀

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

    1 Wi-Fi技術的快速發展 每一代新的Wi-Fi協議發布,都會帶來更高的無線速率。 ? 從Wi-Fi 4到Wi-Fi 7:無線網絡技術顯著提升,實現了網速的巨大飛躍。 ? ?
    的頭像 發表于 12-09 10:10 ?466次閱讀
    從<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 ?1389次閱讀

    華為原生鴻蒙操作系統正式發布

    10月22日晚,華為舉行了一場盛大的發布會,正式推出了其原生鴻蒙操作系統HarmonyOS NEXT,也被稱為鴻蒙5.0。這一發布標志著鴻蒙
    的頭像 發表于 10-23 16:52 ?723次閱讀

    如何記住ESP8266中的Wi-Fi憑據?

    您好,我正在與ESP8266合作,在公司進行一個項目。在成功智能配置后,我無法記住 Wi-Fi 憑據。ESP8266軟件版本如下: 在GMR AT版本:1.2.0.0(Jul 1, 2016 20
    發表于 07-15 07:07

    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>數據手冊

    Nvidia Jetson Nano + CYW55573/AWXB327MA-PUR M.2無法使用操作系統內置的網絡管理器管理Wi-Fi如何解決?

    %E2%84%A2%20CYW5557.... 我們可以使用命令行指令成功連接互聯網。 但是,我們無法使用操作系統內置的網絡管理器管理 Wi-Fi。 網絡管理器中與 Wi-Fi 相關的選項都是灰色
    發表于 05-23 06:47

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

    Wi-Fi聯盟已發布Wi-Fi 7認證標準,華為是第一批送測廠商,獲得業界首個企業級Wi-Fi 7 的Wi-Fi聯盟官方認證。
    的頭像 發表于 04-28 10:17 ?829次閱讀
    華為獲得全球首個國際<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 ?1877次閱讀
    驗證物聯網<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 ?903次閱讀
    <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 ?1486次閱讀
    <b class='flag-5'>Wi-Fi</b>的誕生與發展

    CYW5557x Wi-Fi系列的Linux內核版本是什么?

    CAN告知支持CYW5557x Wi-Fi系列的Linux內核版本是什么?
    發表于 03-01 11:52
    主站蜘蛛池模板: 国产在线欧美精品卡通动漫 | 国产午夜久久精品 | 男男小说高h | 美女被异性狂揉下部羞羞视频 | 国产成人91青青草原精品 | 视频免费播放 | 色妇网 | 四虎影院久久 | 亚洲精品美女久久久 | 国产福利vr专区精品 | 国产午夜精品久久久久免费视小说 | 亚洲狠狠网站色噜噜 | 激情97| 人人干天天干 | 国模私拍一区二区三区 | 色偷偷97| ww欧洲ww在线视频看ww | a色在线| 永久免费观看黄网站 | 国产精品成人观看视频国产奇米 | 日本在线不卡一区 | 看黄免费在线 | 天天摸天天碰成人免费视频 | 成人性视频网站 | 成年香蕉大黄美女美女 | 日韩亚洲欧洲在线com91tv | 中文字幕第一区 | 视色4setv.com | 狠狠色噜噜狠狠狠狠狠色综合久久 | 免看乌克兰a一级 | 日本三级视频在线播放 | 亚洲天堂网在线观看 | 午夜黄网站 | 国产 麻豆| 中文字幕在线观看一区二区 | 日日干狠狠干 | 色婷五月 | 香蕉网影院在线观看免费 | 第四色视频 | 四虎影视免费观看 | 久久久美女视频 |