Cu toții suntem familiarizați cu zarurile și am jucat adesea jocul LUDO sau SANP SIDI (Snake & Ladders) folosind zaruri. Dice este o cutie solidă de tip squire care conține 6 numere diferite pe toate laturile sale. Aruncăm zaruri pe o suprafață pentru a obține un număr aleatoriu în timp ce jucăm jocurile. În acest proiect am încercat să îl reproducem cu un zar digital folosind placa arduino uno. În locul aruncării zarurilor, aici trebuie să apăsăm un buton pentru a obține un număr aleatoriu între 0 și 6.
Componente necesare
- Arduino UNO
- Afișaj pe șapte segmente (Anod comun)
- Apasa butoanele
- Conectarea firelor
- Placă de pâine
- 1 k rezistor
- Alimentare electrică
Diagrama și explicația circuitului
Așa cum se arată în circuitul de zaruri digitale de mai sus, arduino este utilizat pentru controlul întregului proces. În circuit sunt utilizate două butoane - unul pentru a porni zarurile și altul pentru resetarea zarurilor. Arduino citește aceste două butoane și efectuează operația. Un afișaj cu șapte segmente este utilizat pentru a afișa rezultatul zarurilor.
Arduino execută continuu funcția rand () și își stochează valoarea într-o variabilă temporară. Când butonul zarurilor este apăsat se calculează valoarea stocată și se afișează pe șapte segmente folosind metoda adecvată (a se vedea partea de programare a articolului).
Aici, în acest circuit de zaruri, un afișaj comun cu șapte segmente de anod este utilizat pentru afișarea numerelor de zaruri, care este conectat direct la numerele arduino de pin digital 6, 5, 4, 3, 2, 1, 0. Și pinul anod comun de șapte segmente este conectat cu rezistor de +5 volți 220 Ohm. Sunt de asemenea conectate două butoane, și anume butonul zarurilor și butonul de resetare, care sunt conectate la pinul digital 14 (A0) și 15 (A1) în raport cu solul.
Explicarea codului
Partea de programare a acestui proiect joacă un rol foarte important în afișarea numărului de zaruri digitale aleatorii pe afișajul pe șapte segmente. Arduino nu conține nicio bibliotecă pentru afișarea în șapte segmente. așa că am creat cod întreg, fără a folosi nicio bibliotecă.
În primul rând, selectăm pinul digital pentru afișajul pe șapte segmente.
pin int = {6,5,4,3,2,1,0};
După el creăm o matrice de 6 cifre de zaruri și anume 1, 2, 3, 4, 5 și 6.
cifra char = {0x02, 0x79, 0x24, 0x30, 0x19, 0x12};
Acum am dat direcția de a utiliza pinul arduino ca ieșire.
void setup () {pentru (int i = 0; i <7; i ++) pinMode (pin, OUTPUT); pinMode (zaruri, INPUT); pinMode (resetare, INPUT); digitalWrite (zaruri, HIGH); digitalWrite (resetare, HIGH);
În mod implicit, trimitem un cod pentru afișarea zero pe afișajul cu șapte segmente.
int temp = 0x40; for (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (pin, temp1); temp = temp >> 1; }
Acum rulăm funcția rand () pentru a obține un număr aleatoriu.
int temp = rand ();
Și când apăsăm pe butonul zarurilor programăm mai întâi să mapăm acest număr aleatoriu și apoi să trimitem numărul pe afișajul cu șapte segmente folosind operatorul bit-bit.
if (digitalRead (zaruri) == 0) {int k = temp% 6; temp = cifră; aștepta(); for (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (pin, temp1); temp = temp >> 1; } întârziere (200); }
Și același lucru pentru butonul de resetare.
În acest program, trimitem un singur bit odată. Aici aplicăm o buclă for care rulează de 7 ori pentru a trimite date către fiecare segment unul câte unul.