我不確定大家聽到按鈕會聯想到甚麼!總之呢!在達到控制機器來說,它可以說是一個最直接簡單的溝通方式了,這次我們要教大家如何善用這一個功能,來方便日後做一個良好的輸入端喔。
那如果你還是不是很懂什麼是按鈕,那如果你還是不是很懂什麼是按鈕,在Arduino中,你把它想像成一個水龍頭就可以了,當你把水龍頭轉開時,訊號會源源不斷的流出來,而當你轉緊時就沒有水了,就是這麼簡單。
按鈕的構造
今日的程式相關
Ex:
Serial.begin(9600);
//即為Arduino會以9600的鮑率傳送訊號
附註:電腦在序列埠也要選到跟Serial.begin相同的鮑率才可以接收到正確的訊號,不然會接收到亂碼
利用digitalRead來讀取Arduino該腳位獲得的訊號
Ex:
digitalRead(13);
//即利用電腦讀取Arudino 13腳位獲得的訊號
在序列埠監控視窗中 print 出你想要print的東西,若是想要print 完後不換行則是將 Serial.println() 更改為 Serial.print()
Ex:
//我們就會在序列埠監控視窗中看到14一行字,並且自動換行
如果符合所訂的條件則執行放在if 裡面的程式碼,在條件中會常常用到的符號為 不等於: != 、 等於: == (其他的請參閱Arduino 官方 文件)v
Ex:
int x=2;
int y=2;
if (x + y == 4){
Serial.println("Hello World")
}
//這段程式碼在if 內寫了如果x+y的值為4,則會在監控視窗內看到 Hello World 這一串文字
而這段程式碼的執行結果因為符合我們訂的條件所以會在監控視窗內看到 Hello World 這一串文字
附註:若你想要寫一個多段條件程式碼則可以在if 的下面加多個else if 或者是一個else,兩者差異為else if可以附加條件,而else不行,所以通常else會放在if 跟 else if 這些判斷式之後執行都不符合的結果
Ex:
int x=digitalRead(A0);
int y=2;
if (x + y == 4){
Serial.println("又要到飯了兄弟們")
}
else if (x + y == 5){
Serial.println("god bless you, You are so gorgeous")
}
else {
Serial.println("啥也不是散會")
}
int buttonState = 0;
void setup()
{
pinMode(13, OUTPUT); // 13pin是Arduino內建LED的顯示角位
pinMode(7, INPUT); // 設定7pin是讀取訊號的位置
}
void loop()
{
buttonState = digitalRead(7);
if (buttonState == HIGH)
{
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
}
}
/*透過這個程式碼,讓我們來看看序列埠是怎麼運作的,同時也來看看你所設定的數位訊號被讀出來是什麼樣子吧*/
int buttonState = 0;
int pushButton = 7; // 定義PIN7為 pushButton
void setup()
{
Serial.begin(9600);
pinMode(pushButton, INPUT); // 設定PIN7為訊號接收腳位
}
void loop()
{
buttonState = digitalRead(pushButton);
Serial.println(buttonState); // 小提示!往後如果遇到不知道是什麼的變數,就試著把它print出來看看吧!
delay(1);
}
跟著範例程式碼你可能會遇到一些問題,什麼問題呢?
你的數位輸出在低電位時表現出的訊號應該是0高電位應該是1,可是在按鈕按下之前,為什麼跳出了這麼多不規律的訊號呢?
這時候只需要加入一個上拉電阻指令,將pinMode 中的INPUT改為INPUT_PULLUP 就可以囉 !
那有關上拉電阻的原理會在上課時跟大家詳細說明,但這裡希望告訴大家的是,在我們進行開發的時候,常常會遇到做出來的東西跟想像中不一樣,或是無法執行的情況,而這樣的情況往往是為討厭的,卻也一個學習"故障排除"的好機會。
P.S.如果你覺得這個太簡單了,你可以試試看做出一個實用一點的開關,畢竟我們總不能老是一直用手按著才會開燈對吧!
這樣的照明設備實在不是最好的選擇。