Spezialfunktionen für den Arduino Würfel für Kids

6 verschiedene Würfel

Der Arduino Würfel aus einem vorherigen Beitrag lässt sich besonders gut mit und für Kinder bauen. Am meisten Begeisterung gibt es aber, wenn der Würfel Spezialfunktion bekommt…

Bei einer Runde Mensch-Ärgere-Dich-Nicht ist nichts schöner als zu gewinnen oder zumindest viele 6-er zu haben und alle Spielfiguren aufs Spielfeld zu bringen.

Mit einem normalen Würfel braucht man dafür ziemlich viel Glück. Mit diesen Versionen des Arduino-Programms können Kinder dem Glück nachhelfen.

wuerfel2_6
Der fertige Arduino Würfel

Variante 1

Hat man den Würfel für sich alleine, könnte man einfach die Wahrscheinlichkeit erhöhen und eine 6 häufiger vorkommen lassen.

Das geht im Quellcode mit einer zusätzlichen Bedingung.

zufall=zufall%6; //Ergebnis ist Zahl von 0..5 
if zufall<>5 {zufall=millis()%6;} //nochmal würfeln, wenn keine 6!

Das fällt aber schnell auf und es könnte ja sein, dass alle Spieler mit dem elektronischen Würfel würfeln. Wer will schon, dass auch andere öfters eine 6 haben.

Variante 2

Besser ist eine unauffälligere Variante: Während des Würfeln (=Taste gedrückt) wird die Haltezeit der Taste gemessen. Liegt diese zwischen 3 und 4 Sekunden wird der Wurf eine 6.

void loop() {   //Variablen vereinbaren   
int i,j,zufall;
unsigned long spezial;

  ZeigeZahl(7); //Alle LED's einschalten   
  delay(1000);  // Pause in Millisekunden     
...
...
  // Ab hier wird gewürfelt, in Endlosschleife bis zum Ausschalten
  do { 
    //Startzustand setzen
    zufall=0; 
    i=0;
    spezial=millis();
    do {
      zufall=zufall+1; //Zufallszahl hochzählen
      i=i+1;
      if (i>=lauflichtmax) {i=0;} //Wenn i lauflichtmax ist, dann wieder auf 0 setzen, so ist i immer 0..6
      delay(lauflichtpause[i]); //Pause in Millisekunden
 
      ZeigeZahl(0);
      digitalWrite(PinErsteLED+lauflicht[i]-1,HIGH);
 
     } while (digitalRead(PinTaster)==LOW); //Wiederholen bis Taster losgelassen wird
 
     zufall=zufall%6; //Ergebnis ist Zahl von 0..5
     spezial=millis()-spezial;
     if ((spezial>3000) and (spezial<4000)) {
       zufall=5; //6 gewürfelt!
     }
    ZeigeZahl(zufall+1); //Würfelergebnis anzeigen 
 
    while (digitalRead(PinTaster)==HIGH); //Warten bis nächste Taste gedrückt wird
  } while (1==1); //Undendlich Wiederholen
}

Variante 3

Das ist schon ganz gut, könnte aber mit der Zeit auffallen. Unauffälliger klappt es, wenn nur die Wahrscheinlichkeit für eine 6 im Intervall von 2..3 Sekunden erhöht wird.

Das sieht so aus:

void loop() {   //Variablen vereinbaren   
int i,j,zufall;
unsigned long spezial;

  ZeigeZahl(7); //Alle LED's einschalten   
  delay(1000);  // Pause in Millisekunden     
...
...
  // Ab hier wird gewürfelt, in Endlosschleife bis zum Ausschalten
  do { 
    //Startzustand setzen
    zufall=0; 
    i=0;
    spezial=millis();
    do {
      zufall=zufall+1; //Zufallszahl hochzählen
      i=i+1;
      if (i>=lauflichtmax) {i=0;} //Wenn i lauflichtmax ist, dann wieder auf 0 setzen, so ist i immer 0..6
      delay(lauflichtpause[i]); //Pause in Millisekunden
 
      ZeigeZahl(0);
      digitalWrite(PinErsteLED+lauflicht[i]-1,HIGH);
 
     } while (digitalRead(PinTaster)==LOW); //Wiederholen bis Taster losgelassen wird
 
     zufall=zufall%6; //Ergebnis ist Zahl von 0..5
     spezial=millis()-spezial;
     if ((spezial>2000) and (spezial<3000)) {
       if (zufall!=5) {zufall=millis()%6;} //nochmal würfeln, wenn keine 6!
     }
    ZeigeZahl(zufall+1); //Würfelergebnis anzeigen 
 
    while (digitalRead(PinTaster)==HIGH); //Warten bis nächste Taste gedrückt wird
  } while (1==1); //Undendlich Wiederholen
}

Gepimpte Würfelanimation

Cooler machen ist auch ziemlich in. Dafür eignet sich am besten die Würfelanimation. Mit dieser Änderung können ganz einfach noch mehr Effekte eingestellt werden.

// Festlegen der Würfelbilder: Reihenfolge 
 // 1   2 
 // 3 7 4
 // 5   6
 int wuerfelBild[8][7]=
  {{0,0,0,0,0,0,0}, //0 = alle LED's aus
   {0,0,0,0,0,0,1}, //1
   {0,1,0,0,1,0,0}, //2
   {1,0,0,0,0,1,1}, //3
   {1,1,0,0,1,1,0}, //4
   {1,1,0,0,1,1,1}, //5
   {1,1,1,1,1,1,0}, //6
   {1,1,1,1,1,1,1}}; //7 = alle LED's an
  
 int lauflichtmax=6; 
 int lauflicht[6]=     {  1,  7,  6,  2,  7,  5}; // Reihenfolge der LED's
 int lauflichtpause[6]={ 60,100,180,180,100, 60}; // Dauer in ms

Oder ein Knight-Rider-Effekt:

 int lauflichtmax=6; 
 int lauflicht[6]=     {  3,  7,  4,  4,  7,  3}; // Reihenfolge der LED's
 int lauflichtpause[6]={100,180,100,100,180,100}; // Dauer in ms

Viel Spaß beim unaufälligen Schummeln und Pimpen.

Download

Alle Varianten finden Sie im Ordner Würfel in meiner Dropbox.

Kommentar verfassen