Introduction: Whack-a-moLED!!

This is a LED version of the classic Whack-a-Mole Game.

Basically a random LED out of 4 LEDs light up instead of a mole looking out of a hole and the player turns off the LED using a joystick instead of whacking the mole!

Supplies

Arduino Uno/Nano or any variant board

4 LEDs and corresponding current limiting resistors.

Joystick module with X,Y outputs

Active Buzzer (optional)

Jumper wires.. enough to debug!

Step 1: Hook Up the Circuit

Hook up the Arduino Uno board to joystick module, connecting 2 analog Input pins to the X Y outputs of the joystick.

4 LEDs to be connected using resistors to 4 Digital or Analog output pins pins.

Active Buzzer to be connected to a digital output pin

Step 2: Code for Setup of Pins

int xVal = 0, yVal = 0, butVal = 0, xPin = A0, yPin = A1, joyPin = 13, butPin = 7, speakerPin = 9;

int leftLED = A2, rightLED = A3, topLED = A4, bottomLED = A5;

int selectedLED = 0; // Can be one of A2,A3,A4 or A5

void setup() {

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

pinMode(leftLED, OUTPUT);

pinMode(rightLED, OUTPUT);

pinMode(topLED, OUTPUT);
pinMode(bottomLED, OUTPUT);

pinMode(joyPin, OUTPUT);

pinMode(buzzerPin, OUTPUT);

}

Step 3: Code for Joystick Sensing

void joystickSenseRoutine()

{

xVal = analogRead(xPin); yVal = analogRead(yPin); butVal = digitalRead(butPin);

joyPin = mapXYtoPin(xVal, yVal, butVal);

analogWrite(selectedLED, 1024);

if (selectedLED != leftLED) { analogWrite(leftLED, 0); }
if (selectedLED != rightLED) { analogWrite(rightLED, 0); }

if (selectedLED != topLED) { analogWrite(topLED, 0); }

if (selectedLED != bottomLED) { analogWrite(bottomLED, 0); }

if (joyPin == selectedLED) // Mole Whacked

{

analogWrite(selectedLED, 0);

//

// Add code to play music/tone for whacking moLED!!

//

}

}

int mapXYtoPin(int xVal, int yVal, int butVal) {
if ((xVal < 100) and (yVal < 600) and (yVal > 400)) { return bottomLED; }

else if ((xVal > 900) and (yVal < 600) and (yVal > 400)) { return topLED; }

else if ((xVal < 600) and (xVal > 400) and (yVal < 100)) { return leftLED; }

else if ((xVal < 600) and (xVal > 400) and (yVal > 900)) { return rightLED; }

else { return -1; }

}

Step 4: Main Loop Routine Code

void loop() {

for (int i = 0; i < length; i++)

{

if (random(0, 100) > 90) { selectedLED = anaPinMap(random(2, 6));}

// Add code for game music here

// *** *** ***

//

}

int anaPinMap(int randNum) {

if (randNum == 2) { return A2; }

else if (randNum == 3) { return A3; }

else if (randNum == 4) { return A4; }

else if (randNum == 5) { return A5; }

}

Step 5: Ready to Try Out!

Step 6: Arduino Nano Implementation for Prototype

Same implementation made with Arduino nano in breadboard, custom made board with LEDs, resistors and buzzer, and X-Y joystick switch.

Step 7: Final Packaged Whack-a-MoLED Prototype to Present Your Loved One!

Supplies for prototype:

Simple cardboard box(Minimum 4cmX6cmX3cm), extra cardboard pieces fro support.

Decorative paper for covering chassis(optional)

Multipurpose adhesive/glue

Mini breadboard(optional)

Arduino nano

Small Universal PCB

9V battery for powering Arduino nano(connect to Vin pin).

SPDT switch

Rest of the supplies(LEDs, resistors, joystick,buzzer, wires) as described in the step 1 above.