從串口讀取數字訊號
本執行個體展示了如何通過用Arduino和電腦之間的USB 建立串口通訊 來監視開關的狀態。
硬體需求
Arduino 開發板
一個瞬時開關、按鈕或撥動開關
10k 歐姆電阻
麵包板
電線
Circuit
image developed using Fritzing. For more circuit examples, see the Fritzing project page
把3條線串連到 Arduino 開發板. 紅色與黑色的2條串連到麵包板邊上提供5V電源和接地。第3條線串連到數字引腳l pin 2 ,和按鈕的一隻腳串連在一起。同時這隻腳通過一個下拉電阻(10K歐)接地。 另一隻腳串連到5V電源。
當按下按鈕或者開關時,電路的2點聯通。當按鈕鬆開(抬起),按鈕的2腿之間沒有串連。所以引腳(通過下拉電阻)接地,讀數為LOW或0(低電平)。否則,當按鈕閉合(按下),按鈕的2腿之間產生串連,使得引腳連到5V電平,讀數我HIGH(高電平)或1.
如果數字 i/o pin 沒有任何串連, LED 可能會亂閃. 這是因為輸入不確定。也就是說,沒有固定地串連到電壓或接地,所以會隨機地返回 HIGH 或LOW.所以你需要串連一個下拉電阻。
原理圖
代碼
在以下程式中,你在setup函數裡要做的第一件事是在Arduino 與電腦之間以9600 位元每秒的速率開啟串口通訊,如這行所示:
Serial.begin(9600);
接著,初始化數字引腳2,這個引腳將從讀取你按鈕的輸出作為輸入:
pinMode(2,INPUT);
現在你的 setup (設定)已經完成, 下面開始程式的主loop(迴圈). 當你的按鈕按下,5V電壓流過你的電路,而當按鈕鬆開,輸入引腳將通過10k電阻接地。作為數字輸入,開關只能或者為開狀態(在Arduino 作為1或高電平)或關狀態(在Arduino 作為0或低電平),沒有其他選擇。
在主迴圈裡你要做的第一件事是建立一個變數來儲存從你開關裡得到的資訊。因為這個資訊只能是"1" 或 "0", 你可以用一個int 資料類型. 給這個變數起名 sensorValue, 並且把數字引腳2中得到的任何值賦予它。下行程式碼完成了這個工作。
int sensorValue = digitalRead(2);
一旦 Arduino 讀取了輸入,讓它把資訊以數值形式在電腦上顯示。 Serial.println() 命令可以搞定。這是我們的最後一行代碼:
Serial.println(sensorValue);
現在,當年從Arduino 環境中開啟串口監視器。當開關鬆開時,你能夠看到一連串的"0",當開關閉合時會有一連串的"1"。
/*
從串口讀取數字訊號
從pin 2 讀取數字輸入,把結果列印到串口監視器
這個常式可以公開。
*/
// 數字引腳pin 2串連著一個按鈕,給它取個名字:
int pushButton = 2;
// setup過程按下reset時執行一次 :
void setup() {
// 初始化串口通訊為9600位元每秒的速率:
Serial.begin(9600);
// 把連線按鍵的引腳作為輸入:
pinMode(pushButton, INPUT);
}
// loop過程將一直運行:
void loop() {
// 讀取輸入引腳:
int buttonState = digitalRead(pushButton);
// 列印按鈕狀態:
Serial.println(buttonState);
delay(1); // 為了保持穩定,在讀取數值之間稍作停頓
[Get Code]
See Also:
setup()
loop()
pinMode()
digitalRead()
delay()
int
serial
DigitalPins
BareMinimum: The bare minimum of code needed to start an Arduino sketch.
Blink: Turn an LED on and off. www.2cto.com
DigitalReadSerial: Read a switch, print the state out to the Arduino Serial Monitor.
AnalogReadSerial: Read a potentiometer, print it's state out to the Arduino Serial Monitor.
Fade: Demonstrates the use of analog output to fade an LED.
ReadAnalogVoltage : Reads an analog input and prints the voltage to the serial monitor