日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1、靈感來源:LZ是純宅男,一天從早上8:00起一直要呆在電腦旁到晚上12:00左右吧~平時(shí)也沒人來閑聊幾句,刷空間暑假也沒啥動態(tài),聽音樂吧...~有些確實(shí)不好聽,于是就不得不打斷手頭的工作去點(diǎn)擊下一曲或是找個(gè)好聽的歌

1、靈感來源:

LZ是純宅男,一天從早上8:00起一直要呆在電腦旁到晚上12:00左右吧~平時(shí)也沒人來閑聊幾句,刷空間暑假也沒啥動態(tài),聽音樂吧...~有些確實(shí)不好聽,于是就不得不打斷手頭的工作去點(diǎn)擊下一曲或是找個(gè)好聽的歌來聽...但是,[移動手鎖定鼠標(biāo)-->移動鼠標(biāo)關(guān)閉當(dāng)前頁面選擇音樂軟件頁面-->選擇合適的音樂-->恢復(fù)原來的界面] 這一過程也會煩人不少,如果說軟件的設(shè)計(jì)要在用戶體驗(yàn)上做足功夫,感覺這一點(diǎn)是軟件設(shè)計(jì)人員很難管住的方面,畢竟操作系統(tǒng)也就這樣安排的嘛(當(dāng)然,有些機(jī)智的開發(fā)人員加了幾個(gè)熱鍵,確實(shí)方便了不少?。?。于是我想能不能設(shè)計(jì)一個(gè)軟件能盡量少打斷我們正常的工作簡單操作去觸發(fā)下一曲~

2、需求分析:

下圖左一是傳統(tǒng)的操作模式,在這里要人的眼、手并用而且還必須等待記憶,可能我們平時(shí)感覺不到,但是這個(gè)過程卻是比較浪費(fèi)時(shí)間且分散注意力!

下圖右一是想改為的操作模式,在這里我們只需要外部觸發(fā)(如:搖一下頭或者微笑一下,甚至只要想一下就可以啦),讓切歌任務(wù)在后臺進(jìn)行,這樣就能不打斷前臺工作(這里的前臺和后臺只是當(dāng)前工作窗口和非當(dāng)前窗口,和專業(yè)的有差別!)

3、解決方案

根據(jù)上面分析我們需要這些條件:

外部硬件設(shè)備,可以接收特殊信號并傳給PC

PC上的軟件能夠讀取硬件傳來的信號并分析信息,做出切歌任務(wù)

結(jié)合我現(xiàn)有設(shè)備,做出如下方案:

硬件采用STC89C52單片機(jī)最小系統(tǒng)占用P1.0和P1.1兩個(gè)端口和超聲波測距模塊HC-SR04,通過根據(jù)遮擋物在超聲波測距范圍內(nèi)停留的時(shí)間來發(fā)出觸發(fā)“下一曲”,“暫?!?,“上一曲”事件的信號。

軟件采用C#從串口讀取單片機(jī)發(fā)送的觸發(fā)事件信號消息,然后調(diào)用WinAPI對音樂盒窗口進(jìn)行識別計(jì)算以及發(fā)送點(diǎn)擊消息,來控制切換歌曲。

  

PS:這里根據(jù)手在超聲波范圍內(nèi)停留的時(shí)間來分出3種信號:

短暫停留在區(qū)域內(nèi)-->下一曲信號

稍長停留在區(qū)域內(nèi)-->上一曲信號

超長停留在區(qū)域內(nèi)-->暫停信號

4、作品提前展示及相關(guān)介紹:

哈哈,秒懂啦吧!圖中那個(gè)像望遠(yuǎn)鏡的東西就是超聲波測距模塊,它的前面輻射狀的空間(我設(shè)置為40cm)就是有效范圍,那個(gè)黑色的像蜈蚣的東西就是單片機(jī)(就相當(dāng)于電腦里的CPU),插在USB里面的不用介紹就是USB轉(zhuǎn)TTL啦!主要就是負(fù)責(zé)采集傳感器信號然后將距離信息通過USB發(fā)送給電腦。最終達(dá)到達(dá)到的效果是:你的手只要在區(qū)域內(nèi)揮一下,就能切歌啦!手停長一點(diǎn)時(shí)間就能暫停啦!這個(gè)玩法沒試過吧,哈哈!

下面這個(gè)圖就是基于C#的電腦端軟件,其主要功能就是連接串口進(jìn)行數(shù)據(jù)接收、數(shù)據(jù)處理、以及查找音樂盒的窗口、計(jì)算該點(diǎn)擊的按鈕位置、發(fā)出點(diǎn)擊消息、在不同窗口中切換(因?yàn)橐獙?shí)現(xiàn)少打擾當(dāng)前活動的目的)。這里為了測試方便所以加了3個(gè)功能按鈕:上一曲、暫停、下一曲,通過點(diǎn)擊這些按鈕能實(shí)現(xiàn)控制酷我音樂盒歌曲的切換,然后右邊加了個(gè)下拉框用來枚舉當(dāng)前可用串口,LINK按鈕就是連接該串口的觸發(fā)按鈕。下面一個(gè)文本顯示區(qū)是用來顯示串口傳過來的距離的數(shù)據(jù)的(便于調(diào)試哈~)

5、C#軟件部分技術(shù)詳解

該部分要用到很多Windows API,主要功能就是查找窗口句柄、控制窗口顯示、計(jì)算窗口位置、聚焦窗口、窗口切換....算是把窗口有關(guān)的常用API都用上啦~此外,還用到了鼠標(biāo)光標(biāo)位置設(shè)定、鼠標(biāo)點(diǎn)擊消息發(fā)送最終達(dá)到模擬鼠標(biāo)點(diǎn)擊事件。當(dāng)然,串口通信絕對不能少滴!

5.1、C#串口通信

5.1.1、獲取當(dāng)前可用串口列表

1 //Get all port list for selection

2 //獲得所有的端口列表,并顯示在列表內(nèi)

3 PortList.Items.Clear();

4 string[] Ports = SerialPort.GetPortNames();

5

6 for (int i = 0; i < Ports.Length; i++)

7 {

8 string s = Ports[i].ToUpper();

9 Regex reg = new Regex("[^COM\d]", RegexOptions.IgnoreCase " RegexOptions.Multiline);//正則表達(dá)式

10 s = reg.Replace(s, "");

11

12 PortList.Items.Add(s);

13 }

14 if (Ports.Length >1) PortList.SelectedIndex = 1;


調(diào)用串口要引用 using System.IO.Ports;

第9行的正則表達(dá)式要引用 using System.Text.RegularExpressions;

第3行的PortList是那個(gè)下拉框;

整體的功能就是通過第4行的函數(shù)獲取所有可用串口,然后加入下拉框顯示,如果有可用的就把第一個(gè)選中;

5.1.2、串口連接按鈕事件


1 private void btn_link_Click(object sender, EventArgs e)

2 {

3 if (!Connection.IsOpen)

4 {

5 //Start

6 Status = "正在連接...";

7 Connection = new SerialPort();

8 btn_link.Enabled = false;

9 Connection.PortName = PortList.SelectedItem.ToString();

10 Connection.Open();

11 Connection.ReadTimeout = 10000;

12 Connection.DataReceived += new SerialDataReceivedEventHandler(PortDataReceived);

13 Status = "連接成功";

14 }

15 }


PS:整體很好理解就是把下拉框選中的串口號連接上,這里第12行比較重要,它調(diào)用SerialDataReceivedEventHandler(Func Name)來定義一個(gè)數(shù)據(jù)接收函數(shù)的句柄,這里PortDataReceived你可以隨便寫,但是接下來你要寫對應(yīng)的實(shí)現(xiàn)函數(shù):(這里說句柄比較難理解,你就理解成一個(gè)函數(shù),綁定串口的函數(shù),一旦串口有數(shù)據(jù)發(fā)動過來就執(zhí)行這個(gè)函數(shù)....)



1 //接收串口數(shù)據(jù)

2 private int num=0; //障礙物進(jìn)入范圍的時(shí)間

3 private bool enter=false; //是否有障礙物進(jìn)入

4 private int signal=0; //對每次進(jìn)入范圍的時(shí)間分段形成控制信號

5 private void PortDataReceived(object o, SerialDataReceivedEventArgs e)

6 {

7 int length = 1;

8 byte[] data = new byte[length];

9 Connection.Read(data, 0, length);

10 for (int i = 0; i < length; i++)

11 {

12 ReceivedData = string.Format("{0}",data[i]);

13 }

14

15 //數(shù)據(jù)濾波轉(zhuǎn)換為控制信號

16 if (data[0] != 136 && !enter){ //當(dāng)有障礙物進(jìn)入時(shí),傳過來數(shù)據(jù)不是136并且是第一個(gè)

17 enter = true;

18 num = 1;

19 }else if (data[0] == 136 && enter){ //當(dāng)障礙物離開時(shí),傳過來數(shù)據(jù)變?yōu)?36且是第一個(gè)

20 enter = false;

21 if (num > 1 && num < 6){

22 signal = 1;

23 }else if (num > 5 && num < 10){

24 signal = 2;

25 }else if (num > 9){

26 signal = 3;

27 }

28 num = 0;

29 }else if (data[0] != 136 && data[0] >= 0 && enter){

30 num++;

31 }

32 }


PS:這就是串口數(shù)據(jù)接收函數(shù)實(shí)現(xiàn),先別看其他內(nèi)容,因?yàn)槔锩嫔婕盀V波算法和控制信號生成的算法,只要看第7~13行的代碼核心部分就是第9行從緩沖區(qū)讀取串口數(shù)據(jù)放到data[]數(shù)組中,這樣串口數(shù)據(jù)就放在data[]中啦!怎么處理是下面的事啦~


5.1.3、重量級功能函數(shù):



1 ///

2 /// 模擬鼠標(biāo)點(diǎn)擊函數(shù)

3 ///

4 /// 0是上一曲,1是暫停,2是下一曲

5 public void func(int n_control_type)

6 {

7 //bool isVisabled; //窗口原來狀態(tài),隱藏還是顯示

8 IntPtr hCurWin = GetForegroundWindow(); //獲取當(dāng)前激活窗口

9

10 IntPtr hMusic = FindWindow("kwmusicmaindlg", null); //找到窗口句柄

11 if (hMusic == null)

12 {

13 return;

14 }

15 Point pt; //獲取鼠標(biāo)當(dāng)前位置

16 GetCursorPos(out pt);

17 ShowWindow(hMusic,SW_SHOWNORMAL); //如果是隱藏的就讓他正常顯示出來

18 SetForegroundWindow(hMusic); //將音樂盒窗口放在最上層

19

20 RECT rect = new RECT(); //獲取窗口矩形

21 GetWindowRect(hMusic, ref rect);

22 int width = rect.Right - rect.Left;

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

Sept. 10, 2025 ---- 根據(jù)TrendForce集邦咨詢最新發(fā)布的《全球電動車逆變器市場數(shù)據(jù)》,2025年第二季受惠純電動車(BEV)銷售成長,全球電動車(注1)牽引逆變器裝機(jī)量達(dá)766萬臺,年增19%。...

關(guān)鍵字: 增程式電動車 SiC 牽引逆變器

Sept. 8, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NVIDIA(英偉達(dá)) Blackwell平臺規(guī)?;鲐?,以及北美CSP業(yè)者持續(xù)擴(kuò)大布局General Server(通用型...

關(guān)鍵字: SSD DDR4 服務(wù)器

Sept. 4, 2025 ---- Apple(蘋果)即將發(fā)布iPhone 17、iPhone 17 Air(暫名)、iPhone 17 Pro及Pro Max四款旗艦新機(jī),除了外觀辨識度升級,處理器性能、散熱和拍攝功...

關(guān)鍵字: iPhone 16 A19處理器 折疊機(jī)

Sept. 3, 2025 ---- 根據(jù)TrendForce集邦咨詢最新發(fā)布的《2025近眼顯示市場趨勢與技術(shù)分析》報(bào)告,2025年隨著國際品牌陸續(xù)推出AR眼鏡原型,以及Meta預(yù)計(jì)在近期發(fā)布AR眼鏡Celeste,市...

關(guān)鍵字: AR眼鏡 OLED

Sept. 2, 2025 ---- TrendForce集邦咨詢表示,2025年第二季DRAM產(chǎn)業(yè)因一般型DRAM (Conventional DRAM)合約價(jià)上漲、出貨量顯著增長,加上HBM出貨規(guī)模擴(kuò)張,整體營收為3...

關(guān)鍵字: DRAM 智能手機(jī) ASP

Sept. 1, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季因中國市場消費(fèi)補(bǔ)貼引發(fā)的提前備貨效應(yīng),以及下半年智能手機(jī)、筆電/PC、Server新品所需帶動,整體晶圓代工產(chǎn)能利用率與出貨...

關(guān)鍵字: 晶圓代工 智能手機(jī) 筆電

Aug. 28, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NAND Flash產(chǎn)業(yè)雖面臨平均銷售價(jià)格(ASP)小幅下滑,所幸原廠減產(chǎn)策略緩解供需失衡,疊加中、美兩大市場政策推動,整體...

關(guān)鍵字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英偉達(dá))近日推出的Jetson Thor被視為機(jī)器人的物理智慧核心,以Blackwell GPU、128 GB記憶體堆疊出2070 FP4 TFLOPS AI算力,是前...

關(guān)鍵字: 機(jī)器人 大型語言模型 AI算力

Aug. 21, 2025 ---- 根據(jù)TrendForce集邦咨詢最新液冷產(chǎn)業(yè)研究,隨著NVIDIA GB200 NVL72機(jī)柜式服務(wù)器于2025年放量出貨,云端業(yè)者加速升級AI數(shù)據(jù)中心架構(gòu),促使液冷技術(shù)從早期試點(diǎn)邁...

關(guān)鍵字: AI 數(shù)據(jù)中心 服務(wù)器

除了充電電路外,鋰電池的放電過程也需要保護(hù)。鋰電池的放電電壓不能低于3.0V,否則電池壽命會大幅縮短。為了實(shí)現(xiàn)這一保護(hù),工程師們設(shè)計(jì)了DW01芯片與8205 MOS管的電路組合。DW01芯片能夠監(jiān)控鋰電池的放電電壓和電流...

關(guān)鍵字: 鋰電池 電池
關(guān)閉