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

Dependencies:   DebounceIn TextLCD mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "DebounceIn.h"
00004 #include "TextLCD.h"
00005 
00006 TextLCD lcd(p15, p16, p17, p18, p19, p20);
00007 
00008 DigitalOut led1(p11);
00009 DigitalOut led2(p8);
00010 DigitalOut led3(p6);
00011 DigitalOut led4(p10);
00012 DigitalOut led5(p7);
00013 DigitalOut led6(p5);
00014 
00015 DebounceIn pb1(p23);
00016 DebounceIn pb2(p22);
00017 DebounceIn pb3(p21);
00018 DebounceIn pb4(p26);
00019 DebounceIn pb5(p24);
00020 DebounceIn pb6(p25);
00021 int n, c;
00022 int comm;
00023 int counter=0;
00024 int timer=30;
00025 
00026 //*clock counts down from 30 seconds*//
00027 void Countdown(void const *args) {
00028     lcd.cls();
00029     while(true) {
00030         lcd.cls();
00031         lcd.printf("Time Left: %d s", timer);
00032         lcd.printf("\nHit Count: %d", counter);
00033         timer--;
00034         Thread::wait(1000);
00035     }
00036 }
00037 
00038 //*randomly selects which LEDs will turn on *//
00039 void Random(void const *args) {
00040     n=0;
00041     
00042     while(true) {
00043         comm=rand()%15; //determines which LEDs will turn on
00044         c=rand()%400; //speed
00045         
00046         if(comm==0) {
00047             led1=1;
00048             led2=0;
00049             led3=0;
00050             led4=0;
00051             led5=0;
00052             led6=0;
00053             wait(0.2);
00054         } else if (comm==1) {
00055             led1=0;
00056             led2=1;
00057             led3=0;
00058             led4=0;
00059             led5=0;
00060             led6=0;
00061             wait(0.2);
00062         } else if (comm==2) {
00063             led1=0;
00064             led2=0;
00065             led3=1;
00066             led4=0;
00067             led5=0;
00068             led6=0;
00069             wait(0.2);
00070         } else if (comm==3) {
00071             led1=0;
00072             led2=0;
00073             led3=0;
00074             led4=1;
00075             led5=0;
00076             led6=0;
00077             wait(0.2);
00078         } else if (comm==4) {
00079             led1=0;
00080             led2=0;
00081             led3=0;
00082             led4=0;
00083             led5=1;
00084             led6=0;
00085             wait(0.2);
00086         } else if (comm==5) {
00087             led1=0;
00088             led2=0;
00089             led3=0;
00090             led4=0;
00091             led5=0;
00092             led6=1;
00093             wait(0.2);
00094         } else if (comm==6) {
00095             led1=0;
00096             led2=1;
00097             led3=0;
00098             led4=0;
00099             led5=0;
00100             led6=1;
00101             wait(0.2);
00102         } else if (comm==7) {
00103             led1=1;
00104             led2=0;
00105             led3=1;
00106             led4=0;
00107             led5=0;
00108             led6=0;
00109             wait(0.2);
00110         } else if (comm==8) {
00111             led1=0;
00112             led2=1;
00113             led3=0;
00114             led4=1;
00115             led5=0;
00116             led6=1;
00117             wait(0.2);
00118         } else if (comm==9) {
00119             led1=0;
00120             led2=0;
00121             led3=1;
00122             led4=1;
00123             led5=0;
00124             led6=1;
00125             wait(0.2);
00126         } else if (comm==10) {
00127             led1=1;
00128             led2=0;
00129             led3=0;
00130             led4=0;
00131             led5=0;
00132             led6=1;
00133             wait(0.2);
00134         } else if (comm==11) {
00135             led1=0;
00136             led2=1;
00137             led3=1;
00138             led4=0;
00139             led5=1;
00140             led6=1;
00141             wait(0.2);
00142         } else if (comm==12) {
00143             led1=1;
00144             led2=1;
00145             led3=1;
00146             led4=1;
00147             led5=1;
00148             led6=1;
00149             wait(0.2);
00150         } else if (comm==13) {
00151             led1=1;
00152             led2=0;
00153             led3=1;
00154             led4=0;
00155             led5=1;
00156             led6=0;
00157             wait(0.2);
00158         } else if (comm==14) {
00159             led1=0;
00160             led2=1;
00161             led3=0;
00162             led4=0;
00163             led5=1;
00164             led6=0;
00165             wait(0.2);
00166         }
00167         n++;
00168         Thread::wait(c);
00169     }
00170 }
00171 
00172 //*if the correct button is pressed while the corresponding LED is on, the hit count will increase*//
00173 void ButtonPress(void const *args) {   
00174     while(true) {
00175         if(led1==1&&pb1==0) {
00176             counter++;
00177         } else if(led2==1&&pb2==0) {
00178             counter++;
00179         } else if(led3==1&&pb3==0) {
00180             counter++;
00181         } else if(led4==1&&pb4==0) {
00182             counter++;
00183         } else if(led5==1&&pb5==0) {
00184             counter++;
00185         } else if(led6==1&&pb6==0) {
00186             counter++;
00187         }
00188         Thread::wait(300);
00189     }        
00190 }
00191 
00192 int main() {
00193     pb1.mode(PullUp);
00194     pb2.mode(PullUp);
00195     pb3.mode(PullUp);
00196     pb4.mode(PullUp);
00197     pb5.mode(PullUp);
00198     pb6.mode(PullUp);
00199     wait(.001);
00200     
00201     Thread t3(Countdown);
00202     Thread t1(Random);
00203     Thread t2(ButtonPress);
00204 
00205     while(1) {
00206         if(timer==0) {
00207             lcd.cls();
00208             t1.terminate();
00209             t2.terminate();
00210             t3.terminate();
00211             led1=0;
00212             led2=0;
00213             led3=0;
00214             led4=0;
00215             led5=0;
00216             led6=0;
00217             lcd.printf("Game Over!\nFinal score: %d", counter);
00218         }
00219         Thread::wait(1000);
00220     }
00221 }