实验11:RGB LCD 显示屏
这个实验做完你会得到什么
手机上输入一句话,LCD 屏上立刻显示出来;再拖三根滑动条,屏幕背光变成任意颜色。
前面的实验都是”硬件的数据给手机看”,这一篇反过来 —— 让硬件成为手机的显示器, 脱离手机也能看到信息。
| 项目 | 说明 |
|---|---|
| 难度 | ★★☆☆☆ |
| 用时 | 约 35 分钟 |
| 前置 | 实验03:读一个按钮 |
改编自 MIT 官方教程 App Inventor + IoT: RgbLcd。 完成品工程:Arduino101RgbLcd.aia
一、器材清单
| 器材 | 数量 | 说明 |
|---|---|---|
| Arduino 101 | 1 | |
| Seeed Grove 扩展板 | 1 | |
| Grove RGB LCD(16×2) | 1 | 插任意一个 I2C 插座 |
二、接线
LCD 插在 Grove 扩展板的任意一个 I2C 插座(板上有四个,随便哪个都行)。
I2C 是总线,不是普通引脚,所以这个组件没有
Pin属性 —— 设备靠地址寻址,不靠引脚区分。这也是为什么四个 I2C 口是等价的。
固件:.ino 里把 RGB_LCD 设为 ENABLED,其余 DISABLED。
必须先装好 Grove_LCD_RGB_Backlight 库(见 实验00 第四节,
这个库不在库管理器里,要用 zip 手动装)。
三、界面组件
| 组件 | 命名 | 关键属性 |
|---|---|---|
| 文本输入框 | 文本输入框_内容 |
提示「输入要显示的文字」 |
| 按钮 | 按钮_显示 |
文本「显示到屏上」 |
| 按钮 | 按钮_读回 |
文本「读回当前内容」 |
| 滑动条 | 滑动条_红 / 滑动条_绿 / 滑动条_蓝 |
最小值 0、最大值 255 |
| 标签 | 标签_回显 |
文本「–」 |
| Arduino101RgbLcd | Arduino101RgbLcd1 |
不可见,BluetoothDevice = BluetoothLE1(无 Pin) |
四、分步搭代码块
第 1 步:把文字写到屏上
when 按钮_显示.Click() {
if isEmpty(文本输入框_内容.Text) {
标签_状态.Text = "请先输入内容"
} else {
Arduino101RgbLcd1.SetText(文本输入框_内容.Text)
标签_状态.Text = "已发送"
}
}
中途验证:输入 HELLO,点显示 —— LCD 上出现 HELLO。
只能显示 ASCII。16×2 的字符 LCD 字库里没有中文,发中文会显示成乱码方块。 每行 16 个字符,超出的部分不会自动换行,会被截掉或跑到看不见的地方。
想显示两行:在文字中间插一个换行符即可(用「文本」抽屉里的
\n拼接)。
第 2 步:调背光颜色
when 滑动条_红.PositionChanged(thumbPosition) {
刷新背光()
}
when 滑动条_绿.PositionChanged(thumbPosition) {
刷新背光()
}
when 滑动条_蓝.PositionChanged(thumbPosition) {
刷新背光()
}
procedure 刷新背光() {
Arduino101RgbLcd1.SetBackgroundColor(join("&HFF", "0000FF"))
}
中途验证:拖滑动条,屏幕背光颜色变化。
SetBackgroundColor直接接受颜色值 —— 组件文档写明:可以用「颜色」抽屉里的 任意颜色块,也可以用合成颜色块(取一个 RGB 列表)。所以三根滑动条的正确接法是: 把它们的值组成列表喂给合成颜色块,再接到这个方法上。文档同时提醒:LCD 的色域比屏幕窄,相近的颜色可能看不出区别, 调色时用差别大的颜色验证。
第 3 步:读回屏上内容
when 按钮_读回.Click() {
Arduino101RgbLcd1.GetText()
}
when Arduino101RgbLcd1.TextReceived(text) {
标签_回显.Text = join("屏上内容:", text)
}
when Arduino101RgbLcd1.BackgroundColorReceived(color) {
标签_状态.Text = join("当前背光:", color)
}
中途验证:点「读回」,标签显示屏幕上当前的文字。
读回是异步的:
GetText()只是发一个请求,结果通过TextReceived事件送回来。 写成标签.Text = Arduino101RgbLcd1.GetText()是拿不到值的 —— 这是所有 BLE 组件的通用模式,前面每一篇的传感器读数也都是这样。
第 4 步:连接与收尾
when BluetoothLE1.Connected() {
标签_状态.Text = "已连接"
Arduino101RgbLcd1.SetText("Connected")
}
when Screen1.BackPressed() {
BluetoothLE1.Disconnect()
}
五、排错表
| 现象 | 原因与处理 |
|---|---|
| 屏幕一片空白(背光亮着) | 对比度电位器需要调(屏背面那个小旋钮);或还没发过任何文字 |
| 屏幕完全不亮 | ① 没插在 I2C 口;② 固件 RGB_LCD 没 ENABLED;③ Grove_LCD_RGB_Backlight 库没装,固件编译就失败了 |
固件编译报 rgb_lcd.h 找不到 |
库没装。这个库要用 zip 手动添加,见 实验00 |
| 中文显示成方块 | 字符 LCD 只有 ASCII 字库,改用英文或数字 |
| 文字被截断 | 每行只有 16 个字符,自己分行 |
| 背光颜色相近看不出变化 | 正常,LCD 色域比屏幕窄(组件文档明确提到)。换差别大的颜色试 |
找不到 Pin 属性 |
I2C 设备靠地址寻址,没有 Pin,这是正常的 |
六、下一步
相关文档
- Arduino101RgbLcd 组件参考
- 官方原版教程(英文,已标注过时):MIT_App_Inventor_IoT_RgbLcd.pdf
扫码添加客服咨询