PWM實現(xiàn)變色LED燈——串口輸入輸出的基本方法
Arduino串口的使用——與計算機交流
?Arduino與計算機通信最常用的方式就是串口通信
?我們使用USB線連接Arduino Uno與計算機時,Arduino Uno會在計算機上虛擬出一個串口設備,此時兩者之間便建立了串口連接。通過此連接,Arduino Uno便可與計算機互傳數(shù)據(jù)。
串口初始化
?使用串口與計算機通信,需要先使用Serial.begin() 初始化Arduino的串口通信功能。

?參數(shù)speed是指串口通信波特率,這是設定串口通信速率的參數(shù)。串口通信的雙方必須使用同樣的波特率,方能正常進行通信。
波特率
波特率是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如9600波特表示每秒發(fā)送9600bit的數(shù)據(jù)。通信雙方需要使用一致的的波特率才能正常通信。Arduino串口通信通常會使用以下波特率:
300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200 (單位:bps)
波特率越大,說明串口通信的速率越快。
串口輸出
串口初始化完成后,我們便可以使用Serial.print() 或Serial.println() 向計算機發(fā)送信息了。

?參數(shù)val是你要輸出的數(shù)據(jù),各種類型的數(shù)據(jù)均可。

?Serial.println(val) 語句也是使用串口輸出數(shù)據(jù),不同的是println() 函數(shù)會在輸出完指定數(shù)據(jù)后,再輸出一組回車換行符。
使用串口輸出數(shù)據(jù)到計算機

上傳該程序到Arduino Uno,然后可以通過Arduino IDE右上角的 圖標打開串口監(jiān)視器。
注意保證串口監(jiān)視器右下方的波特率和上傳程序中的一致,才能保證正常運行。

串口輸入
?除了輸出,串口同樣可以接收由計算機輸出的數(shù)據(jù)。接收串口數(shù)據(jù)需要使用Serial.read()函數(shù)。

?調用該語句,每次都會返回一個字節(jié)的數(shù)據(jù),這個返回值便是當前串口讀取到的數(shù)據(jù)。
?上傳以下程序到Arduino:


上傳成功后,運行串口監(jiān)視器,在發(fā)送按鍵左側的文本框中輸入要發(fā)送的信息,如"arduino",你會看到Arduino在輸出了你輸入的信息同時,還輸出了很多亂碼。
這些亂碼是因為串口緩沖區(qū)中沒有可讀數(shù)據(jù)造成的。當緩沖區(qū)中沒有可讀數(shù)據(jù)時,read()函數(shù)會返回int型值-1,而int型-1對應的char型數(shù)據(jù)便是該亂碼。
在使用串口時,Arduino Uno會在SRAM中開辟一段大小為256 bytes的空間,串口接收到的數(shù)據(jù)都會被暫時存放進這個空間中,這個存儲空間,我們稱之為緩沖區(qū)。當你調用Serial.read()語句時,Arduino便會從緩沖區(qū)取出一個字節(jié)的數(shù)據(jù)。
通常使用串口讀取數(shù)據(jù)時,需要搭配Serial.available() 語句使用。

Serial.available() 的返回值便是當前緩沖區(qū)中接收到的數(shù)據(jù)字節(jié)數(shù)。
Serial.available() 可以搭配if 或者while使用,先檢測緩沖區(qū)中是否有可讀數(shù)據(jù),如果有數(shù)據(jù),再讀取,沒有數(shù)據(jù)便跳過讀取或等待讀取。如:



上傳完成后,打開串口監(jiān)視器,鍵入并發(fā)送任意信息。你會看到Arduino輸出了你發(fā)送過去的信息,并且不會再出現(xiàn)亂碼了。

需要注意的是,在串口監(jiān)視器右下角有兩個選項,一個是設置結束符,一個是設置波特率。如果你設置了結束符,則在你最后發(fā)送完數(shù)據(jù)后,串口監(jiān)視器會自動發(fā)送一組你設定的結束符,如回車符和換行符。