3. 序列埠的輸出以及按鈕消抖
序列埠的輸出以及按鈕消抖
0. 一段簡短的廢話:
由於我的電腦重置之後很多之前使用的軟件都不見了,包括用來畫圖的軟件,所以以後我不一定會提供電路圖.
1. 上一期的答案:
1 /* 2 * 使用按鈕控制LED燈的交替閃爍 3 */ 4 5 int buttonState = 0; 6 7 void setup() { 8 // 定義11,12腳為輸出,控制LED的亮滅 9 pinMode(11, OUTPUT); 10 pinMode(12, OUTPUT); 11 // 定義7腳為輸入,判斷按鈕的狀態 12 pinMode(7, INPUT); 13 } 14 15 void loop() { 16 // 獲取按鈕的狀態 17 buttonState = digitalRead(7); 18 19 if(buttonState == HIGH) { 20 // 低電平,11腳的燈熄滅,12腳的燈亮起 21 digitalWrite(11, LOW); 22 digitalWrite(12, HIGH); 23 } else { 24 // 高電平,12腳的燈熄滅,11腳的燈亮起 25 digitalWrite(12, LOW); 26 digitalWrite(11, HIGH); 27 } 28 }
帶我我放在這個地方,儘管注釋很詳細,希望大家自己多動手和思考.
2. 序列埠的輸出
序列埠的輸出講白了就是指由Arduino通過串口發送消息給電腦所以我們今天要做的就是記錄一個按鈕被按下的次數(按下,鬆開為一次,按下不放不計數).
- 代碼展示:
- 簡要說明:
- 13行的9600通信速度可以使用其他的,但是一般都是使用9600
- 20行中與操作使用的是&&,除了&&你還可以使用and.同理||可以使用or
- 23行加一操作使用的是自加一操作++,你也可以使用count += 1,或者count = count +1;
- 簡要說明:
/* 序列埠的輸出(向電腦傳輸數據) 統計按鈕的按下次數 */ // 按鈕上一次的狀態 int beforState = 0; // 按鈕按下的次數 int count = 0; void setup() { // 串口通信速度 Serial.begin(9600); pinMode(7, INPUT); } void loop() { // 定義按鈕的當前狀態,并從7號腳讀取 int buttonState = digitalRead(7); if( buttonState == HIGH && beforState == LOW ) { // 如果按鈕是高電位,並且前一次是低電位 // 按鈕按下,按下的次數加一 count++; // 傳送給電腦 Serial.println(count); } // 按鍵消抖 if ( buttonState != beforState ) { delay(20); } // 記錄本次的按鈕狀態 beforState = buttonState; //delay(100); }
代碼上傳之後點擊arduinoIDE右上角 放大鏡的圖標就能看見輸出
3. 關於消抖
其實消抖的代碼已經寫在上面了,我就不做過多的解釋.其實消抖的方法還有很多,除了這一種你還可以寫兩個if都是可以的.