Accelerometer game

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

Revision:
0:c69d1ec4d395
Child:
1:54ed477da4d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 20 03:22:57 2014 +0000
@@ -0,0 +1,263 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "uLCD_4DGL.h"
+#include "ADXL345.h"
+
+
+PwmOut speaker(p21);
+uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object
+ADXL345 accelerometer(p5, p6, p7, p8);
+Serial pc(USBTX, USBRX);
+Mutex lcd_mutex;
+
+int red_car_x, red_car_y,blue_car_x,blue_car_y,frog_x,frog_y,i,j;
+int x=0,y=0;
+void thread1(void const *args)
+{
+    
+    while(true) {       
+    
+        
+        if(red_car_x>127){
+        red_car_x=-16;
+        red_car_y=32;
+        
+        }
+        lcd_mutex.lock();
+        uLCD.filled_rectangle(red_car_x,red_car_y,red_car_x+15,red_car_y+15,0x000000);
+        red_car_x=red_car_x+16;
+        
+        for(i=0;i<10;i++){
+        uLCD.filled_rectangle(red_car_x,red_car_y,red_car_x+15,red_car_y+15,0xFF3300);//change position
+              
+        }
+        
+             
+        lcd_mutex.unlock();
+        Thread::wait(500);
+    
+    }
+}
+
+
+void thread2(void const *args)
+{
+    
+    while(true) {       
+    
+        
+        if(blue_car_x>127){
+        blue_car_x=-16;
+        blue_car_y=64;
+        
+        }
+        lcd_mutex.lock();
+        uLCD.filled_rectangle(blue_car_x,blue_car_y,blue_car_x+15,blue_car_y+15,0x000000);
+        blue_car_x=blue_car_x+16;
+        for(i=0;i<5;i++){
+        uLCD.filled_rectangle(blue_car_x,blue_car_y,blue_car_x+15,blue_car_y+15,BLUE);//change position
+              
+        }
+        
+               
+        lcd_mutex.unlock();
+        Thread::wait(200);
+    
+    }
+}
+
+void thread3(void const *args)
+{
+    
+     
+    while(true) {       
+    
+        
+        speaker.period(1.0/150.0); // 500hz period
+        speaker =0.25; //25% duty cycle - mid range volume
+        wait(.02);
+        speaker=0.0;
+        
+     
+        Thread::wait(500);
+    
+    }
+}
+
+
+           
+  
+
+ 
+int main()
+{
+   
+    
+   A:uLCD.cls();
+    
+    uLCD.text_width(2); //2X size text
+    uLCD.text_height(2);
+    
+    
+    uLCD.locate(2,2);
+    
+    uLCD.printf("\n Frogger\n");
+    wait(0.1);
+    
+    
+   for (i=0; i<500; i=i+100) {
+        speaker.period(1.0/float(i));
+        speaker=0.25;
+        wait(.1);
+    }
+    wait(2);
+    uLCD.cls();
+    uLCD.text_width(2); //2X size text
+    uLCD.text_height(2);
+    uLCD.locate(0,0);
+    uLCD.color( 0xFF00FF); 
+    uLCD.printf("\n Help the  frog \n  cross \nthe road!\n");
+    wait (2);
+    
+    uLCD.cls();
+    
+    
+    red_car_x=0;
+    red_car_y=32;
+    blue_car_x=0;
+    blue_car_y=64;
+    frog_x=32;
+    frog_y=96;
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x99FF00);
+    uLCD.filled_rectangle(red_car_x,red_car_y,red_car_x+15,red_car_y+15,0xff3300);
+    uLCD.filled_rectangle(blue_car_x,blue_car_y,blue_car_x+15,blue_car_y+15,BLUE);
+    
+    int readings[3] = {0, 0, 0};
+    
+   // pc.printf("Starting ADXL345 test...\n");
+   // pc.printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
+ 
+    //Go into standby mode to configure the device.
+    accelerometer.setPowerControl(0x00);
+ 
+    //Full resolution, +/-16g, 4mg/LSB.
+    accelerometer.setDataFormatControl(0x0B);
+    
+    //3.2kHz data rate.
+    accelerometer.setDataRate(ADXL345_3200HZ);
+ 
+    //Measurement mode.
+    accelerometer.setPowerControl(0x08);
+    
+   Thread t1(thread1); //start thread1
+   Thread t2(thread2);
+   Thread t3(thread3);
+   
+   
+ 
+    while (1) {
+    
+        
+       for(i=0;i<5;i++)
+       { 
+        accelerometer.getOutput(readings);
+        pc.printf("%i, %i, %i            ", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
+        x=x+int16_t(readings[0]);
+        y=y+int16_t(readings[1]);
+        }
+        x=int(x/5);
+        y=int(y/5);
+        
+        //13-bit, sign extended values.
+       pc.printf("%d, %d   ", int(x),int(y) );
+        //right
+        
+        
+        if(y>0){
+    lcd_mutex.lock();
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x000000);
+    frog_x=frog_x+16;
+   
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x99FF00);
+    lcd_mutex.unlock();
+    }
+    //up
+    if(x<70){
+        lcd_mutex.lock();
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x000000);
+    frog_y=frog_y-16;
+    
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x99FF00);
+    lcd_mutex.unlock();
+    }
+    //left
+    if(y<-70){
+        lcd_mutex.lock();
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x000000);
+    frog_x=frog_x-16;
+
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x99FF00);
+    lcd_mutex.unlock();
+    }
+    //down
+    if(x>180){
+        lcd_mutex.lock();
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x000000);
+    frog_y=frog_y+16;
+   
+    uLCD.filled_rectangle(frog_x,frog_y,frog_x+15,frog_y+15,0x99FF00);
+    lcd_mutex.unlock();
+    }
+    
+    if ((frog_x==red_car_x & frog_y==red_car_y)|(frog_x==blue_car_x & frog_y==blue_car_y))
+    {
+     
+    lcd_mutex.lock();    
+    uLCD.cls();
+    
+    
+    uLCD.text_width(2); //4X size text
+    uLCD.text_height(2);
+    uLCD.color(RED);
+    uLCD.locate(2,2);
+    uLCD.printf("\n   GAME \n   OVER!\n");
+    speaker.period(1.0/500.0); // 500hz period
+    speaker =0.5; //50% duty cycle - max volume
+    wait(3);
+    speaker=0.0; // turn off audio
+    
+    wait(2);
+    lcd_mutex.unlock();
+    goto A;
+    }
+    
+    if (frog_y<32)
+    {
+     
+    lcd_mutex.lock();    
+    uLCD.cls();
+    
+    
+   uLCD.text_width(2); //4X size text
+    uLCD.text_height(2);
+    uLCD.color(0xffff00);
+    uLCD.locate(2,2);
+    uLCD.printf("\n   You \n   WIN!\n");
+    
+    for (i=0; i<500; i=i+100) {
+        speaker.period(1.0/float(i));
+        speaker=0.25;
+        wait(.1);
+    }
+    wait(5);
+    lcd_mutex.unlock();
+    goto A;
+    }
+    
+    
+    Thread::wait(50);   // wait 0.5s
+    }  
+    
+    
+    
+}
\ No newline at end of file