Accelerometer game
Dependencies: 4DGL-uLCD-SE ADXL345 mbed-rtos mbed
Revision 0:c69d1ec4d395, committed 2014-03-20
- Comitter:
- yhazrat3
- Date:
- Thu Mar 20 03:22:57 2014 +0000
- Child:
- 1:54ed477da4d3
- Commit message:
- done
Changed in this revision
--- /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