우리는 모두 주사위에 익숙하며 주사위를 사용하여 LUDO 또는 SANP SIDI (Snake & Ladders) 게임을 자주합니다. 주사위는 모든면에 6 개의 서로 다른 숫자가 들어있는 squire 유형의 단단한 상자입니다. 우리는 게임을하는 동안 임의의 숫자를 얻기 위해 표면에 주사위를 던집니다. 이 프로젝트에서 우리는 arduino uno 보드를 사용하여 디지털 주사위로 그것을 복제하려고 시도했습니다. 주사위를 던지는 대신 0에서 6 사이의 임의의 숫자를 얻으려면 버튼을 눌러야합니다.
필수 구성 요소
- Arduino UNO
- 7 세그먼트 디스플레이 (Common Anode)
- 푸시 버튼
- 전선 연결
- 브레드 보드
- 1k 저항
- 전원 공급
회로도 및 설명
위의 디지털 주사위 회로에서 볼 수 있듯이 arduino는 전체 프로세스를 제어하는 데 사용됩니다. 두 개의 푸시 버튼이 회로에 사용됩니다. 하나는 주사위를 시작하고 다른 하나는 주사위를 재설정하는 데 사용됩니다. Arduino는이 두 버튼을 읽고 작업을 수행합니다. 7 세그먼트 디스플레이는 주사위 결과를 표시하는 데 사용됩니다.
Arduino는 지속적으로 rand () 함수를 실행하고 그 값을 임시 변수에 저장합니다. 주사위 버튼을 누르면 저장된 값이 계산되어 적절한 방법을 사용하여 7 개의 세그먼트에 표시됩니다 (기사 프로그래밍 부분 참조).
이 주사위 회로에서 공통 양극 7 세그먼트 디스플레이 는 주사위 번호를 표시하는 데 사용되며 arduino 디지털 핀 번호 6, 5, 4, 3, 2, 1, 0에 직접 연결됩니다. 그리고 7 세그먼트의 공통 양극 핀은 다음과 같습니다. + 5V 220 Ohm 저항과 연결됩니다. 두 개의 푸시 버튼도 연결됩니다. 즉, 접지와 관련하여 디지털 핀 14 (A0) 및 15 (A1)에 연결된 주사위 버튼과 리셋 버튼입니다.
코드 설명
이 프로젝트의 프로그래밍 부분은 7 세그먼트 디스플레이에 임의의 디지털 주사위 번호를 표시하는 데 매우 중요한 역할을합니다. Arduino에는 7 개 세그먼트 디스플레이를위한 라이브러리가 없습니다. 그래서 우리는 라이브러리를 사용하지 않고 전체 코드를 만들었습니다.
우선 우리는 7 세그먼트 디스플레이를 위해 디지털 핀을 선택합니다.
int 핀 = {6,5,4,3,2,1,0};
그 후에 우리는 1, 2, 3, 4, 5 및 6의 6 자리 주사위 배열을 만듭니다.
문자 숫자 = {0x02, 0x79, 0x24, 0x30, 0x19, 0x12};
이제 우리는 출력으로 arduino 핀을 사용하도록 지시했습니다.
void setup () {for (int i = 0; i <7; i ++) pinMode (pin, OUTPUT); pinMode (dice, INPUT); pinMode (resett, INPUT); digitalWrite (dice, HIGH); digitalWrite (resett, HIGH);
기본적으로 7 세그먼트 디스플레이에 0을 표시하는 코드를 보냅니다.
int temp = 0x40; for (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (핀, 온도 1); temp = temp >> 1; }
이제 rand () 함수를 실행하여 난수를 얻습니다.
int temp = rand ();
그리고 주사위 버튼 프로그램을 누르면 먼저이 난수를 매핑 한 다음 비트 연산자를 사용하여 숫자를 7 세그먼트 디스플레이로 보냅니다.
if (digitalRead (dice) == 0) {int k = temp % 6; 온도 = 숫자; 기다림(); for (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (핀, 온도 1); temp = temp >> 1; } 지연 (200); }
리셋 버튼도 마찬가지입니다.
이 프로그램에서 우리는 한 번에 하나의 비트를 보냅니다. 여기서는 각 세그먼트에 하나씩 데이터를 보내기 위해 7 번 실행되는 for 루프를 적용합니다.