making your own digital dice with 7 segment display.

Hello,

I am a newbie with arduino but i already made alot of small projects with my arduino. I love It XD.
I like to play board games and you need a dice for it, so this evening i told to myself why not make a digital dice with a 7 segment display. I could only make one dice because i only have the arduino UNO and it doesn't have enough exits, but it works fine.
Its with a button, so every time you hit the button it gives a new number.
So proud as I am of my tiny project here is the code.
I know some it can be written shorter, but like the first lines to swipe the leds, I think its easier to have a overview of wich leds are LOW and wich are HIGH, like a little matrix.
Maybe a try for the other newbies and its great fun :P.

// Digital Dice 7 Segment Display

int buttonDice = 10;
int buttondiceValue = 0;
int leda = 2;
int ledb = 3;
int ledpt = 4;
int ledc = 5;
int ledd = 6;
int lede = 7;
int ledf = 8;
int ledg = 9;
int randNummer = 0;

void setup(){
pinMode(buttonDice, INPUT);
pinMode(leda, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(ledpt, OUTPUT);
pinMode(ledc, OUTPUT);
pinMode(ledd, OUTPUT);
pinMode(lede, OUTPUT);
pinMode(ledf, OUTPUT);
pinMode(ledg, OUTPUT);

}
void loop(){
buttondiceValue = digitalRead(buttonDice);
if(buttondiceValue == HIGH){

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledpt, LOW); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW);
digitalWrite(lede, LOW); digitalWrite(ledf, LOW); digitalWrite(ledg, LOW);

delay(500);

digitalWrite(leda, HIGH); digitalWrite(ledb, HIGH); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW); digitalWrite(lede, LOW);
digitalWrite(ledf, LOW); digitalWrite(ledg, LOW);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, HIGH); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW); digitalWrite(lede, LOW);
digitalWrite(ledf, LOW); digitalWrite(ledg, HIGH);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW); digitalWrite(lede, HIGH);
digitalWrite(ledf, LOW); digitalWrite(ledg, HIGH);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledc, LOW); digitalWrite(ledd, HIGH); digitalWrite(lede, HIGH);
digitalWrite(ledf, LOW); digitalWrite(ledg, LOW);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledc, HIGH); digitalWrite(ledd, HIGH); digitalWrite(lede, LOW);
digitalWrite(ledf, LOW); digitalWrite(ledg, LOW);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledc, HIGH); digitalWrite(ledd, LOW); digitalWrite(lede, LOW);
digitalWrite(ledf, LOW); digitalWrite(ledg, HIGH);

delay(150);

digitalWrite(leda, LOW); digitalWrite(ledb, LOW); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW); digitalWrite(lede, LOW);
digitalWrite(ledf, HIGH); digitalWrite(ledg, HIGH);

delay(150);

digitalWrite(leda, HIGH); digitalWrite(ledb, LOW); digitalWrite(ledc, LOW); digitalWrite(ledd, LOW); digitalWrite(lede, LOW);
digitalWrite(ledf, HIGH); digitalWrite(ledg, LOW);

delay(150);

digitalWrite(leda, HIGH); digitalWrite(ledf, LOW);

delay(150);

digitalWrite(leda, LOW);

delay(500);

randomSeed(millis());
randNummer = random(255);

//NUMBER = 1
if(randNummer < 42){
digitalWrite(ledb, HIGH); digitalWrite(ledc, HIGH);
}
//NUMBER = 2
if(randNummer >= 42 && randNummer <= 85){
digitalWrite(leda, HIGH); digitalWrite(ledb, HIGH); digitalWrite(ledg, HIGH); digitalWrite(lede, HIGH); digitalWrite(ledd, HIGH);
}
//NUMBER = 3
if(randNummer > 85 && randNummer <= 127){
digitalWrite(leda, HIGH); digitalWrite(ledb, HIGH); digitalWrite(ledg, HIGH); digitalWrite(ledc, HIGH); digitalWrite(ledd, HIGH);
}
//NUMBER = 4
if(randNummer > 127 && randNummer <=170){
digitalWrite(ledb, HIGH); digitalWrite(ledg, HIGH); digitalWrite(ledf, HIGH); digitalWrite(ledc, HIGH);
}
//NUMBER = 5
if(randNummer >170 && randNummer <= 212){
digitalWrite(leda,HIGH); digitalWrite(ledf, HIGH); digitalWrite(ledg, HIGH); digitalWrite(ledc,HIGH); digitalWrite(ledd, HIGH);
}
//NUMBER = 6
if(randNummer >212 && randNummer <= 255){
digitalWrite(leda, HIGH); digitalWrite(ledf, HIGH); digitalWrite(ledg, HIGH); digitalWrite(ledc, HIGH); digitalWrite(ledd, HIGH);
digitalWrite(lede, HIGH); digitalWrite(ledpt, HIGH);
}

}
}

Good on you! However, your die is not completely fair because you cannot divide 255 (the range of your random number) by 6. You could use "random(1, 7)" to return a pseudo-random number exactly between 1 and 6 inclusive. Alternatively, if you don't trust random() that to return a sufficiently fair distribution, then call micros(), divide the result by a prime number, and take modulo 6 of the result (OK, not completely fair because 2^32 is not divisible by 6, but close).

You could make a 2-digit die if you multiplex the displays, but then you will need to use a couple of transistors as digit drivers.

AHA ok thank you for the good tips. :wink: