Für einen Spieleabend wurde ein digitaler Spielwürfel benötigt, nicht zu verwechseln mit einem LED Cube. Mit einem Arduino ist das natürlich kein Problem. Nach dem hochfahren des Arduino, ist der Würfel bereit für das Spiel. Drückt man nun auf den Knopf, leuchten die LEDs der Reihe nach auf und zeigen dann eine Zahl an. Die 7 LEDs sind so angeordnet, wie bei einem richtigen Würfel und stellen die Zahl wie auf einem analogen Würfel dar.
Der Code und die Verdrahtung ist recht einfach. An den Arduino werden Würfelförmig 7 LEDs über 220 Ohm Widerstände angeschlossen. Der Taster wird mit einem Pull Down Widerstand an Pin fünf angeschlossen, der beim Drücken ein HIGH Signal bekommt.
Verdrahtung Roulett Spiel auf Breadboard:
Skript Roulett mit Arduino IDE:
Der Code ist genauso simpel. Über eine zufällige generiert Zahl werden die zur Anzeige auf dem Würfel benötigten LEDs HIGH geschaltet. Vor dem HIGH schalten der Pins wird noch ein kurzes Lauflicht ausgegeben und dann alle LED Pins des Würfel LOW geschaltet. Über die Delay Zeit im Skript lässt sich die Lauflicht Geschwindschritt vor dem Anzeigen der Zahl verändern. Delay 50 ist schnell, Delay 300 ist langsam.
Würfel Code für Arduino mit Ardublock
int ergebniss = 0 ;
void setup()
{
Serial.begin(9600);
pinMode( 5 , INPUT);
randomSeed(analogRead(A0) + analogRead(A1) + analogRead(A2));
Serial.begin(9600);
pinMode( 6 , OUTPUT);
pinMode( 7 , OUTPUT);
pinMode( 8 , OUTPUT);
pinMode( 9 , OUTPUT);
pinMode( 10 , OUTPUT);
pinMode( 11 , OUTPUT);
pinMode( 12 , OUTPUT);
ergebniss = 10 ;
}
void loop()
{
delay( 5 );
if (digitalRead(5))
{
delay( 100 );
ergebniss = 0 ;
delay( 100 );
ergebniss = random( 6 ) ;
Serial.print(ergebniss);
Serial.println();
digitalWrite( 6 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 12 , LOW );
delay( 200 );
if (( ( ergebniss ) == ( 0 ) ))
{
digitalWrite( 6 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 1 ) ))
{
digitalWrite( 9 , HIGH );
digitalWrite( 12 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 2 ) ))
{
digitalWrite( 6 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 12 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 3 ) ))
{
digitalWrite( 7 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 12 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 4 ) ))
{
digitalWrite( 6 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 12 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 5 ) ))
{
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 11 , HIGH );
digitalWrite( 12 , HIGH );
delay( 200 );
}
}
}
Würfel Code für Attiny 44 mit Ardublock
Bei diesem Code wurde einfach das Serial.print ausgelassen und die Pins für den Atttiny 44 angepasst.
int ergebniss = 10 ;
void setup()
{
pinMode( 0 , INPUT);
randomSeed(analogRead(A0) + analogRead(A1) + analogRead(A2));
pinMode( 1 , OUTPUT);
pinMode( 2 , OUTPUT);
pinMode( 3 , OUTPUT);
pinMode( 4 , OUTPUT);
pinMode( 5 , OUTPUT);
pinMode( 6 , OUTPUT);
pinMode( 7 , OUTPUT);
pinMode( 8 , OUTPUT);
ergebniss = 10 ;
}
void loop()
{
delay( 5 );
if (digitalRead(0))
{
delay( 100 );
ergebniss = random( 6 ) ;
digitalWrite( 1 , LOW );
digitalWrite( 2 , LOW );
digitalWrite( 3 , LOW );
digitalWrite( 4 , LOW );
digitalWrite( 5 , LOW );
digitalWrite( 6 , LOW );
digitalWrite( 7 , LOW );
delay( 200 );
if (( ( ergebniss ) == ( 0 ) ))
{
digitalWrite( 4 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 1 ) ))
{
digitalWrite( 1 , HIGH );
digitalWrite( 8 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 2 ) ))
{
digitalWrite( 1 , HIGH );
digitalWrite( 4 , HIGH );
digitalWrite( 8 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 3 ) ))
{
digitalWrite( 1 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 6 , HIGH );
digitalWrite( 8 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 4 ) ))
{
digitalWrite( 1 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , HIGH );
digitalWrite( 6 , HIGH );
digitalWrite( 8 , HIGH );
delay( 200 );
}
if (( ( ergebniss ) == ( 5 ) ))
{
digitalWrite( 1 , HIGH );
digitalWrite( 2 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 6 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
delay( 200 );
}
}
}