|
|
Hi,大家好!今天我們將綜合之前學(xué)到的,關(guān)于如何更好的使用按鍵開關(guān)等相關(guān)知識,做一個綜合的小實驗,看看如何用按鍵開關(guān)進行計數(shù)。當(dāng)然,與其說是用按鍵開關(guān)進行計數(shù),其實不如說是記錄按鍵開關(guān)的點擊次數(shù),嘿嘿!好!打起精神,讓我們開始吧!
首先,當(dāng)然還是老樣子,先要對所學(xué)的內(nèi)容做準(zhǔn)備。
硬件方面
arduino-read-digital.jpg (121.51 KB, 下載次數(shù): 236)
下載附件
2015-12-19 21:16 上傳
圖片來源:Arduino電路配件
具體包括如下:
- Arduino UNO電路板(1塊)
- 面包板(1塊)
- 10k電阻(1個)
- 按鍵開關(guān)(1個)
- 面包線(3根)
看!電路配件還是之前碰到的電路配件!沒有新面孔出現(xiàn),繼續(xù)!
軟件方面Arduino官方提供的IDE。
連接電路
arduino-ide-new.jpg (70.98 KB, 下載次數(shù): 260)
下載附件
2015-12-19 21:16 上傳
圖片來源:Arduino連接開關(guān)按鍵電路示意圖
嗯!電路連接還是之前碰到的電路連接!簡單吧!就剩下最后一步拉!
添加幾行代碼首先,還是新建一個項目窗口。
arduino-menu.jpg (9.87 KB, 下載次數(shù): 242)
下載附件
2015-12-19 21:16 上傳
圖片來源:Arduino官方IDE
下面就不能再一樣了,哈哈!!不過,雖說不一樣了,但也只是綜合了前面所學(xué)的相關(guān)知識。
- // 定義按鍵的針腳號為2的整型常量
- const int buttonPin = 2;
- // 定義LED輸入針腳號為13號針腳
- // 注:此處我們使用的LED神燈是Arduino UNO電路板自帶,
- // 此神燈對應(yīng)的針腳號默認為13,此數(shù)值不得隨意更改,
- // 所以這里定義的數(shù)值13是為了和默認值相對應(yīng)。
- const int ledPin = 13;
- // 定義用來記錄按鍵次數(shù)的整型變量
- int buttonPushCounter = 0;
- // 記錄當(dāng)前按鍵的狀態(tài)
- int buttonState = 0;
- // 記錄按鍵之前的狀態(tài)
- int lastButtonState = 0;
- // 對Arduino電路板或相關(guān)狀態(tài)進行初始化方法
- void setup() {
- // 設(shè)置按鍵的針腳為輸入狀態(tài)
- pinMode(buttonPin, INPUT);
- // 設(shè)置電路板上LED神燈的針腳狀態(tài)為輸出狀態(tài)
- pinMode(ledPin, OUTPUT);
- // 開啟串行通信,并設(shè)置其頻率為9600。
- // 如果沒有特別要求,此數(shù)值一般都為9600。
- Serial.begin(9600);
- }
- // 系統(tǒng)調(diào)用,無限循環(huán)方法
- void loop() {
- // 讀取按鍵的輸入狀態(tài)
- buttonState = digitalRead(buttonPin);
- // 判斷當(dāng)前的按鍵狀態(tài)是否和之前有所變化
- if (buttonState != lastButtonState) {
- // 判斷當(dāng)前按鍵是否為按下狀態(tài),
- // 如果為按下狀態(tài),則記錄按鍵次數(shù)的變量加一。
- if (buttonState == HIGH) {
- // 將記錄按鍵次數(shù)的變量加一
- buttonPushCounter++;
- // 向串口調(diào)試終端打印字符串“on”,
- // 表示當(dāng)前按鍵狀態(tài)為按下接通狀態(tài),
- // 輸出完成之后自動換行。
- Serial.println("on");
- // 向串口調(diào)試終端打印字符串
- // “number of button pushes: ”,此處沒有換行。
- Serial.print("number of button pushes: ");
- // 接著上一行尾部,打印記錄按鍵次數(shù)變量的數(shù)值。
- Serial.println(buttonPushCounter);
- } else {
- // 向串口調(diào)試終端打印字符串“off”,
- // 表示當(dāng)前按鍵狀態(tài)為松開狀態(tài),也即斷開狀態(tài)。
- Serial.println("off");
- }
- // 為了避免信號互相干擾,
- // 此處將每次按鍵的變化時間間隔延遲50毫秒。
- delay(50);
- }
- // 將每次loop結(jié)束時最新的按鍵狀態(tài)進行更新
- lastButtonState = buttonState;
- // 每點擊4次,更新一次LED神燈狀態(tài)。
- // 這里的百分號是求余數(shù)的意思,
- // 每次除以四,余數(shù)等于零說明按鍵點擊的
- // 次數(shù)是四的整數(shù)倍,即此時更新LED神燈。
- if (buttonPushCounter % 4 == 0) {
- // 點亮LED神燈
- digitalWrite(ledPin, HIGH);
- } else {
- // 熄滅LED神燈
- digitalWrite(ledPin, LOW);
- }
- }
復(fù)制代碼
代碼看起來好像有點長……其實呢,如果你仔細觀察,就會發(fā)現(xiàn),其實百分之八十的代碼都是之前學(xué)《另一種時間延遲》的時候?qū)W到的,而這次只是在其基礎(chǔ)上加入了計數(shù)的變量而已。如果覺得眼前的代碼有點眼暈,可以回過頭去溫習(xí)一下那篇文章。
圖片來源:Arduino官方IDE的文件編輯菜單選項
好!點擊一下上圖中標(biāo)有向右指向的箭頭圖標(biāo),將編寫好的代碼燒入Arduino UNO電路板。然后點擊上圖中最右側(cè)的放大鏡圖標(biāo),打開串口調(diào)試窗口,如下圖所示。
圖片來源:Arduino串口調(diào)試窗口
此時,當(dāng)你每次按下或松開按鍵開關(guān),都會打印相應(yīng)的字符串,來顯示當(dāng)前的按鍵狀態(tài)。而與此同時,Arduino UNO電路上的LED神燈,也會在你每按四次按鍵更新一次狀態(tài)。
總結(jié)通過此次練習(xí),我們沒有加入任何新知識,總體而言,是對前面幾次的學(xué)習(xí)進行了一次綜合運用。如果哪一部分看起來有點兒頭暈,可以溫習(xí)一下過去的幾次所學(xué)。嗯,加油!
下期預(yù)告一連幾次總是學(xué)習(xí)按鍵開關(guān),是不是有點膩了?嗯,猜到了!下一次,我們將一起學(xué)習(xí)新內(nèi)容。以前呢,Arduino UNO這塊憨厚老實的電路板,總是默默無聞的任你使喚。接下來,我們要讓她發(fā)出自己的聲音。答對了!我們要聽聽她那令人陶醉的歌喉!
ohcoder的系列精彩Arduino教程:
Arduino教程-初識Arduino(包含本教程目錄):http://www.raoushi.com/bbs/dpj-41334-1.html
Arduino教程-開篇:http://www.raoushi.com/bbs/dpj-41335-1.html
Arduino教程-點亮LED神燈:http://www.raoushi.com/bbs/dpj-41336-1.html
Arduino教程-讓LED神燈閃爍:http://www.raoushi.com/bbs/dpj-41337-1.html
Arduino教程-讓LED神燈亮度漸變:http://www.raoushi.com/bbs/dpj-41338-1.html
Arduino教程-獲取輸入數(shù)字信號:http://www.raoushi.com/bbs/dpj-41339-1.html
Arduino教程-獲取輸入模擬信號:http://www.raoushi.com/bbs/dpj-41340-1.html
Arduino教程-另一種時間延遲:http://www.raoushi.com/bbs/dpj-41331-1.html
Arduino教程-按鍵開關(guān):http://www.raoushi.com/bbs/dpj-41341-1.html
Arduino教程-停止抖動!:http://www.raoushi.com/bbs/dpj-41333-1.html
Arduino教程-拋棄外部電阻!:http://www.raoushi.com/bbs/dpj-41332-1.html
Arduino教程-用按鍵開關(guān)計數(shù):http://www.raoushi.com/bbs/dpj-41330-1.html
………后續(xù)持續(xù)更新中請打開:http://www.raoushi.com/bbs/dpj-41334-1.html
|
|