Accelerometer game

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

Files at this revision

API Documentation at this revision

Comitter:
yhazrat3
Date:
Thu Mar 20 03:22:57 2014 +0000
Child:
1:54ed477da4d3
Commit message:
done

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
ADXL345.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Thu Mar 20 03:22:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#e39a44de229a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ADXL345.lib	Thu Mar 20 03:22:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/aberk/code/ADXL345/#bd8f0f20f433
--- /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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Thu Mar 20 03:22:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#771275db0efe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Mar 20 03:22:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8e73be2a2ac1
\ No newline at end of file