Bez kategorii

Elektroniczna kostka do Gry

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(){
  
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *