Arduino UNO R3使用的主處理器ATMega328P上有3個8位的輸入/輸出埠, 它們分別是PB, PC和PD。 Arduino IDE提供的Blink示例可以説明我們瞭解埠的數位輸出功能:
1 int led = 13; 2 3 void setup { 4 pinMode(led, OUTPUT); 5 } 6 7 void loop { 8 digitalWrite(led, HIGH); 9 delay(1000);10 digitalWrite(led, LOW);11 delay(1000);12 }這個示例使Arduino 13(PB5)引腳上的LED閃爍。 與數位輸出相關的Arduino庫函數有:
pinMode(pin, mode):配置指定引腳為輸入或輸出
pin:指定引腳
mode:OUTPUT(輸出), INPUT(輸入)或INPUT_PULLUP(帶上拉電阻的輸入)
digitalWrite(pin, value):從指定引腳輸出電平
pin:指定引腳
value:LOW(低電平, 0V), HIGH(高電平, 5V)
ATMega328P的每個埠都由3個相關寄存器控制, 方向寄存器DDRx(x = B, C, D)用於指定埠引腳方向, 若向其中某位寫入1, 則該位控制的引腳被設置為輸出, 寫入0則為輸入。 輸出寄存器PORTx(x = B, C, D)在該埠引腳被設置為輸出時, 寫入1則輸出高電平, 寫入0則輸出低電平;在該埠引腳被設置為輸入時,
通過直接訪問寄存器改寫以上程式:
1 void setup {2 DDRB |= (1 << PB5);3 }4 5 void loop {6 PORTB ^= (1 << PB5);7 delay(1000);8 }向電路中添加一個按鍵, 讓它的兩端分別連接在Arduino 2(PD2)引腳和GND(地)引腳上(如下所示)。
這樣使得按鍵在沒有按下時2(PD2)引腳處於懸空狀態, 因此需要將2(PD2)引腳設置為帶上拉電阻的輸入模式:
1 const int buttonPin = 2; 2 const int ledPin = 13; 3 4 int buttonState = 0; 5 6 void setup { 7 pinMode(ledPin, OUTPUT); 8 pinMode(buttonPin, INPUT_PULLUP); 9 }10 11 void loop{12 buttonState = digitalRead(buttonPin);13 14 if (buttonState == HIGH) { 15 digitalWrite(ledPin, HIGH); 16 } 17 else {18 digitalWrite(ledPin, LOW); 19 }20 }除了pinMode函數外, 與數位輸入相關的Arduino庫函數有:
digitalRead(pin):從指定引腳上讀取電平
pin:指定引腳
函數返回LOW(低電平, 0V)或HIGH(高電平, 5V)
通過直接訪問寄存器改寫以上程式:
1 void setup { 2 DDRB |= (1 << PB5); 3 DDRD &= ~(1 << PD2); 4 PORTD |= (1 << PD2); 5 } 6 7 void loop { 8 if (PIND & (1 << PD2)) { 9 PORTB |= (1 << PB5);10 } else {11 PORTB &= ~(1 << PB5);12 }13 }