Arduino UNO + LCD 制作《卡坦岛》电子骰子
元件与材料
| Arduino UNO | × | 1 |
| Adafruit 标准 LCD - 16x2 白字蓝底 | × | 1 |
| 按键开关 12mm (SparkFun) | × | 1 |
项目步骤
搭建 LCD 显示屏
按标准方式接线 LCD,不熟悉可参考官方教程。

添加按键
接一个按键用于摇骰子,也可用倾斜传感器模拟摇骰动作。
编写代码与初始界面
引入 LiquidCrystal 库。setup() 中设置开机显示 "Roll the dice!",可自定义。

营造悬念动画
编写 buildUp() 函数,按键按下时在两行 16 字符位置快速滚动随机数 (1-6),延迟从 220ms 递减至 0,模拟骰子滚动停止过程。可根据屏幕尺寸调整循环次数和延迟递减值。

显示骰子点数
用 setCursor 将两个骰子点数分别显示在两行中央,位置可自行调整。

“强盗”特殊规则
《卡坦岛》中掷出 7 点触发强盗。代码中加入判断:若两骰子之和为 7,清屏显示 "7" 及 "The Robber" 提醒玩家计算手牌。其他游戏可删除或修改该逻辑。
享受游戏
邀请好友畅玩《卡坦岛》!
完整代码
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int diceButton = 10;
int reply;
int count = 0;
long diceOne;
long diceTwo;
void setup() {
lcd.begin(16, 2);
pinMode(diceButton, INPUT);
randomSeed(analogRead(0));
lcd.setCursor(1, 0);
lcd.print("Roll the dice!");
}
void buildUp() {
lcd.clear();
int countDelay = 220;
int setColumn = 0;
for (count = 0; count <= 16; count++) {
lcd.setCursor(setColumn, 0);
lcd.print(random(1, 7));
lcd.setCursor(setColumn, 1);
lcd.print(random(1, 7));
delay(countDelay);
countDelay -= 13;
setColumn += 1;
}
}
void loop() {
diceButton = digitalRead(10);
diceOne = random(1, 7);
diceTwo = random(1, 7);
if (diceButton == HIGH) {
buildUp();
lcd.clear();
lcd.setCursor(7, 0);
lcd.print(diceOne);
lcd.setCursor(7, 1);
lcd.print(diceTwo);
if (diceOne + diceTwo == 7) {
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("7");
lcd.setCursor(3, 1);
lcd.print("The Robber");
}
}
}
制造工艺
- 骰子的历史、设计与制造:从古代工具到现代游戏
- 液晶显示器(LCD):技术、制造与未来展望
- Primal Display:树莓派 LCD 温度监测仪
- Kuman 3.5″ TFT 显示屏在 RetroPie 上安装全步骤指南
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
- 使用4511七段解码器:实用BCD显示教程
- 显示管:从 CRT 到猫眼指示器
- 高级频谱分析:解读波形与谐波
- 掌握 C# 方法重载:核心概念、实战示例与最佳实践
- 理解Verilog任务:函数vs任务、语法与用法全解析
- 掌握 Verilog 显示任务:高效调试与日志记录