Grając z dziećmi w gry planszowe ciągle denerwowało nas spadanie rzuconej kostki ze stołu lub innych powierzchni na, których graliśmy. Dlatego postanowiłem zrobić elektroniczną kostkę do gry z pseudolosowymi liczbami.
Do jej wykonania wykorzystałem:
- Arduino ProMini
- Czujnik dotyku TTP223B sensor pojemnościowy Touch
- Czujnik wstrząsowy, wibracji, uderzenia SW-420
- Akumulator LI-ION18650 4,2 V
- Obudowa Kradex – Z73
- Matryca LED 8×8 + sterownik MAX7219, czerwona
- Ładowarka TP4056 LI-ION 5V 1A z zabezpieczeniem Micro USB
- Stabilizator LF33
- Włącznik okrągy niebieski
Sketch:
/*
* Kostka do gry: Cry
* Wersja 1.0
* Po naciśnięciu sensora lub wstrząsie następuje losowanie liczby od 1 do 6
* Następne losowanie może się odbyć po 1 sekundzie
* Po 3 sekundach LEDy są przygaszane
* Po 10 sekundach LEDy są wyłanczane
*
* KOMPONENTY:
* Arduino Pro Mini
* Matryca LED 8x8
* Akumulator 18650 Li-Ion
* Moduł ładowania TP4056
* Czujnik wstrząsowy
* Przełącznik sensorowy
* Obudowa Kradez - Z73
*
* PARAMETRY POŁĄCZENIA:
* Piny Wyświetlacza:
* CLK: 5
* CS: 6
* DIN: 7
* Piny Sensora dotykowego: 3
* Pin modułu wstrząsowego 2
*/
#include <LedControl.h>
LedControl led = LedControl(7, 5, 6, 1); // (DIN, CLK, CS, iloscModułów)
int wynik=0;
unsigned long zapamietanyCzas;
unsigned long aktualnyCzas;
//___________________________________________ SETUP
void setup() {
// Serial.begin(9600);
led.shutdown(0,false); // wybudzenie wyświetlacza
led.setIntensity(0,9); // ustawienie intensywności świecenia
led.clearDisplay(0); // czyszczenie wyświetlacza
randomSeed(analogRead(0));
//randomSeed(millis());
}
//___________________________________________ LOOP
void loop() {
aktualnyCzas=millis();
if((aktualnyCzas-zapamietanyCzas)>3000){ led.setIntensity(0,1);} // przygaś LED po 3 sekundach
if((aktualnyCzas-zapamietanyCzas)>10000){ led.clearDisplay(0);} // wyłącz LED po 10 sekundach
int sensor = digitalRead(3);
int wstrzas = digitalRead(2);
/* Serial.print("Wstrzas: ");
Serial.println(wstrzas);
Serial.print("Sensor: ");
Serial.println(sensor);
delay(150);
*/
if (sensor == 1 or wstrzas == 1) {
zapamietanyCzas=rzutKostka();
}
}
//___________________________________________ RZUT KOSTKA
unsigned long rzutKostka(){
led.setIntensity(0,9); // ustawienie intensywności świecenia
zapamietanyCzas = millis();
wynik = random(1, 7);
// Serial.println(wynik);
led.clearDisplay(0);
if(wynik == 3){
led.setLed(0,0,0,true);
led.setLed(0,1,0,true);
led.setLed(0,0,1,true);
led.setLed(0,1,1,true);
led.setLed(0,6,6,true);
led.setLed(0,7,6,true);
led.setLed(0,6,7,true);
led.setLed(0,7,7,true);
}
if(wynik == 4 or wynik == 6 or wynik == 5){
led.setLed(0,0,0,true);
led.setLed(0,1,0,true);
led.setLed(0,0,1,true);
led.setLed(0,1,1,true);
led.setLed(0,6,0,true);
led.setLed(0,7,0,true);
led.setLed(0,6,1,true);
led.setLed(0,7,1,true);
led.setLed(0,0,6,true);
led.setLed(0,1,6,true);
led.setLed(0,0,7,true);
led.setLed(0,1,7,true);
led.setLed(0,6,6,true);
led.setLed(0,7,6,true);
led.setLed(0,6,7,true);
led.setLed(0,7,7,true);
}
if(wynik == 2 or wynik == 6){
led.setLed(0,0,3,true);
led.setLed(0,1,3,true);
led.setLed(0,0,4,true);
led.setLed(0,1,4,true);
led.setLed(0,6,3,true);
led.setLed(0,7,3,true);
led.setLed(0,6,4,true);
led.setLed(0,7,4,true);
}
if(wynik == 1 or wynik == 3 or wynik == 5){
led.setLed(0,3,3,true);
led.setLed(0,4,3,true);
led.setLed(0,3,4,true);
led.setLed(0,4,4,true);
}
delay(1500);
return millis();
}
//___________________________________________ SYMULACJA TOCZENIA KOSTKI
void symulacjaToczenia(){
}