Complete Code
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
main.cpp
- Committer:
- srikard
- Date:
- 2014-10-21
- Revision:
- 0:02867cde0be1
File content as of revision 0:02867cde0be1:
#include "mbed.h" #include "rtos.h" #include "uLCD_4DGL.h" uLCD_4DGL uLCD(p9, p10, p11); // create a global lcd object //ADXL345 accelerometer(p5, p6, p7, p8);//create a global accelerometer object Serial pc(USBTX, USBRX);// for debugging Mutex lcd_mutex;// Create the mutex lock object //PwmOut speaker(p21); //create a PwmOut object for the speaker //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card AnalogIn jsx(p19); //AnalogIn jsy(p20); int playerx, playery, ob1x, ob1y, ob2x, ob2y, ob3x, ob3y; int x=0,y=0; double obwait=0.2; void thread1(void const *args){ //generates obstacles while(true){ //lcd_mutex.lock();//acquire lock /*if(ob1y>127 && playerx==26){ ob1x=26; //ob1y=-16; ob1y=0; } if(ob2y>127 && playerx==58){ ob2x=58; //ob2y=-16; ob2y=0; } if(ob3y>127 && playerx==90){ ob3x=90; //ob3y=-16; ob3y=0; }*/ lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(ob1x,ob1y,ob1x+15,ob1y+15,0x000000);//erase previous position ob1y=ob1y+16; uLCD.filled_rectangle(ob2x,ob2y,ob2x+15,ob2y+15,0x000000);//erase previous position ob2y=ob2y+16; uLCD.filled_rectangle(ob3x,ob3y,ob3x+15,ob3y+15,0x000000);//erase previous position ob3y=ob3y+16; if(ob1y>127 && playerx==26){ ob1x=26; //ob1y=-16; ob1y=16; } if(ob2y>127 && playerx==58){ ob2x=58; //ob2y=-16; ob2y=16; } if(ob3y>127 && playerx==90){ ob3x=90; //ob3y=-16; ob3y=16; } //for(x=0;x<10;x++){ uLCD.filled_rectangle(ob1x,ob1y,ob1x+15,ob1y+15,0xFF3300);//change position uLCD.filled_rectangle(ob2x,ob2y,ob2x+15,ob2y+15,0xFF3300);//change position uLCD.filled_rectangle(ob3x,ob3y,ob3x+15,ob3y+15,0xFF3300);//change position //} lcd_mutex.unlock();//release lock y++; if(y%50==0) obwait=(obwait/2); if(obwait<0.0005) obwait=0.0005; pc.printf("y=%d\nobwait=%f\n", y, obwait); lcd_mutex.lock(); uLCD.text_width(1); //4X size text uLCD.text_height(1); uLCD.locate(0,0); uLCD.set_font(FONT_7X8); uLCD.text_mode(OPAQUE); uLCD.printf("Sc=%d",y); uLCD.locate(10,0); uLCD.printf("Sp=%d",((y/50)+1)); lcd_mutex.unlock(); wait(obwait); } } int main(){ float jx; uLCD.cls();// clear the LCD uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.locate(0,2); uLCD.printf("\nAuto Race\n");//display the Title wait(5); uLCD.cls(); ob1x=26; ob1y=140; ob2x=58; ob2y=140; ob3x=90; ob3y=140; playerx=58; playery=112; uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF); uLCD.filled_rectangle(110,16,116,127,0xFFFF00); uLCD.filled_rectangle(15,16,21,127,0xFFFF00); uLCD.filled_rectangle(116,16,127,127,0x009900); uLCD.filled_rectangle(0,16,15,127,0x009900); uLCD.line(0,15,127,15,0xFFFF00); //uLCD.line(81.5,0,81.5,12,WHITE); //uLCD.line(48.5,0,48.5,12,WHITE); uLCD.line(81.5,16,81.5,28,WHITE); uLCD.line(48.5,16,48.5,28,WHITE); uLCD.line(81.5,32,81.5,44,WHITE); uLCD.line(48.5,32,48.5,44,WHITE); uLCD.line(81.5,48,81.5,60,WHITE); uLCD.line(48.5,48,48.5,60,WHITE); uLCD.line(81.5,64,81.5,76,WHITE); uLCD.line(48.5,64,48.5,76,WHITE); uLCD.line(81.5,80,81.5,92,WHITE); uLCD.line(48.5,80,48.5,92,WHITE); uLCD.line(81.5,96,81.5,108,WHITE); uLCD.line(48.5,96,48.5,108,WHITE); uLCD.line(81.5,112,81.5,124,WHITE); uLCD.line(48.5,112,48.5,124,WHITE); Thread t1(thread1); while(true){ jx=jsx; pc.printf("%f\n",jx); if(playerx == 58){ lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000); lcd_mutex.unlock();//release lock if(jsx>.9){ playerx+=32; } else if(jsx<.1){ playerx-=32; } lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF); lcd_mutex.unlock();//release lock //wait(0.5); } /* if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){ //if((playerx==ob3x && playery==ob3y)){ //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){ thread2.signal_set(0x1); lcd_mutex.lock(); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.color(RED); uLCD.locate(2,2); uLCD.printf("\n GAME \n OVER!\n"); wait(2); break; uLCD.cls(); wait(2); lcd_mutex.unlock(); } */ else if(playerx == 26){ lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000); lcd_mutex.unlock();//release lock if(jsx>.9){ playerx+=32; } lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF); lcd_mutex.unlock();//release lock //wait(0.5); } /* if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){ //if((playerx==ob3x && playery==ob3y)){ //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){ lcd_mutex.lock(); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.color(RED); uLCD.locate(2,2); uLCD.printf("\n GAME \n OVER!\n"); wait(2); break; uLCD.cls(); wait(2); lcd_mutex.unlock(); } */ else if(playerx==90) { lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x000000); lcd_mutex.unlock();//release lock if(jsx<.1){ playerx-=32; } lcd_mutex.lock();//acquire lock uLCD.filled_rectangle(playerx,playery,playerx+15,playery+15,0x0000FF); lcd_mutex.unlock();//release lock //wait(0.5); } //lcd_mutex.lock(); if((playerx==ob1x && playery==ob1y) || (playerx==ob2x && playery==ob2y) || (playerx==ob3x && playery==ob3y)){ lcd_mutex.lock(); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.color(RED); uLCD.locate(2,2); uLCD.printf("\n GAME \n OVER!\n"); wait(2); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.locate(2,2); uLCD.printf("\nScore=%d\n",y); break; uLCD.cls(); wait(2); lcd_mutex.unlock(); } /*if((playerx==ob2x && playery==ob2y)){ //if((playerx==ob3x && playery==ob3y)){ //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){ lcd_mutex.lock(); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.color(RED); uLCD.locate(2,2); uLCD.printf("\n GAME \n OVER!\n"); wait(2); break; uLCD.cls(); wait(2); lcd_mutex.unlock(); } if((playerx==ob3x && playery==ob3y)){ //if((playerx==ob3x && playery==ob3y)){ //if((playerx==ob1x) || (playerx==ob2x) || (playerx==ob3x)){ lcd_mutex.lock(); uLCD.cls(); uLCD.text_width(2); //2X size text uLCD.text_height(2); uLCD.color(RED); uLCD.locate(2,2); uLCD.printf("\n GAME \n OVER!\n"); wait(2); break; uLCD.cls(); wait(2); lcd_mutex.unlock(); }*/ } }