주사위 굴리기
Coddy Arduino 여정의 디스플레이와 센서 섹션에 포함된 레슨. 24개 중 5번째.
random(1, 7)은 1부터 6까지의 정수를 선택합니다. 첫 번째 숫자는 나올 수 있는 가장 작은 수이고, 두 번째 숫자는 가장 큰 수보다 1 큰 수입니다.
보드 내부에는 실제 무작위성이 없습니다. random()은 시드라고 하는 숫자에서 시작해 앞선 숫자를 바탕으로 각 숫자를 계산합니다. 같은 시드를 사용하면 실행할 때마다 같은 숫자가 나옵니다. 전원을 켤 때마다 주사위는 2, 2, 6, 3을 굴리게 됩니다.
randomSeed()는 시드를 설정합니다. 첫 번째 버튼을 누른 시각처럼 실행할 때마다 달라지는 값을 지정하세요. micros()는 마이크로초 단위로 시간을 세며, 누구도 같은 마이크로초에 두 번 누르지는 않습니다.
if (!seeded) {
randomSeed(micros());
seeded = true;
}
int roll = random(1, 7);setup()에서 시드를 설정해도 소용없습니다. 전원을 켤 때마다 setup()은 같은 마이크로초에 실행되기 때문입니다.
챌린지
중급버튼은 핀 10에 연결되어 있고, 시작 코드는 버튼이 눌리는 순간을 이미 감지합니다. 주사위를 만들어 보세요:
- 버튼을 누를 때마다
random(1, 7)을 선택하고showDigit()으로 표시하세요 - 첫 번째로 누를 때만
randomSeed(micros())를 호출하여 실행할 때마다 다른 값이 나오게 하세요
Run을 누르고 버튼을 몇 번 누른 다음 Check를 누르세요.
직접 해보기
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// 숫자 하나당 패턴 하나. 오른쪽부터 읽으며, 마지막 비트는 세그먼트 a를 나타낸다.
// gfedcba
const byte digits[10] = {
0b0111111, // 0
0b0000110, // 1
0b1011011, // 2
0b1001111, // 3
0b1100110, // 4
0b1101101, // 5
0b1111101, // 6
0b0000111, // 7
0b1111111, // 8
0b1101111 // 9
};
void showDigit(int n) {
for (int i = 0; i < 7; i++) {
if (bitRead(digits[n], i) == 1) {
digitalWrite(segmentPins[i], LOW); // 켜짐
} else {
digitalWrite(segmentPins[i], HIGH); // 꺼짐
}
}
}
const int buttonPin = 10;
bool wasPressed = false;
bool seeded = false;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
showDigit(0);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
// 버튼이 방금 눌렸다: 1부터 6까지의 숫자를 무작위로 뽑아 표시한다
}
delay(50); // 버튼 입력이 안정될 때까지 기다린다
}
wasPressed = pressed;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
디스플레이와 센서의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드