《Arduino零基礎(chǔ)C語言編程》課件-ch5-5.3 Mini 臺(tái)燈-數(shù)字大按鈕模塊_第1頁
《Arduino零基礎(chǔ)C語言編程》課件-ch5-5.3 Mini 臺(tái)燈-數(shù)字大按鈕模塊_第2頁
《Arduino零基礎(chǔ)C語言編程》課件-ch5-5.3 Mini 臺(tái)燈-數(shù)字大按鈕模塊_第3頁
《Arduino零基礎(chǔ)C語言編程》課件-ch5-5.3 Mini 臺(tái)燈-數(shù)字大按鈕模塊_第4頁
《Arduino零基礎(chǔ)C語言編程》課件-ch5-5.3 Mini 臺(tái)燈-數(shù)字大按鈕模塊_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

5.3Mini臺(tái)燈--數(shù)字大按鈕模塊硬件連接

數(shù)字大按鈕->數(shù)字2

數(shù)字食人魚紅色LED發(fā)光模塊->數(shù)字13

2025/2/7Arduino零基礎(chǔ)C語言編程15.3Mini臺(tái)燈--數(shù)字大按鈕模塊輸入代碼樣例代碼3:

//小臺(tái)燈

intbuttonPin=2; //按鈕連接到數(shù)字2

intledPin=13; //LED連接到數(shù)字13

intledState=HIGH; //ledState記錄LED狀態(tài)

intbuttonState; //buttonState記錄按鍵狀態(tài)

intlastButtonState=LOW; //lastbuttonState記錄按鍵前一個(gè)狀態(tài)

longlastDebounceTime=0;

longdebounceDelay=50; //去除抖動(dòng)時(shí)間

voidsetup(){pinMode(buttonPin,INPUT);pinMode(ledPin,OUTPUT);

digitalWrite(ledPin,ledState);

}

2025/2/7Arduino零基礎(chǔ)C語言編程2voidloop(){//reading用來存儲(chǔ)buttonPin的數(shù)據(jù)intreading=digitalRead(buttonPin);//一旦檢測(cè)到數(shù)據(jù)發(fā)生變化,記錄當(dāng)前時(shí)間

if(reading!=lastButtonState){lastDebounceTime=millis();

}等待50ms,再進(jìn)行一次判斷,是否和當(dāng)前button狀態(tài)相同如果和當(dāng)前狀態(tài)不相同,改變button狀態(tài)同時(shí),如果button狀態(tài)為高(也就是被按下),那么就改變led的狀態(tài)if((millis()-lastDebounceTime)>debounceDelay){if(reading!=buttonState){buttonState=reading;if(buttonState==HIGH){ledState=!ledState;}}}digitalWrite(ledPin,ledState);//改變button前一個(gè)狀態(tài)值lastButtonState=reading;}下載完代碼,按下按鈕,燈點(diǎn)亮。再按下按鈕,燈熄滅。是不是很像個(gè)小臺(tái)燈?5.3Mini臺(tái)燈--數(shù)字大按鈕模塊硬件分析(數(shù)字輸入—數(shù)字輸出)很明顯,大按鈕是輸入設(shè)備,LED是輸出設(shè)備。和前面感應(yīng)燈類似,也是一個(gè)數(shù)字輸入控制一個(gè)數(shù)字輸出。只是形式與代碼有所不同。

2025/2/7Arduino零基礎(chǔ)C語言編程35.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧由硬件分析可以看出,按鍵是輸入設(shè)備,LED是輸出設(shè)備。pinMode(buttonPin,INPUT);pinMode(ledPin,OUTPUT);

通過digitalWrite()讀取按鍵的狀態(tài):intreading=digitalRead(buttonPin);

通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖,

抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms。這是一個(gè)很重要的時(shí)間參數(shù),在很多場(chǎng)合都要用到,如下圖所示:

2025/2/7Arduino零基礎(chǔ)C語言編程45.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧

消抖是為了避免在按鍵按下或是抬起時(shí)電平劇烈抖動(dòng)帶來的影響。按鍵的消抖,可用硬件或軟件兩種方法。一般來說,會(huì)使用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。軟件消抖的方法是不斷檢測(cè)按鍵值,直到按鍵值穩(wěn)定。實(shí)現(xiàn)方法:假設(shè)未按鍵時(shí)輸入1,按鍵后輸入為0,抖動(dòng)時(shí)不定??梢宰鲆韵聶z測(cè):檢測(cè)到按鍵輸入為0之后,延時(shí)5ms~10ms,再次檢測(cè),如果按鍵還為0,那么就認(rèn)為有按鍵輸入。延時(shí)的5ms~10ms恰好避開了抖動(dòng)期。一旦檢測(cè)到讀取的數(shù)據(jù)發(fā)生變化,通過millis()函數(shù)記下時(shí)間:if(reading!=lastButtonState){lastDebounceTime=millis();}

2025/2/7Arduino零基礎(chǔ)C語言編程55.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧millis()是一個(gè)函數(shù),該函數(shù)是Arduino語言自有的函數(shù),它返回值是一個(gè)時(shí)間,Arduino開始運(yùn)行到執(zhí)行到當(dāng)前的時(shí)間,也稱之為機(jī)器時(shí)間,就像一個(gè)隱形時(shí)鐘,從控制器開始運(yùn)行的那一刻起開始計(jì)時(shí),以毫秒為單位。

再等待50ms,再進(jìn)行一次判斷,是否和當(dāng)前button狀態(tài)相同。如果和當(dāng)前狀態(tài)不相同,改變button狀態(tài)。同時(shí),如果button狀態(tài)為高(也就是被按下),那么就改變LED的狀態(tài)。

if((millis()-lastDebounceTime)>debounceDelay){if(reading!=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論