#define POT A0
#define HOD 7
#define ZMENA 8
byte typAnime = 3;
byte kostka[]={2,3,4,5,6,9,10,11,12,13}; // piny pro led kostku
byte dots[12][10]{
{0,1,0,1,0,0,1,0,1,0}, //1
{0,0,1,0,0,0,0,1,0,0}, //2
{1,1,0,0,0,0,0,0,1,1}, //3
{1,0,0,0,1,1,0,0,0,1}, //4
{1,1,0,1,1,1,1,0,1,1}, //5
{1,0,1,0,1,1,0,1,0,1}, //6
{0,1,0,1,0,0,1,0,1,0}, //1
{0,0,1,0,0,0,0,1,0,0}, //2
{1,1,0,0,0,0,0,0,1,1}, //3
{1,0,0,0,1,1,0,0,0,1}, //4
{1,1,0,1,1,1,1,0,1,1}, //5
{1,0,1,0,1,1,0,1,0,1} //6
};
/*
Zapojeni kostky
2 9
3 10
4 11
5 12
6 13
*/
int rychlostAnimace =0;
void animace1() {
int delkaHodu = rand() % 5 + 3;
for (int i = 0; i < delkaHodu; i++) {
digitalWrite(kostka[0], 1);
digitalWrite(kostka[5], 1);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[0], 0);
digitalWrite(kostka[5], 0);
delay(rychlostAnimace);
digitalWrite(kostka[2], 1);
digitalWrite(kostka[7], 1);
delay(rychlostAnimace);
digitalWrite(kostka[2], 0);
digitalWrite(kostka[7], 0);
delay(rychlostAnimace);
digitalWrite(kostka[4], 1);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[9], 1);
delay(rychlostAnimace);
digitalWrite(kostka[4], 0);
digitalWrite(kostka[9], 0);
delay(rychlostAnimace);
digitalWrite(kostka[1], 1);
digitalWrite(kostka[6], 1);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[1], 0);
digitalWrite(kostka[6], 0);
delay(rychlostAnimace);
digitalWrite(kostka[3], 1);
digitalWrite(kostka[8], 1);
delay(rychlostAnimace);
digitalWrite(kostka[3], 0);
digitalWrite(kostka[8], 0);
displayNumber(0);
zhasnuto();
}
}
void animace2() {
int delkaHodu = rand() % 5 + 3;
for (int i = 0; i < delkaHodu; i++) {
digitalWrite(kostka[5], 1);
delay(rychlostAnimace);
digitalWrite(kostka[5], 0);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[6], 1);
delay(rychlostAnimace);
digitalWrite(kostka[6], 0);
delay(rychlostAnimace);
digitalWrite(kostka[3], 1);
delay(rychlostAnimace);
digitalWrite(kostka[3], 0);
delay(rychlostAnimace);
digitalWrite(kostka[4], 1);
delay(rychlostAnimace);
digitalWrite(kostka[4], 0);
delay(rychlostAnimace);
digitalWrite(kostka[2], 1);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[2], 0);
delay(rychlostAnimace);
digitalWrite(kostka[0], 1);
delay(rychlostAnimace);
digitalWrite(kostka[0], 0);
delay(rychlostAnimace);
digitalWrite(kostka[1], 1);
delay(rychlostAnimace);
digitalWrite(kostka[1], 0);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[8], 1);
delay(rychlostAnimace);
digitalWrite(kostka[8], 0);
delay(rychlostAnimace);
digitalWrite(kostka[9], 1);
delay(rychlostAnimace);
digitalWrite(kostka[9], 0);
delay(rychlostAnimace);
digitalWrite(kostka[7], 1);
delay(rychlostAnimace);
digitalWrite(kostka[7], 0);
displayNumber(0);
zhasnuto();
}
}
void animace3() {
int delkaHodu = rand() % 5 + 3;
for (int i = 0; i < delkaHodu; i++) {
digitalWrite(kostka[0], 1);
delay(rychlostAnimace);
digitalWrite(kostka[0], 0);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[2], 1);
delay(rychlostAnimace);
digitalWrite(kostka[2], 0);
delay(rychlostAnimace);
digitalWrite(kostka[4], 1);
delay(rychlostAnimace);
digitalWrite(kostka[4], 0);
delay(rychlostAnimace);
digitalWrite(kostka[3], 1);
delay(rychlostAnimace);
digitalWrite(kostka[3], 0);
delay(rychlostAnimace);
digitalWrite(kostka[1], 1);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[1], 0);
delay(rychlostAnimace);
digitalWrite(kostka[6], 1);
delay(rychlostAnimace);
digitalWrite(kostka[6], 0);
delay(rychlostAnimace);
digitalWrite(kostka[8], 1);
delay(rychlostAnimace);
digitalWrite(kostka[8], 0);
delay(rychlostAnimace);
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
digitalWrite(kostka[9], 1);
delay(rychlostAnimace);
digitalWrite(kostka[9], 0);
delay(rychlostAnimace);
digitalWrite(kostka[7], 1);
delay(rychlostAnimace);
digitalWrite(kostka[7], 0);
delay(rychlostAnimace);
digitalWrite(kostka[5], 1);
delay(rychlostAnimace);
digitalWrite(kostka[5], 0);
displayNumber(0);
zhasnuto();
}
}
void zhasnuto(){
digitalWrite(kostka[1], 0);
digitalWrite(kostka[3], 0);
digitalWrite(kostka[6], 0);
digitalWrite(kostka[8], 0);
}
void displayNumber(byte number){
if(number<1 && number>6) return;
for(byte i=0; i<10; i++){ //pro 0. až 6. diodu
digitalWrite(kostka[i],dots[number][i]);
}
}
void animace(byte jaka) {
displayNumber(0);
delay(50);
switch (jaka) {
case 1:
zhasnuto();
animace1();
break;
case 2:
zhasnuto();
animace2();
break;
case 3:
zhasnuto();
animace3();
break;
}
}
void setup() {
pinMode(POT, INPUT);
pinMode(HOD, INPUT_PULLUP);
Serial.begin(9600);
pinMode(ZMENA, INPUT_PULLUP);
}
void loop() {
if (digitalRead(ZMENA) == 0) {
if (typAnime < 1) {
typAnime = 0;
}
typAnime++;
if (typAnime >3) { typAnime = 0; }
displayNumber(typAnime-1);
delay(300);
}
rychlostAnimace = map(analogRead(POT), 0, 1023, 30, 200);
if (digitalRead(HOD) == 0) {
byte hozenaHodnota = rand() % 6 + 1;
animace(typAnime);
displayNumber(hozenaHodnota);
}
}