아두이노 UNO와 LCD로 만드는 디지털 카탄 주사위
부품 및 소모품
| 아두이노 UNO | 1개 |
| Adafruit 표준 LCD - 16x2 흰색/파란색 | 1개 |
| SparkFun 푸시버튼 스위치 12mm | 1개 |
프로젝트 소개
카탄 정착민 게임을 좋아해서 디지털 주사위를 만들어 보았습니다. 처음엔 빨간 LED 7개를 사용했는데, 카탄에는 주사위 2개가 필요하다는 걸 깨달았습니다. 그래서 LCD 디스플레이를 사용하기로 했습니다.
디스플레이 설정
평소처럼 LCD 디스플레이를 설정하세요. 방법을 모르면 이 지침을 따르세요.

버튼 추가
주사위를 굴릴 때마다 누를 버튼을 추가하세요. 주사위 굴리기 동작을 흉내 내고 싶다면 틸트 센서를 사용해도 됩니다.
코드 및 초기 텍스트
이제 코드를 추가할 차례입니다. LiquidCrystal 라이브러리를 포함하는 걸 잊지 마세요. setup에서 디스플레이 초기 텍스트를 "Roll the dice!"로 설정했습니다. 원하는 텍스트로 변경 가능합니다.

긴장감 조성
버튼을 누를 때마다 호출되는 buildUp 함수를 작성하여 주사위 눈이 나올 때의 긴장감을 조성했습니다. 디스플레이는 16자 2행입니다. 두 행을 1~6 사이의 랜덤 숫자로 채우되, 숫자가 나타날 때마다 속도가 빨라지도록 했습니다. for 루프에서 이 효과를 냅니다. 디스플레이 행/열 수가 다르면 코드를 조정하세요.
딜레이를 220ms로 설정하고 16로 나누었습니다. 루프가 돌 때마다 이 값을 countDelay에서 빼줍니다. 숫자가 나타나는 속도를 조절하려면 이 숫자들을 변경하세요.

주사위 눈 표시
이제 실제 주사위 눈을 표시합니다. 카탄에 필요한 두 개의 주사위를 표현하기 위해 각 행에 하나씩 숫자를 표시했습니다. setCursor로 디스플레이 중앙에 위치시켰습니다. 원하는 위치에 배치하세요.

도둑 (The Robber)
카탄에서 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");
}
}
}
Liquid Crystal 라이브러리를 포함하는 걸 잊지 마세요.