Led Dice / Number Game
User guesses a number using left hand button and rolls the dice using right hand button.
Number selection and simulated dice rolling accomplished with array of 6 LED's. User feedback via RGB LED.
If user guesses correctly RGB LED illuminates green otherwise it illuminates red:
Source code:
int leds[] = {13,12,11,10,9,8}; // dice leds array
int rollSw = 2; //roll dice switch
int selSw = 1; // select "number" switch
int val = 0; //value used for switch press detection
int val1 = 0;
long num = 0; //
int count = 0; // count for number selected by user
int red = 6; //red led
int green = 7; //green led
void setup(){
pinMode (rollSw, INPUT); //roll dice switch
pinMode (selSw, INPUT); // Select Number switch
pinMode(red,OUTPUT); //Red LED
pinMode(green,OUTPUT); //Green LED
for(int i = 0; i <=5 ; i++)//loop through array of number leds setting pins to output
{
pinMode(leds[i], OUTPUT);
}
}
void loop(){
val = digitalRead(rollSw); // Read Roll Switch
if (val == LOW){rollDie();}; // Roll dice if switch pressed
val1 = digitalRead(selSw); // Read Select Switch
if (val1 == LOW && count <= 5 ){ // If switch pressed and count not > 5 select leds
allOff(); // turn any exitsing leds off
digitalWrite(leds[count], HIGH); // turn next led in sequence on
count++; // count up in sequence
delay(200); // delay to prevent button bounce
}else if (count > 5){count = 0;digitalWrite(leds[5], LOW); } // if count > 5 turn off last led, reset count
}
void rollDie(){ // roll dice subroutine
allOff(); // turn off any leds
for (int i = 0; i <=24; i++ ){; //roll dice 24 times
num = random(0,6); // generate random number between 0 - 5;
digitalWrite(leds[num], HIGH); //set selected led on
delay(80); // wait
digitalWrite(leds[num], LOW); // turn selected led off
}
digitalWrite(leds[num], HIGH); // roll finnished - set final led on
if (num == (count-1)){digitalWrite(green,HIGH);} // if final led = user slected led turn on green led
else {digitalWrite(red,HIGH);} // else turn on red led
count = 0;//reset count
}
void allOff(){ // turn all leds off
digitalWrite(red, LOW); //turn red off
digitalWrite(green, LOW); //turn green off
for(int i = 0; i <=5 ; i++) // loop through dice led array - turn all off
{
digitalWrite(leds[i], LOW);
}
}

No comments:
Post a Comment