Tuesday, 6 March 2012

LED Dice / number game

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