페이지

2026년 6월 24일 수요일

5.4.3. 전자 주사위와 타이머 만들기





CODE 5.8 | 7-세그먼트로 전자 주사위 만들기
01int segmentPins[] = {2, 3, 4, 5, 6, 7, 8};
02// 7-세그먼트 A~G 핀을 연결한 디지털 핀 배열
03int btnPin = 9; // 푸시 버튼을 연결한 디지털 핀
04int lastState = HIGH; // 버튼의 이전 상태 저장
05 
06// 숫자 1~6을 표시하기 위한 세그먼트 점등 패턴
07byte digits[6][7] = {
08  {0, 1, 1, 0, 0, 0, 0}, // 1
09  {1, 1, 0, 1, 1, 0, 1}, // 2
10  {1, 1, 1, 1, 0, 0, 1}, // 3
11  {0, 1, 1, 0, 0, 1, 1}, // 4
12  {1, 0, 1, 1, 0, 1, 1}, // 5
13  {1, 0, 1, 1, 1, 1, 1} // 6
14};
15 
16void setup() {
17  // 7-세그먼트 A~G 핀을 출력 모드로 설정
18  for (int i = 0; i < 7; i++) {
19    pinMode(segmentPins[i], OUTPUT);
20  }
21 
22  pinMode(btnPin, INPUT_PULLUP); // 버튼 핀에 내부 풀업 저항 사용
23  randomSeed(analogRead(A0)); // 무작위 숫자 생성을 위한 초기값
24}
25 
26void loop() {
27  int currentState = digitalRead(btnPin); // 버튼 상태 읽기
28 
29  // 버튼이 눌리는 순간에만 LOW 신호가 입력됨
30  if (currentState == LOW && lastState == HIGH) {
31    int diceNumber = random(1, 7); // 1~6 사이의 무작위 숫자 생성
32 
33    // 생성된 숫자에 해당하는 세그먼트 점등 패턴 출력
34    for (int p = 0; p < 7; p++) {
35      digitalWrite(segmentPins[p], digits[diceNumber - 1][p]);
36    }
37 
38    delay(50); // 0.05초 대기
39  }
40 
41  lastState = currentState; // 현재 상태를 이전 상태로 저장
42}



 

틴커캐드 회로도
버튼 또는 주소를 클릭하면 새 창에서 회로도가 열립니다.

댓글 1개: