乐高 EV3 实验06 - 屏幕表情与音效,让机器人有点性格

« 返回 LEGO 专题

实验06:屏幕表情与音效

这个实验做完你会得到什么

手机上点几个按钮,EV3 屏幕上画出笑脸/哭脸主机喇叭弹出一小段旋律, 再点一下显示主机电量和固件版本。

前五篇都在让机器人”动”,这一篇让它”表达” —— 做互动作品、儿童教学时特别有用。

项目 说明
难度 ★★☆☆☆
用时 约 35 分钟
前置 实验01:连上机器人

一、器材清单

器材 数量 说明
EV3 主机 1 不需要马达和传感器,只用主机自带的屏幕和喇叭

二、界面组件

组件 命名 关键属性
按钮 按钮_笑脸 / 按钮_哭脸 / 按钮_清屏  
按钮 按钮_旋律 文本「弹一段」
按钮 按钮_信息 文本「查看主机信息」
标签 标签_信息 多行显示
EV3绘图 EV3绘图1 BluetoothClient = 蓝牙客户端1
EV3声音 EV3声音1 BluetoothClient = 蓝牙客户端1
EV3指令发送器 EV3指令发送器1 BluetoothClient = 蓝牙客户端1

EV3 屏幕是 178×128 的单色屏,坐标原点在左上角。颜色参数只有两个值: 1 = 黑(画上去)、0 = 白(擦掉)


三、分步搭代码块

第 1 步:画一个笑脸

when 按钮_笑脸.Click() {
  EV3绘图1.FillScreen(0)
  EV3绘图1.DrawCircle(1, 60, 40, 8, true)
  EV3绘图1.DrawCircle(1, 118, 40, 8, true)
  EV3绘图1.DrawLine(1, 60, 85, 80, 95)
  EV3绘图1.DrawLine(1, 80, 95, 98, 95)
  EV3绘图1.DrawLine(1, 98, 95, 118, 85)
  标签_状态.Text = "画好了笑脸"
}

中途验证:EV3 屏幕上出现两只实心眼睛和一张上扬的嘴。

FillScreen(0)用白色填满 = 清屏,每次重画前先清一次,否则会和上一幅叠在一起。

DrawCircle(颜色, x, y, 半径, 是否填充)DrawLine(颜色, x1, y1, x2, y2)。 嘴巴是三段直线拼的 —— 这块屏幕没有画弧的方法。

第 2 步:换个表情

when 按钮_哭脸.Click() {
  EV3绘图1.FillScreen(0)
  EV3绘图1.DrawCircle(1, 60, 40, 8, true)
  EV3绘图1.DrawCircle(1, 118, 40, 8, true)
  EV3绘图1.DrawLine(1, 60, 100, 80, 88)
  EV3绘图1.DrawLine(1, 80, 88, 98, 88)
  EV3绘图1.DrawLine(1, 98, 88, 118, 100)
  EV3声音1.PlayTone(50, 200, 600)
}

when 按钮_清屏.Click() {
  EV3绘图1.FillScreen(0)
}

中途验证:哭脸的嘴角朝下,同时响一声低沉的音。

笑脸和哭脸只差嘴巴那三条线的 y 坐标 —— 把中间两点抬高、两端点压低就成了哭脸。

第 3 步:弹一段旋律

global 音符 = list(262, 294, 330, 349, 392, 440, 494, 523)
global 第几个 = 0

when 按钮_旋律.Click() {
  global 第几个 = 0
  计时器1.TimerEnabled = true
}

when 计时器1.Timer() {
  global 第几个 = 第几个 + 1
  if 第几个 > length(音符) {
    计时器1.TimerEnabled = false
    标签_状态.Text = "弹完了"
  } else {
    EV3声音1.PlayTone(60, 音符[第几个], 250)
    标签_状态.Text = join("第 ", 第几个, " 个音")
  }
}

加一个 计时器1计时器启用取消勾选、间隔 300。

中途验证:点「弹一段」,EV3 依次弹出 do-re-mi-fa-so-la-si-do 一个音阶。

PlayTone(音量, 频率, 毫秒) —— 音量在前,别写反。 频率就是音高:262 是中央 C,523 是高八度的 C。

计时器间隔要比音长稍大(300 > 250),不然上一个音还没响完就被下一个打断, 听起来是糊在一起的。

第 4 步:查主机信息

when 按钮_信息.Click() {
  标签_信息.Text = join("电量 ", EV3指令发送器1.GetBatteryVoltage(), " V\n固件 ", EV3指令发送器1.GetFirmwareVersion(), "\n硬件 ", EV3指令发送器1.GetHardwareVersion())
}

中途验证:显示电池电压(满电约 8 V 左右)和固件版本号。

电量低是很多”怪问题”的真凶:马达转不动、动作不准、蓝牙老掉线 —— 排查前先看一眼电压。

EV3指令发送器 还有一个 KeepAlive(分钟),可以防止主机自动休眠断连。


四、排错表

现象 原因与处理
屏幕没反应 BluetoothClient 属性没设;② 没连上(先看实验01);③ EV3 停在了某个菜单界面,回到主界面再试
画的图重叠在一起 每次画之前没 FillScreen(0) 清屏
图形画到屏幕外 屏幕只有 178×128,坐标别超
颜色参数填 2、3 没效果 单色屏只有 0(白)和 1(黑)
旋律糊成一片 计时器间隔小于等于音长,把间隔调大
声音很小 PlayTone 第一个参数是音量(0~100),调到 80 试
一会儿就断连 主机自动休眠。用 KeepAlive 或在 EV3 设置里关掉休眠

五、下一步


相关文档

文档反馈