5 Digital 數位輸入與輸出
5.1 Digital Output設定 Pin 的輸出–霹靂燈範例
pinMode (pin,mode)
pinMode函數是用以配置接腳為輸入或輸出模式,它是一個無返回值函數,函數
有兩個參數pin和mode,pin參數表示所要配置的接腳,mode參數表示設置的模 式——INPUT(輸入)或OUTPUT(輸出)。
pinMode(13, OUTPUT); // 這裡設定所要輸出的PIN腳模式
digitalWrite(13, HIGH); // 設定PIN13腳位為高電位 = 5V
digitalWrite(13, LOW); // 設定PIN13腳位為低電位 = 0V
介紹:
我們等下就利用Digital output 的數位輸出功能,來設計一個霹靂燈的硬體。
會透過以下的函數達到這樣的效果,首先在初始化的時候,設定特定的
pinMode(13, OUTPUT);
做數位輸出的動作
函後再來設定電位高輸出5V 的電壓,來顯示LED,
digitalWrite(13, HIGH);
並且在透過
digitalWrite(13, LOW);
來降低電壓到0V,來關閉LED。
透過delay(200)來延遲時間
0.2 秒。
硬體接線:
圖5-1-1 霹靂燈的硬體接線
範例程式:
範例 Ch4-1 DancingLEDs.ino(範例程式中sample\ch04\DancingLEDs\)
- int ledPin1 = 10; // 這裡設定所要閃爍的LED燈腳位
- int ledPin2 = 11;
- int ledPin3 = 12;
- void setup()
- {
- pinMode(ledPin1, OUTPUT); // 這裡設定所要輸出的PIN腳模式
- pinMode(ledPin2, OUTPUT);
- pinMode(ledPin3, OUTPUT);
- }
- void loop()
- {
- digitalWrite(ledPin1, HIGH); // 設定PIN13腳位為高電位 = 5V
- delay(200); // 設定延遲時間,200 = 0.2秒
- digitalWrite(ledPin2, HIGH);
- delay(200);
- digitalWrite(ledPin3, HIGH);
- delay(200);
- digitalWrite(ledPin1, LOW); // 設定PIN13腳位為低電位 = 0V
- delay(200); // 設定延遲時間 200 = 0.2秒
- digitalWrite(ledPin2, LOW);
- delay(200);
- digitalWrite(ledPin3, LOW);
- delay(200);
- }
程式解說:
- 第9 行 pinMode(ledPin1, OUTPUT); //設定ledPin1 腳位為高電位 =
- 第 17 行 delay(200); //設定延遲時間,1000 = 1秒 延遲
- 第11 行 digitalWrite(ledPin1, HIGH); //設定ledPin1 腳位為高電位 = 5V LED 亮
- 第21 行 digitalWrite(ledPin1, LOW); //設定ledPin1 腳位為低電位 = 0V LED 暗
在Loop()中 我們依序:
- 亮第一個LED。
- 亮第一個LED。
- 亮第一個LED。
- 暗第一個LED。
- 暗第一個LED。
- 暗第一個LED。
這樣持續的執行。
使用長高科技的ADK 的實驗版的讀者:
請把接腳修改成實驗版上內建的LED的接腳。 int ledPin1 = 54; int ledPin2 = 57; int ledPin3 = 60; |
執行效果:
圖5-1-2 霹靂燈的範例,在ADK 上程式執行的情況。
5.2 Digital Input –讀取按鈕訊號數值code
digitalRead 函數用在接腳為輸入的情況下,可以獲取接腳的電壓情況—HIGH (高電平)或 LOW(低電平),參數 pin 表示所要獲取電壓值的接腳,該函數返回值為 int 型,表示接腳的電壓情況。
硬體設備:
- Arduino 板子
- 一個LED 燈
- 按鈕一個
- 10k 歐姆的電阻
- 麵包版
- 線材
硬體接線:
圖5-2-1 按鍵的硬體接線圖
範例 Ch5-2 DigitalRead.ino(範例程式中sample\ch05\DigitalRead\)
- int Key1Pin = 2;
- int ledPin1= 13;
- void setup()
- {
- pinMode(ledPin1, OUTPUT); // 這裡設定所要輸出的PIN腳模式
- pinMode(Key1Pin, INPUT); // 這裡設定所要讀入的PIN腳模式
- }
- void loop()
- {
- int keystate = digitalRead(Key1Pin); // 取得數位輸入PIN 腳的值
- if(keystate == 0) // 如果沒被按下的話
- {
- digitalWrite(ledPin1, LOW); // LED 亮
- }else{
- digitalWrite(ledPin1, HIGH); // LED 暗
- }
- }
程式碼介設:
- 第9 行 digitalRead 取得數位輸入PIN 腳的值
- 在Loop()中 我們依序:讀取數位接腳。
判斷是否按下後,設定LED 是否亮或暗。
使用長高科技的ADK 的實驗版的讀者:
請把接腳修改成實驗版的接腳。 int Key1Pin= 2; int ledPin1= 54; |
執行效果:
按鍵的範例,在Chang高科技ADK 上程式執行的情況。