好,這次不用接線,請直接在右側零件選單選擇 Arduino。
LCD 模組有完整的控制指令,我們透過引入函式庫進行 LCD 的控制。
#include <Adafruit_LiquidCrystal.h>
主要的指令方法說明如下:
begin(columns, rows)
初始化 LCD 顯示器,設置顯示器的行數與列數。
lcd.begin(16, 2); // 假設是 16 行 2 列的 LCD 顯示器
clear()
: 清除 LCD 顯示器上的所有文字。此函式會發送清除命令到 LCD 控制器,將顯示器所有字元位置清空,並將游標重設到左上角(位置 0,0)。
lcd.clear();
home()
:將游標移回顯示器的起始位置(0,0)。
lcd.home();
setCursor(col, row)
:設定游標位置,從指定的列與行開始輸出資料。
lcd.setCursor(5, 1); // 將游標移至第 6 行、第 2 列(索引從 0 開始)
print()
:將文字、數字或其他資料以字串形式輸出到 LCD 上。
lcd.print("Hello, World!");
write()
:將單一字符(或原始位元)寫入 LCD。
lcd.write('A');
除了上述方法外,許多 LCD 庫還提供控制顯示的方法,例如:
display()
: 打開 LCD 顯示器,將儲存於顯示記憶體中的資料顯示出來。
lcd.display();
noDisplay()
: 關閉 LCD 顯示器,但不清除記憶體,資料依然存在,只是不顯示出來。
lcd.noDisplay();
cursor()
與 noCursor()
啟用或隱藏 LCD 顯示器上的游標。
blink()
與 noBlink()
啟用或關閉 LCD 上的游標閃爍功能。
好,接下來我們都以實際操作來學習如何使用。
首先,你會發現現在按下模擬已經會顯示東西,所以我們要來解釋現在其提供的程式碼:
#include <Adafruit_LiquidCrystal.h>
int seconds = 0;
Adafruit_LiquidCrystal lcd_1(0);
void setup()
{
lcd_1.begin(16, 2);
lcd_1.print("hello world");
}
void loop()
{
lcd_1.setCursor(0, 1);
lcd_1.print(seconds);
lcd_1.setBacklight(1);
delay(500); // Wait for 500 millisecond(s)
lcd_1.setBacklight(0);
delay(500); // Wait for 500 millisecond(s)
seconds += 1;
}
說明如下:
int seconds = 0;
Adafruit_LiquidCrystal lcd_1(0);
lcd_1
的 Adafruit_LiquidCrystal
物件。0
代表 LCD 模組的地址或初始化參數,這裡改成0x20也可以。void setup()
{
lcd_1.begin(16, 2);
lcd_1.print("hello world");
}
lcd_1.begin(16, 2);
lcd_1.print("hello world");
void loop()
{
lcd_1.setCursor(0, 1);
lcd_1.print(seconds);
lcd_1.setBacklight(1);
delay(500); // Wait for 500 millisecond(s)
lcd_1.setBacklight(0);
delay(500); // Wait for 500 millisecond(s)
seconds += 1;
}
好,在本單元結束前,我們實作一個小專案,為此,我們需要從元件中拉出 TMP36 溫度傳感器。
其中,最左邊的腳位是Vcc,中間的腳位是引腳產生與溫度成正比(線性)的類比電壓。它應該連接到類比 (ADC) 輸入。而最右邊的腳位是GND。
而要將電壓轉換為溫度,只需使用基本公式:
(Vout – 0.5) * 100
(1 – 0.5) * 100
= 50 °C最後把接線接好,如下圖:
接下來撰寫程式碼:
#include <Adafruit_LiquidCrystal.h>
// 建立 LCD 物件
Adafruit_LiquidCrystal lcd(0x20);
// 定義 TMP36 感測器連接的類比腳位
#define sensorPin A0
void setup() {
// 初始化 LCD 為 16 列 2 行
lcd.begin(16, 2);
// 選擇顯示背光
lcd.setBacklight(1);
// 初始化序列監視器(僅用於除錯)
Serial.begin(9600);
// 顯示一個啟動訊息,等待 2 秒後清除
lcd.print("TMP36 Sensor");
delay(2000);
lcd.clear();
}
void loop() {
// 讀取 TMP36 輸出(類比值介於 0 ~ 1023)
int reading = analogRead(sensorPin);
// 將讀取值轉換為電壓值
// 若使用 5V ,換算係數為 (5.0 / 1024.0)
float voltage = reading * (5.0 / 1024.0);
// 利用 TMP36 的特性將電壓轉換為攝氏溫度
float temperatureC = (voltage - 0.5) * 100;
// 將攝氏轉換為華氏溫度
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
// 清除 LCD 顯示,並將結果輸出到 LCD
lcd.clear();
// 第一行顯示攝氏溫度
lcd.setCursor(0, 0); // 第一列,第 0 行
lcd.print("T: ");
lcd.print(temperatureC, 1); // 顯示 1 位小數
lcd.write(0xB2); // 顯示度數符號 (°)
lcd.print("C");
// 第二行顯示華氏溫度
lcd.setCursor(0, 1); // 第二列,第 0 行
lcd.print("F: ");
lcd.print(temperatureF, 1);
lcd.write(0xB2); // 顯示度數符號 (°)
lcd.print("F");
// 同時將結果輸出到序列監視器(方便除錯)
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.print("\xB0");
Serial.print(" C | ");
Serial.print(temperatureF);
Serial.print("\xB0");
Serial.println(" F");
delay(1000); // 每隔 1 秒更新一次讀取結果
}
本頻道持續更新中(內容涵蓋前端程式設計入門、大學必備程式設計入門、電子系專業課程入門、數學微積分題解)如果身旁有相關科系的學生,不妨推薦一下喔~
相信這裡會是家教或線上課程之外,高中、大學生系統性綜合學習的好選擇。
最後感謝您的觀看!