A simple Whack-a-Mole game using LEDs and pushbuttons

Dependencies:   DebounceIn TextLCD mbed-rtos mbed

Committer:
tdouglas6
Date:
Tue Oct 21 00:10:27 2014 +0000
Revision:
0:a4e667868bd4
A simple Whack-a-Mole game using LEDs and pushbuttons

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tdouglas6 0:a4e667868bd4 1 #include "mbed.h"
tdouglas6 0:a4e667868bd4 2 #include "rtos.h"
tdouglas6 0:a4e667868bd4 3 #include "DebounceIn.h"
tdouglas6 0:a4e667868bd4 4 #include "TextLCD.h"
tdouglas6 0:a4e667868bd4 5
tdouglas6 0:a4e667868bd4 6 TextLCD lcd(p15, p16, p17, p18, p19, p20);
tdouglas6 0:a4e667868bd4 7
tdouglas6 0:a4e667868bd4 8 DigitalOut led1(p11);
tdouglas6 0:a4e667868bd4 9 DigitalOut led2(p8);
tdouglas6 0:a4e667868bd4 10 DigitalOut led3(p6);
tdouglas6 0:a4e667868bd4 11 DigitalOut led4(p10);
tdouglas6 0:a4e667868bd4 12 DigitalOut led5(p7);
tdouglas6 0:a4e667868bd4 13 DigitalOut led6(p5);
tdouglas6 0:a4e667868bd4 14
tdouglas6 0:a4e667868bd4 15 DebounceIn pb1(p23);
tdouglas6 0:a4e667868bd4 16 DebounceIn pb2(p22);
tdouglas6 0:a4e667868bd4 17 DebounceIn pb3(p21);
tdouglas6 0:a4e667868bd4 18 DebounceIn pb4(p26);
tdouglas6 0:a4e667868bd4 19 DebounceIn pb5(p24);
tdouglas6 0:a4e667868bd4 20 DebounceIn pb6(p25);
tdouglas6 0:a4e667868bd4 21 int n, c;
tdouglas6 0:a4e667868bd4 22 int comm;
tdouglas6 0:a4e667868bd4 23 int counter=0;
tdouglas6 0:a4e667868bd4 24 int timer=30;
tdouglas6 0:a4e667868bd4 25
tdouglas6 0:a4e667868bd4 26 //*clock counts down from 30 seconds*//
tdouglas6 0:a4e667868bd4 27 void Countdown(void const *args) {
tdouglas6 0:a4e667868bd4 28 lcd.cls();
tdouglas6 0:a4e667868bd4 29 while(true) {
tdouglas6 0:a4e667868bd4 30 lcd.cls();
tdouglas6 0:a4e667868bd4 31 lcd.printf("Time Left: %d s", timer);
tdouglas6 0:a4e667868bd4 32 lcd.printf("\nHit Count: %d", counter);
tdouglas6 0:a4e667868bd4 33 timer--;
tdouglas6 0:a4e667868bd4 34 Thread::wait(1000);
tdouglas6 0:a4e667868bd4 35 }
tdouglas6 0:a4e667868bd4 36 }
tdouglas6 0:a4e667868bd4 37
tdouglas6 0:a4e667868bd4 38 //*randomly selects which LEDs will turn on *//
tdouglas6 0:a4e667868bd4 39 void Random(void const *args) {
tdouglas6 0:a4e667868bd4 40 n=0;
tdouglas6 0:a4e667868bd4 41
tdouglas6 0:a4e667868bd4 42 while(true) {
tdouglas6 0:a4e667868bd4 43 comm=rand()%15; //determines which LEDs will turn on
tdouglas6 0:a4e667868bd4 44 c=rand()%400; //speed
tdouglas6 0:a4e667868bd4 45
tdouglas6 0:a4e667868bd4 46 if(comm==0) {
tdouglas6 0:a4e667868bd4 47 led1=1;
tdouglas6 0:a4e667868bd4 48 led2=0;
tdouglas6 0:a4e667868bd4 49 led3=0;
tdouglas6 0:a4e667868bd4 50 led4=0;
tdouglas6 0:a4e667868bd4 51 led5=0;
tdouglas6 0:a4e667868bd4 52 led6=0;
tdouglas6 0:a4e667868bd4 53 wait(0.2);
tdouglas6 0:a4e667868bd4 54 } else if (comm==1) {
tdouglas6 0:a4e667868bd4 55 led1=0;
tdouglas6 0:a4e667868bd4 56 led2=1;
tdouglas6 0:a4e667868bd4 57 led3=0;
tdouglas6 0:a4e667868bd4 58 led4=0;
tdouglas6 0:a4e667868bd4 59 led5=0;
tdouglas6 0:a4e667868bd4 60 led6=0;
tdouglas6 0:a4e667868bd4 61 wait(0.2);
tdouglas6 0:a4e667868bd4 62 } else if (comm==2) {
tdouglas6 0:a4e667868bd4 63 led1=0;
tdouglas6 0:a4e667868bd4 64 led2=0;
tdouglas6 0:a4e667868bd4 65 led3=1;
tdouglas6 0:a4e667868bd4 66 led4=0;
tdouglas6 0:a4e667868bd4 67 led5=0;
tdouglas6 0:a4e667868bd4 68 led6=0;
tdouglas6 0:a4e667868bd4 69 wait(0.2);
tdouglas6 0:a4e667868bd4 70 } else if (comm==3) {
tdouglas6 0:a4e667868bd4 71 led1=0;
tdouglas6 0:a4e667868bd4 72 led2=0;
tdouglas6 0:a4e667868bd4 73 led3=0;
tdouglas6 0:a4e667868bd4 74 led4=1;
tdouglas6 0:a4e667868bd4 75 led5=0;
tdouglas6 0:a4e667868bd4 76 led6=0;
tdouglas6 0:a4e667868bd4 77 wait(0.2);
tdouglas6 0:a4e667868bd4 78 } else if (comm==4) {
tdouglas6 0:a4e667868bd4 79 led1=0;
tdouglas6 0:a4e667868bd4 80 led2=0;
tdouglas6 0:a4e667868bd4 81 led3=0;
tdouglas6 0:a4e667868bd4 82 led4=0;
tdouglas6 0:a4e667868bd4 83 led5=1;
tdouglas6 0:a4e667868bd4 84 led6=0;
tdouglas6 0:a4e667868bd4 85 wait(0.2);
tdouglas6 0:a4e667868bd4 86 } else if (comm==5) {
tdouglas6 0:a4e667868bd4 87 led1=0;
tdouglas6 0:a4e667868bd4 88 led2=0;
tdouglas6 0:a4e667868bd4 89 led3=0;
tdouglas6 0:a4e667868bd4 90 led4=0;
tdouglas6 0:a4e667868bd4 91 led5=0;
tdouglas6 0:a4e667868bd4 92 led6=1;
tdouglas6 0:a4e667868bd4 93 wait(0.2);
tdouglas6 0:a4e667868bd4 94 } else if (comm==6) {
tdouglas6 0:a4e667868bd4 95 led1=0;
tdouglas6 0:a4e667868bd4 96 led2=1;
tdouglas6 0:a4e667868bd4 97 led3=0;
tdouglas6 0:a4e667868bd4 98 led4=0;
tdouglas6 0:a4e667868bd4 99 led5=0;
tdouglas6 0:a4e667868bd4 100 led6=1;
tdouglas6 0:a4e667868bd4 101 wait(0.2);
tdouglas6 0:a4e667868bd4 102 } else if (comm==7) {
tdouglas6 0:a4e667868bd4 103 led1=1;
tdouglas6 0:a4e667868bd4 104 led2=0;
tdouglas6 0:a4e667868bd4 105 led3=1;
tdouglas6 0:a4e667868bd4 106 led4=0;
tdouglas6 0:a4e667868bd4 107 led5=0;
tdouglas6 0:a4e667868bd4 108 led6=0;
tdouglas6 0:a4e667868bd4 109 wait(0.2);
tdouglas6 0:a4e667868bd4 110 } else if (comm==8) {
tdouglas6 0:a4e667868bd4 111 led1=0;
tdouglas6 0:a4e667868bd4 112 led2=1;
tdouglas6 0:a4e667868bd4 113 led3=0;
tdouglas6 0:a4e667868bd4 114 led4=1;
tdouglas6 0:a4e667868bd4 115 led5=0;
tdouglas6 0:a4e667868bd4 116 led6=1;
tdouglas6 0:a4e667868bd4 117 wait(0.2);
tdouglas6 0:a4e667868bd4 118 } else if (comm==9) {
tdouglas6 0:a4e667868bd4 119 led1=0;
tdouglas6 0:a4e667868bd4 120 led2=0;
tdouglas6 0:a4e667868bd4 121 led3=1;
tdouglas6 0:a4e667868bd4 122 led4=1;
tdouglas6 0:a4e667868bd4 123 led5=0;
tdouglas6 0:a4e667868bd4 124 led6=1;
tdouglas6 0:a4e667868bd4 125 wait(0.2);
tdouglas6 0:a4e667868bd4 126 } else if (comm==10) {
tdouglas6 0:a4e667868bd4 127 led1=1;
tdouglas6 0:a4e667868bd4 128 led2=0;
tdouglas6 0:a4e667868bd4 129 led3=0;
tdouglas6 0:a4e667868bd4 130 led4=0;
tdouglas6 0:a4e667868bd4 131 led5=0;
tdouglas6 0:a4e667868bd4 132 led6=1;
tdouglas6 0:a4e667868bd4 133 wait(0.2);
tdouglas6 0:a4e667868bd4 134 } else if (comm==11) {
tdouglas6 0:a4e667868bd4 135 led1=0;
tdouglas6 0:a4e667868bd4 136 led2=1;
tdouglas6 0:a4e667868bd4 137 led3=1;
tdouglas6 0:a4e667868bd4 138 led4=0;
tdouglas6 0:a4e667868bd4 139 led5=1;
tdouglas6 0:a4e667868bd4 140 led6=1;
tdouglas6 0:a4e667868bd4 141 wait(0.2);
tdouglas6 0:a4e667868bd4 142 } else if (comm==12) {
tdouglas6 0:a4e667868bd4 143 led1=1;
tdouglas6 0:a4e667868bd4 144 led2=1;
tdouglas6 0:a4e667868bd4 145 led3=1;
tdouglas6 0:a4e667868bd4 146 led4=1;
tdouglas6 0:a4e667868bd4 147 led5=1;
tdouglas6 0:a4e667868bd4 148 led6=1;
tdouglas6 0:a4e667868bd4 149 wait(0.2);
tdouglas6 0:a4e667868bd4 150 } else if (comm==13) {
tdouglas6 0:a4e667868bd4 151 led1=1;
tdouglas6 0:a4e667868bd4 152 led2=0;
tdouglas6 0:a4e667868bd4 153 led3=1;
tdouglas6 0:a4e667868bd4 154 led4=0;
tdouglas6 0:a4e667868bd4 155 led5=1;
tdouglas6 0:a4e667868bd4 156 led6=0;
tdouglas6 0:a4e667868bd4 157 wait(0.2);
tdouglas6 0:a4e667868bd4 158 } else if (comm==14) {
tdouglas6 0:a4e667868bd4 159 led1=0;
tdouglas6 0:a4e667868bd4 160 led2=1;
tdouglas6 0:a4e667868bd4 161 led3=0;
tdouglas6 0:a4e667868bd4 162 led4=0;
tdouglas6 0:a4e667868bd4 163 led5=1;
tdouglas6 0:a4e667868bd4 164 led6=0;
tdouglas6 0:a4e667868bd4 165 wait(0.2);
tdouglas6 0:a4e667868bd4 166 }
tdouglas6 0:a4e667868bd4 167 n++;
tdouglas6 0:a4e667868bd4 168 Thread::wait(c);
tdouglas6 0:a4e667868bd4 169 }
tdouglas6 0:a4e667868bd4 170 }
tdouglas6 0:a4e667868bd4 171
tdouglas6 0:a4e667868bd4 172 //*if the correct button is pressed while the corresponding LED is on, the hit count will increase*//
tdouglas6 0:a4e667868bd4 173 void ButtonPress(void const *args) {
tdouglas6 0:a4e667868bd4 174 while(true) {
tdouglas6 0:a4e667868bd4 175 if(led1==1&&pb1==0) {
tdouglas6 0:a4e667868bd4 176 counter++;
tdouglas6 0:a4e667868bd4 177 } else if(led2==1&&pb2==0) {
tdouglas6 0:a4e667868bd4 178 counter++;
tdouglas6 0:a4e667868bd4 179 } else if(led3==1&&pb3==0) {
tdouglas6 0:a4e667868bd4 180 counter++;
tdouglas6 0:a4e667868bd4 181 } else if(led4==1&&pb4==0) {
tdouglas6 0:a4e667868bd4 182 counter++;
tdouglas6 0:a4e667868bd4 183 } else if(led5==1&&pb5==0) {
tdouglas6 0:a4e667868bd4 184 counter++;
tdouglas6 0:a4e667868bd4 185 } else if(led6==1&&pb6==0) {
tdouglas6 0:a4e667868bd4 186 counter++;
tdouglas6 0:a4e667868bd4 187 }
tdouglas6 0:a4e667868bd4 188 Thread::wait(300);
tdouglas6 0:a4e667868bd4 189 }
tdouglas6 0:a4e667868bd4 190 }
tdouglas6 0:a4e667868bd4 191
tdouglas6 0:a4e667868bd4 192 int main() {
tdouglas6 0:a4e667868bd4 193 pb1.mode(PullUp);
tdouglas6 0:a4e667868bd4 194 pb2.mode(PullUp);
tdouglas6 0:a4e667868bd4 195 pb3.mode(PullUp);
tdouglas6 0:a4e667868bd4 196 pb4.mode(PullUp);
tdouglas6 0:a4e667868bd4 197 pb5.mode(PullUp);
tdouglas6 0:a4e667868bd4 198 pb6.mode(PullUp);
tdouglas6 0:a4e667868bd4 199 wait(.001);
tdouglas6 0:a4e667868bd4 200
tdouglas6 0:a4e667868bd4 201 Thread t3(Countdown);
tdouglas6 0:a4e667868bd4 202 Thread t1(Random);
tdouglas6 0:a4e667868bd4 203 Thread t2(ButtonPress);
tdouglas6 0:a4e667868bd4 204
tdouglas6 0:a4e667868bd4 205 while(1) {
tdouglas6 0:a4e667868bd4 206 if(timer==0) {
tdouglas6 0:a4e667868bd4 207 lcd.cls();
tdouglas6 0:a4e667868bd4 208 t1.terminate();
tdouglas6 0:a4e667868bd4 209 t2.terminate();
tdouglas6 0:a4e667868bd4 210 t3.terminate();
tdouglas6 0:a4e667868bd4 211 led1=0;
tdouglas6 0:a4e667868bd4 212 led2=0;
tdouglas6 0:a4e667868bd4 213 led3=0;
tdouglas6 0:a4e667868bd4 214 led4=0;
tdouglas6 0:a4e667868bd4 215 led5=0;
tdouglas6 0:a4e667868bd4 216 led6=0;
tdouglas6 0:a4e667868bd4 217 lcd.printf("Game Over!\nFinal score: %d", counter);
tdouglas6 0:a4e667868bd4 218 }
tdouglas6 0:a4e667868bd4 219 Thread::wait(1000);
tdouglas6 0:a4e667868bd4 220 }
tdouglas6 0:a4e667868bd4 221 }