A simple Whack-a-Mole game using LEDs and pushbuttons
Dependencies: DebounceIn TextLCD mbed-rtos mbed
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 }
Generated on Thu Jul 14 2022 23:07:04 by 1.7.2