Complete Code

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Committer:
srikard
Date:
Tue Oct 21 16:17:51 2014 +0000
Revision:
0:02867cde0be1
12:17 PM 10/21/2014

Who changed what in which revision?

UserRevisionLine numberNew contents of line
srikard 0:02867cde0be1 1 #include "mbed.h"
srikard 0:02867cde0be1 2 #include "rtos.h"
srikard 0:02867cde0be1 3 #include "uLCD_4DGL.h"
srikard 0:02867cde0be1 4
srikard 0:02867cde0be1 5 uLCD_4DGL uLCD(p9, p10, p11); // create a global lcd object
srikard 0:02867cde0be1 6 //ADXL345 accelerometer(p5, p6, p7, p8);//create a global accelerometer object
srikard 0:02867cde0be1 7 Serial pc(USBTX, USBRX);// for debugging
srikard 0:02867cde0be1 8 Mutex lcd_mutex;// Create the mutex lock object
srikard 0:02867cde0be1 9 //PwmOut speaker(p21); //create a PwmOut object for the speaker
srikard 0:02867cde0be1 10 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
srikard 0:02867cde0be1 11 AnalogIn jsx(p19);
srikard 0:02867cde0be1 12 //AnalogIn jsy(p20);
srikard 0:02867cde0be1 13
srikard 0:02867cde0be1 14 int playerx, playery, ob1x, ob1y, ob2x, ob2y, ob3x, ob3y;
srikard 0:02867cde0be1 15 int x=0,y=0;
srikard 0:02867cde0be1 16 double obwait=0.2;
srikard 0:02867cde0be1 17
srikard 0:02867cde0be1 18 void thread1(void const *args){
srikard 0:02867cde0be1 19 //generates obstacles
srikard 0:02867cde0be1 20 while(true){
srikard 0:02867cde0be1 21
srikard 0:02867cde0be1 22 //lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 23 /*if(ob1y>127 && playerx==26){
srikard 0:02867cde0be1 24 ob1x=26;
srikard 0:02867cde0be1 25 //ob1y=-16;
srikard 0:02867cde0be1 26 ob1y=0;
srikard 0:02867cde0be1 27 }
srikard 0:02867cde0be1 28
srikard 0:02867cde0be1 29 if(ob2y>127 && playerx==58){
srikard 0:02867cde0be1 30 ob2x=58;
srikard 0:02867cde0be1 31 //ob2y=-16;
srikard 0:02867cde0be1 32 ob2y=0;
srikard 0:02867cde0be1 33 }
srikard 0:02867cde0be1 34
srikard 0:02867cde0be1 35 if(ob3y>127 && playerx==90){
srikard 0:02867cde0be1 36 ob3x=90;
srikard 0:02867cde0be1 37 //ob3y=-16;
srikard 0:02867cde0be1 38 ob3y=0;
srikard 0:02867cde0be1 39 }*/
srikard 0:02867cde0be1 40
srikard 0:02867cde0be1 41 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 42 uLCD.filled_rectangle(ob1x,ob1y,ob1x+15,ob1y+15,0x000000);//erase previous position
srikard 0:02867cde0be1 43 ob1y=ob1y+16;
srikard 0:02867cde0be1 44
srikard 0:02867cde0be1 45 uLCD.filled_rectangle(ob2x,ob2y,ob2x+15,ob2y+15,0x000000);//erase previous position
srikard 0:02867cde0be1 46 ob2y=ob2y+16;
srikard 0:02867cde0be1 47
srikard 0:02867cde0be1 48 uLCD.filled_rectangle(ob3x,ob3y,ob3x+15,ob3y+15,0x000000);//erase previous position
srikard 0:02867cde0be1 49 ob3y=ob3y+16;
srikard 0:02867cde0be1 50
srikard 0:02867cde0be1 51 if(ob1y>127 && playerx==26){
srikard 0:02867cde0be1 52 ob1x=26;
srikard 0:02867cde0be1 53 //ob1y=-16;
srikard 0:02867cde0be1 54 ob1y=16;
srikard 0:02867cde0be1 55 }
srikard 0:02867cde0be1 56
srikard 0:02867cde0be1 57 if(ob2y>127 && playerx==58){
srikard 0:02867cde0be1 58 ob2x=58;
srikard 0:02867cde0be1 59 //ob2y=-16;
srikard 0:02867cde0be1 60 ob2y=16;
srikard 0:02867cde0be1 61 }
srikard 0:02867cde0be1 62
srikard 0:02867cde0be1 63 if(ob3y>127 && playerx==90){
srikard 0:02867cde0be1 64 ob3x=90;
srikard 0:02867cde0be1 65 //ob3y=-16;
srikard 0:02867cde0be1 66 ob3y=16;
srikard 0:02867cde0be1 67 }
srikard 0:02867cde0be1 68
srikard 0:02867cde0be1 69
srikard 0:02867cde0be1 70 //for(x=0;x<10;x++){
srikard 0:02867cde0be1 71 uLCD.filled_rectangle(ob1x,ob1y,ob1x+15,ob1y+15,0xFF3300);//change position
srikard 0:02867cde0be1 72 uLCD.filled_rectangle(ob2x,ob2y,ob2x+15,ob2y+15,0xFF3300);//change position
srikard 0:02867cde0be1 73 uLCD.filled_rectangle(ob3x,ob3y,ob3x+15,ob3y+15,0xFF3300);//change position
srikard 0:02867cde0be1 74 //}
srikard 0:02867cde0be1 75
srikard 0:02867cde0be1 76 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 77
srikard 0:02867cde0be1 78 y++;
srikard 0:02867cde0be1 79 if(y%50==0)
srikard 0:02867cde0be1 80 obwait=(obwait/2);
srikard 0:02867cde0be1 81 if(obwait<0.0005)
srikard 0:02867cde0be1 82 obwait=0.0005;
srikard 0:02867cde0be1 83 pc.printf("y=%d\nobwait=%f\n", y, obwait);
srikard 0:02867cde0be1 84
srikard 0:02867cde0be1 85 lcd_mutex.lock();
srikard 0:02867cde0be1 86
srikard 0:02867cde0be1 87 uLCD.text_width(1); //4X size text
srikard 0:02867cde0be1 88 uLCD.text_height(1);
srikard 0:02867cde0be1 89 uLCD.locate(0,0);
srikard 0:02867cde0be1 90 uLCD.set_font(FONT_7X8);
srikard 0:02867cde0be1 91 uLCD.text_mode(OPAQUE);
srikard 0:02867cde0be1 92 uLCD.printf("Sc=%d",y);
srikard 0:02867cde0be1 93 uLCD.locate(10,0);
srikard 0:02867cde0be1 94 uLCD.printf("Sp=%d",((y/50)+1));
srikard 0:02867cde0be1 95
srikard 0:02867cde0be1 96 lcd_mutex.unlock();
srikard 0:02867cde0be1 97
srikard 0:02867cde0be1 98 wait(obwait);
srikard 0:02867cde0be1 99 }
srikard 0:02867cde0be1 100 }
srikard 0:02867cde0be1 101
srikard 0:02867cde0be1 102
srikard 0:02867cde0be1 103
srikard 0:02867cde0be1 104
srikard 0:02867cde0be1 105 int main(){
srikard 0:02867cde0be1 106 float jx;
srikard 0:02867cde0be1 107 uLCD.cls();// clear the LCD
srikard 0:02867cde0be1 108
srikard 0:02867cde0be1 109 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 110 uLCD.text_height(2);
srikard 0:02867cde0be1 111
srikard 0:02867cde0be1 112
srikard 0:02867cde0be1 113 uLCD.locate(0,2);
srikard 0:02867cde0be1 114
srikard 0:02867cde0be1 115 uLCD.printf("\nAuto Race\n");//display the Title
srikard 0:02867cde0be1 116 wait(5);
srikard 0:02867cde0be1 117
srikard 0:02867cde0be1 118 uLCD.cls();
srikard 0:02867cde0be1 119
srikard 0:02867cde0be1 120 ob1x=26;
srikard 0:02867cde0be1 121 ob1y=140;
srikard 0:02867cde0be1 122
srikard 0:02867cde0be1 123 ob2x=58;
srikard 0:02867cde0be1 124 ob2y=140;
srikard 0:02867cde0be1 125
srikard 0:02867cde0be1 126 ob3x=90;
srikard 0:02867cde0be1 127 ob3y=140;
srikard 0:02867cde0be1 128
srikard 0:02867cde0be1 129 playerx=58;
srikard 0:02867cde0be1 130 playery=112;
srikard 0:02867cde0be1 131
srikard 0:02867cde0be1 132 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF);
srikard 0:02867cde0be1 133
srikard 0:02867cde0be1 134 uLCD.filled_rectangle(110,16,116,127,0xFFFF00);
srikard 0:02867cde0be1 135 uLCD.filled_rectangle(15,16,21,127,0xFFFF00);
srikard 0:02867cde0be1 136
srikard 0:02867cde0be1 137 uLCD.filled_rectangle(116,16,127,127,0x009900);
srikard 0:02867cde0be1 138 uLCD.filled_rectangle(0,16,15,127,0x009900);
srikard 0:02867cde0be1 139
srikard 0:02867cde0be1 140 uLCD.line(0,15,127,15,0xFFFF00);
srikard 0:02867cde0be1 141
srikard 0:02867cde0be1 142 //uLCD.line(81.5,0,81.5,12,WHITE);
srikard 0:02867cde0be1 143 //uLCD.line(48.5,0,48.5,12,WHITE);
srikard 0:02867cde0be1 144
srikard 0:02867cde0be1 145 uLCD.line(81.5,16,81.5,28,WHITE);
srikard 0:02867cde0be1 146 uLCD.line(48.5,16,48.5,28,WHITE);
srikard 0:02867cde0be1 147
srikard 0:02867cde0be1 148 uLCD.line(81.5,32,81.5,44,WHITE);
srikard 0:02867cde0be1 149 uLCD.line(48.5,32,48.5,44,WHITE);
srikard 0:02867cde0be1 150
srikard 0:02867cde0be1 151 uLCD.line(81.5,48,81.5,60,WHITE);
srikard 0:02867cde0be1 152 uLCD.line(48.5,48,48.5,60,WHITE);
srikard 0:02867cde0be1 153
srikard 0:02867cde0be1 154 uLCD.line(81.5,64,81.5,76,WHITE);
srikard 0:02867cde0be1 155 uLCD.line(48.5,64,48.5,76,WHITE);
srikard 0:02867cde0be1 156
srikard 0:02867cde0be1 157 uLCD.line(81.5,80,81.5,92,WHITE);
srikard 0:02867cde0be1 158 uLCD.line(48.5,80,48.5,92,WHITE);
srikard 0:02867cde0be1 159
srikard 0:02867cde0be1 160 uLCD.line(81.5,96,81.5,108,WHITE);
srikard 0:02867cde0be1 161 uLCD.line(48.5,96,48.5,108,WHITE);
srikard 0:02867cde0be1 162
srikard 0:02867cde0be1 163 uLCD.line(81.5,112,81.5,124,WHITE);
srikard 0:02867cde0be1 164 uLCD.line(48.5,112,48.5,124,WHITE);
srikard 0:02867cde0be1 165
srikard 0:02867cde0be1 166 Thread t1(thread1);
srikard 0:02867cde0be1 167
srikard 0:02867cde0be1 168 while(true){
srikard 0:02867cde0be1 169 jx=jsx;
srikard 0:02867cde0be1 170 pc.printf("%f\n",jx);
srikard 0:02867cde0be1 171 if(playerx == 58){
srikard 0:02867cde0be1 172 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 173 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000);
srikard 0:02867cde0be1 174 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 175 if(jsx>.9){
srikard 0:02867cde0be1 176 playerx+=32;
srikard 0:02867cde0be1 177 }
srikard 0:02867cde0be1 178 else if(jsx<.1){
srikard 0:02867cde0be1 179 playerx-=32;
srikard 0:02867cde0be1 180 }
srikard 0:02867cde0be1 181 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 182 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF);
srikard 0:02867cde0be1 183 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 184 //wait(0.5);
srikard 0:02867cde0be1 185 }
srikard 0:02867cde0be1 186
srikard 0:02867cde0be1 187 /* if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 188 //if((playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 189
srikard 0:02867cde0be1 190 //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){
srikard 0:02867cde0be1 191 thread2.signal_set(0x1);
srikard 0:02867cde0be1 192 lcd_mutex.lock();
srikard 0:02867cde0be1 193 uLCD.cls();
srikard 0:02867cde0be1 194
srikard 0:02867cde0be1 195 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 196 uLCD.text_height(2);
srikard 0:02867cde0be1 197 uLCD.color(RED);
srikard 0:02867cde0be1 198 uLCD.locate(2,2);
srikard 0:02867cde0be1 199 uLCD.printf("\n GAME \n OVER!\n");
srikard 0:02867cde0be1 200 wait(2);
srikard 0:02867cde0be1 201 break;
srikard 0:02867cde0be1 202
srikard 0:02867cde0be1 203 uLCD.cls();
srikard 0:02867cde0be1 204 wait(2);
srikard 0:02867cde0be1 205 lcd_mutex.unlock();
srikard 0:02867cde0be1 206
srikard 0:02867cde0be1 207 }
srikard 0:02867cde0be1 208 */
srikard 0:02867cde0be1 209 else if(playerx == 26){
srikard 0:02867cde0be1 210 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 211 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000);
srikard 0:02867cde0be1 212 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 213 if(jsx>.9){
srikard 0:02867cde0be1 214 playerx+=32;
srikard 0:02867cde0be1 215 }
srikard 0:02867cde0be1 216 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 217 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF);
srikard 0:02867cde0be1 218 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 219 //wait(0.5);
srikard 0:02867cde0be1 220 }
srikard 0:02867cde0be1 221
srikard 0:02867cde0be1 222
srikard 0:02867cde0be1 223
srikard 0:02867cde0be1 224
srikard 0:02867cde0be1 225 /* if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 226 //if((playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 227
srikard 0:02867cde0be1 228 //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){
srikard 0:02867cde0be1 229 lcd_mutex.lock();
srikard 0:02867cde0be1 230 uLCD.cls();
srikard 0:02867cde0be1 231
srikard 0:02867cde0be1 232 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 233 uLCD.text_height(2);
srikard 0:02867cde0be1 234 uLCD.color(RED);
srikard 0:02867cde0be1 235 uLCD.locate(2,2);
srikard 0:02867cde0be1 236 uLCD.printf("\n GAME \n OVER!\n");
srikard 0:02867cde0be1 237 wait(2);
srikard 0:02867cde0be1 238 break;
srikard 0:02867cde0be1 239
srikard 0:02867cde0be1 240 uLCD.cls();
srikard 0:02867cde0be1 241 wait(2);
srikard 0:02867cde0be1 242 lcd_mutex.unlock();
srikard 0:02867cde0be1 243
srikard 0:02867cde0be1 244 }
srikard 0:02867cde0be1 245 */
srikard 0:02867cde0be1 246 else if(playerx==90) {
srikard 0:02867cde0be1 247 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 248 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000);
srikard 0:02867cde0be1 249 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 250 if(jsx<.1){
srikard 0:02867cde0be1 251 playerx-=32;
srikard 0:02867cde0be1 252 }
srikard 0:02867cde0be1 253 lcd_mutex.lock();//acquire lock
srikard 0:02867cde0be1 254 uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF);
srikard 0:02867cde0be1 255 lcd_mutex.unlock();//release lock
srikard 0:02867cde0be1 256 //wait(0.5);
srikard 0:02867cde0be1 257 }
srikard 0:02867cde0be1 258 //lcd_mutex.lock();
srikard 0:02867cde0be1 259 if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 260 lcd_mutex.lock();
srikard 0:02867cde0be1 261 uLCD.cls();
srikard 0:02867cde0be1 262
srikard 0:02867cde0be1 263 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 264 uLCD.text_height(2);
srikard 0:02867cde0be1 265 uLCD.color(RED);
srikard 0:02867cde0be1 266 uLCD.locate(2,2);
srikard 0:02867cde0be1 267 uLCD.printf("\n GAME \n OVER!\n");
srikard 0:02867cde0be1 268 wait(2);
srikard 0:02867cde0be1 269 uLCD.cls();
srikard 0:02867cde0be1 270 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 271 uLCD.text_height(2);
srikard 0:02867cde0be1 272 uLCD.locate(2,2);
srikard 0:02867cde0be1 273 uLCD.printf("\nScore=%d\n",y);
srikard 0:02867cde0be1 274
srikard 0:02867cde0be1 275 break;
srikard 0:02867cde0be1 276
srikard 0:02867cde0be1 277 uLCD.cls();
srikard 0:02867cde0be1 278 wait(2);
srikard 0:02867cde0be1 279 lcd_mutex.unlock();
srikard 0:02867cde0be1 280
srikard 0:02867cde0be1 281 }
srikard 0:02867cde0be1 282 /*if((playerx==ob2x && playery==ob2y)){
srikard 0:02867cde0be1 283 //if((playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 284
srikard 0:02867cde0be1 285 //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){
srikard 0:02867cde0be1 286 lcd_mutex.lock();
srikard 0:02867cde0be1 287 uLCD.cls();
srikard 0:02867cde0be1 288
srikard 0:02867cde0be1 289 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 290 uLCD.text_height(2);
srikard 0:02867cde0be1 291 uLCD.color(RED);
srikard 0:02867cde0be1 292 uLCD.locate(2,2);
srikard 0:02867cde0be1 293 uLCD.printf("\n GAME \n OVER!\n");
srikard 0:02867cde0be1 294 wait(2);
srikard 0:02867cde0be1 295 break;
srikard 0:02867cde0be1 296
srikard 0:02867cde0be1 297 uLCD.cls();
srikard 0:02867cde0be1 298 wait(2);
srikard 0:02867cde0be1 299 lcd_mutex.unlock();
srikard 0:02867cde0be1 300
srikard 0:02867cde0be1 301 }
srikard 0:02867cde0be1 302 if((playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 303 //if((playerx==ob3x && playery==ob3y)){
srikard 0:02867cde0be1 304
srikard 0:02867cde0be1 305 //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){
srikard 0:02867cde0be1 306 lcd_mutex.lock();
srikard 0:02867cde0be1 307 uLCD.cls();
srikard 0:02867cde0be1 308
srikard 0:02867cde0be1 309 uLCD.text_width(2); //2X size text
srikard 0:02867cde0be1 310 uLCD.text_height(2);
srikard 0:02867cde0be1 311 uLCD.color(RED);
srikard 0:02867cde0be1 312 uLCD.locate(2,2);
srikard 0:02867cde0be1 313 uLCD.printf("\n GAME \n OVER!\n");
srikard 0:02867cde0be1 314 wait(2);
srikard 0:02867cde0be1 315 break;
srikard 0:02867cde0be1 316
srikard 0:02867cde0be1 317 uLCD.cls();
srikard 0:02867cde0be1 318 wait(2);
srikard 0:02867cde0be1 319 lcd_mutex.unlock();
srikard 0:02867cde0be1 320
srikard 0:02867cde0be1 321 }*/
srikard 0:02867cde0be1 322 }
srikard 0:02867cde0be1 323 }