除了在上一章練習使用LED作為輸出外,我們還可以讓Arduino輸出文字顯示更複雜的結果。今章要介紹的是顯示文字的Serial Monitor,以及加入變數運算的進階應用。更詳細的說明可參考教科書的p.13/第1.5節
在Arduino IDE視窗的右上角有個放大鏡型的圖示Serial Monitor button(序列埠監控視窗)。只有你連上了實物控制板才能打開,打開後的介面如下:
最重要注意的是右下的9600 baud,它代表Data rate/傳輸資料的速度(9600 bit/s),也有「Baud rate 鮑率」這個叫法。這個數字等會會用到。
今章我們主要會使用以下的2個指令:
Serial.begin(9600);
Serial.print("想顯示的內容");
第一句的Serial.begin(9600); 是設定電腦與控制板之間的溝通頻道,就像撥打電話的起始動作。而9600這個鮑率就像是對講機的頻道,要電腦與控制板一樣才能正常顯示內容,如果兩者不一樣的話就會顯示亂碼了。常用的有9600/115200等。
而Serial.print("想顯示的內容")則是像digitalWrite();一樣,在想顯示文字時才要使用,並在小括號( )內用雙引號""包覆着你想顯示的內容即可
在學習編程時,有一個大部份初學者都必寫的程式,就是打印出Hello World!這個字串了。現在我們就用上面學到的兩句新指令打印Hello World!吧!
由於Serial.begin(9600);這句指令運行需要點時間,故我們在後面加一句delay(1000);暫停一秒留點緩衝時間。上載完成後我們可以打開Arduino IDE的右上角放大鏡圖示的Serial Monitor查看結果。
*如果打不開顯顯示器表示IDE沒偵測到控制板,請檢查硬件連接
**如果出現亂碼檢查下方的頻率是否和Serial.begin()內的一致(如9600)
在1a題目的基礎上,讓Serial Monitor 如每秒打印一次Hello World吧!
像1.0章節學到,我們把要重覆執行的部份放到loop就可以了,像下面的程式
void setup() {
Serial.begin(9600);
}
void loop() {
delay(1000);
Serial.print("Hello World!");
}
但是一般Serial.print()的內容會無空格直接貼在上一次的內容右方,就是打印的結果會像下圖一樣較難閱讀
如果要打印完內容後隔行,把Serial.print()換成Serial.println()即可,Serial.println()會在先例印完自己這句的內容後隔行:
void setup() {
Serial.begin(9600);
}
void loop() {
delay(1000);
Serial.println("Hello World!");
}
如果我們想做一個由1開始每秒加一的計數器,要怎麼做呢?最直觀的方法當然就是
Serial.println("1");delay(1000);
Serial.println("2");delay(1000);
Serial.println("3");delay(1000);
...
但那樣就要花時間逐個數字改了......
這時候我們可以用變數輔助完成這個目標。先看看變數的使用例子:
*要注意的是設定變數這句int x=yyy; 是暫時為數不多會放在setup()和loop()之外區域的指令,因為如果放在其中一個{ }內的話,{ }外面是讀不到的,例如以下的錯誤示範:
void setup() {
int x=0; //變數x只在setup()的範圍存在,一離開setup()範圍x這個變數就會刪除
Serial.begin(9600);
}
void loop() {
Serial.println(x); //這部份不存在x這個變數,所以會程式error
}
**如果列印的是變數而不是文字﹐那麼Serial.print()的內容就不需要加雙引號""
上面的第一句int是設定a,b, c三個變數、以及他們的初始值分別為10,15 和 20。注意這裡變數之間是用逗號分隔,當然也可以分開寫成3句:
int a=10; int b=15; int c=20;
那麼上面的程式會打印出什麼內容呢? 按右方箭頭查看解答
再看一條例子,在Serial.print()內除了變數外也可以使用算式
在進行計數時會用到以下的運算符號輔助,除了加減乘除對應+-*符號外,比較少見的為餘數對應的%符號
以上的例子都是重覆同一個數字,如果要令數字每次都有變化呢? 我們可以用 a = a + b 的格式把a 變成覆寫成右邊的值;按右方箭頭查看例子
變數的種類有很多種,但初階應用時我們基本只會用到int,而用int設定的變數只能是-32768~32767整數。只果要用小數的話可以用float,其他更多的變數種類待高階應用時可以回來再查看
回顧一開始的提問,像右方的題目要如何完成?
int x=0; //設定變數x,其初始值為0
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
x++; //x=x+1可以簡寫成x++
Serial.println(x);
delay(1000);
}
在2a題目的基礎上,加入文字完成右方的題目
int x=0; //設定變數x,其初始值為0
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
x++; //x+可以寫成x++
Serial.print("It's been ");
Serial.print(x);
Serial.println("s");
delay(1000);
}
在2a題目的基礎上,讓計數器循環由0數到9吧!(不能用if)
int x=0; //設定變數x,其初始值為0
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
Serial.println(x);
x=(x+1)%10; //取除10的餘數,所以只會是0~9
delay(1000);
}
(可選)在2c題目的基礎上,讓計數器循環由1數到5吧!
int x=0; //設定變數x,其初始值為0
void setup() {
Serial.begin(9600);
delay(1000);
}
void loop() {
Serial.println(x);
x=(x+1)%10; //取除10的餘數,所以只會是0~9
delay(1000);
}
(可選)在2b和2c題目的基礎上,做一個有分秒的計數器吧!