之前的實習我們都是透遇燈號來瞭解Arduino的輸出,或是透過監控視窗來觀察程式變數值的變化,其實,Arduino也有許多的輸出模組可以利用文字來進行輸出,而其中價格最便宜又操作簡單的就是LCD液晶模組,現在的模組大都已經使用LCM 1602這個顆IC讓模組可以透過I2C的方式,只要使用2條線就可以和Arduino進行通訊,非常方便。這個單元就讓我們來看看如何可以輕易地和可以顯示2行英文字,每一行可以支援16個字元(16×2)的液晶顯示器吧!

以下是這個LCD模組的正反面照片:

在背面照片上可以看到這個模組只有4支接腳,其中2支(上方)分別是GND和VCC(連接到Arduino的5V),然後接著是SDA以及SCL,這兩個接腳不用想太多,就是I2C通訊協定使用的接腳,而且,在Arduino上就有兩支相對應的接腳就是給I2C通訊協定使用的,分別是A4以及A5,所以,意思是說,只要很簡單地把SDA接到A4,而SCL接到A5,就完成電路的連接了!

至於什麼是I2C,請感興趣的同學們自行前往Google去搜尋相關資料。在Arduino和LCD的連接使用上,已經有人幫我們寫好程式庫模組,我們只要下載拿來使用即可。網址:https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/,前往此網址之後,畫面如下:

請如箭頭所示下載最新版本到自己的硬碟中,然後解壓縮之後複製它的資料夾到Arduino的Libraries的資料夾下,如下圖所示:

接著就可以開始設計程式了,我們的第一個測試的程式如下:

在使用程式庫最重要的就是本程式的前3行,前2行引入所需要的自訂函式標頭檔,而第3行則是設定LCD液晶顯示模組的位址,只要直接複製使用即可。在經過第3行的設定之後,就可以直接在後續的程式碼中以lcd這個執行實例操作這個液晶顯示器。幾個比較重要的函式分別是lcd.backlight()用來開啟背光,lcd.noBacklight()是關閉背光,lcd.setCursor()用來設定要顯示的字元的起始位置,第1個數字是第幾行,而第2個數字是第幾列,而lcd.print()即是輸出字串的內容。要注意的是,在輸出的一行文字的時候它並不會自行幫我們清除該行,因此在程式例子中一律都輸出剛好16個字元,以便把之前的文字全部覆蓋掉。不過,如果打算清除全部的文字的話,使用lcd.clear()就可以了。

上述程式的執行結果如下面的示範影片:

接下來我們要運用一個技巧,讓我們可以把在序列埠監控視窗輸入的文字轉到此液晶顯示器上輸出。程式如下:

此程式會讓Arduino一開始先顯示兩個歡迎訊息,接著就進入等待迴圈。那個Serial.available()是用來偵測是否有來自於序列埠的輸入,如果有的話,就會先等一小陣時間,然後清除畫面,再使用一個while迴圈,透過lcd.write()把所有收到的資料全部輸出(Serial.read()是用來讀取來自於序列埠資料用的)到液晶顯示器上。在程式執行之後,同學們可以開啟Arduino iDE上的序列埠監控視窗,然後在上方輸入一段文字再按下Enter按鍵,就可以看到該段輸入的文字被顯示在LCD上了。

以下是輸出的畫面:

(1658)