I built dual dice program and display for Arduino. Works great but it is NOT random. I can't figure out why. Maybe I must re-do using the rnd function.
/*
Two Dice
Die layout:
1 4
2 7 5
3 6
After power up, dice count through all 36 values, one increment per time1 (1/2 sec).
Push button and dice increment and display as fast as op=possible.
Release button and current value is frozen for five seconds, then resume counting every .5 sec.
counting with dice:
1 - 7
2 - (1+6)
3 - (1+6)+7
4 - (1+6)+(3+4)
5 - (1+6)+(3+4)+7
6 - (1+6)+(3+4)+(2+5)
The circuit:
pins for Units die:
1 = 7 U7
2 = 1+6 U1and6
3 = 3+4 U3and4
4 = 2+5 U2and5
Pins for Tens die:
5 = 7 T7
6 = 1+6 T1and6
7 = 3+4 T3and4
8 = 2+5 T2and5
*/
const int U7pin = 2; // LEDs connected to digital pin 2-9
const int U16pin = 3;
const int U34pin = 4;
const int U25pin = 5;
const int T7pin = 6;
const int T16pin = 7;
const int T34pin = 8;
const int T25pin = 9;
int time1 = 500;
const int buttonPin = 10; // the number of the pushbutton pin
int buttonstate = HIGH; // button history
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the digital pin as an output:
pinMode(U7pin,OUTPUT);
pinMode(U16pin,OUTPUT);
pinMode(U34pin,OUTPUT);
pinMode(U25pin,OUTPUT);
pinMode(T7pin,OUTPUT);
pinMode(T16pin,OUTPUT);
pinMode(T34pin,OUTPUT);
pinMode(T25pin,OUTPUT);
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
digitalWrite(T7pin, HIGH); // TEN
digitalWrite(T16pin, LOW);
digitalWrite(T34pin, LOW);
digitalWrite(T25pin, LOW);
rollunits();
digitalWrite(T7pin, LOW); // TWENTY
digitalWrite(T16pin,HIGH);
digitalWrite(T34pin, LOW);
digitalWrite(T25pin, LOW);
rollunits();
digitalWrite(T7pin, HIGH); // THIRTY
digitalWrite(T16pin, HIGH);
digitalWrite(T34pin, LOW);
digitalWrite(T25pin, LOW);
rollunits();
digitalWrite(T7pin, LOW); // FORTY
digitalWrite(T16pin, HIGH);
digitalWrite(T34pin, LOW);
digitalWrite(T25pin, HIGH);
rollunits();
digitalWrite(T7pin, HIGH); // FIFTY
digitalWrite(T16pin, HIGH);
digitalWrite(T34pin, LOW);
digitalWrite(T25pin, HIGH);
rollunits();
digitalWrite(T7pin, LOW); // SIXTY
digitalWrite(T16pin, HIGH);
digitalWrite(T34pin, HIGH);
digitalWrite(T25pin, HIGH);
rollunits();
}
void rollunits(){
digitalWrite(U7pin, HIGH); // ONE
digitalWrite(U16pin, LOW);
digitalWrite(U34pin, LOW);
digitalWrite(U25pin, LOW);
checkbutton();
delay(time1);
digitalWrite(U7pin, LOW); // TWO
digitalWrite(U16pin,HIGH);
digitalWrite(U34pin, LOW);
digitalWrite(U25pin, LOW);
checkbutton();
delay(time1);
digitalWrite(U7pin, HIGH); // THREE
digitalWrite(U16pin, HIGH);
digitalWrite(U34pin, LOW);
digitalWrite(U25pin, LOW);
checkbutton();
delay(time1);
digitalWrite(U7pin, LOW); // FOUR
digitalWrite(U16pin, HIGH);
digitalWrite(U34pin, LOW);
digitalWrite(U25pin, HIGH);
checkbutton();
delay(time1);
digitalWrite(U7pin, HIGH); // FIVE
digitalWrite(U16pin, HIGH);
digitalWrite(U34pin, LOW);
digitalWrite(U25pin, HIGH);
checkbutton();
delay(time1);
digitalWrite(U7pin, LOW); // SIX
digitalWrite(U16pin, HIGH);
digitalWrite(U34pin, HIGH);
digitalWrite(U25pin, HIGH);
checkbutton();
delay(time1);
}
void checkbutton(){
if ((digitalRead(buttonPin)==HIGH) && buttonstate == LOW)
{
buttonstate = HIGH;
time1 = 500;
delay (5000);
}
if (digitalRead(buttonPin)==LOW)
{
buttonstate = LOW;
time1 = 0;
}
}