This is the code for LCD bouncing ball game.

Dependencies:   4DGL-uLCD-SE LSM9DS0 mbed

Files at this revision

API Documentation at this revision

Comitter:
fengspot
Date:
Mon Oct 19 18:52:57 2015 +0000
Commit message:
LCD

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
LSM9DS0.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.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r eda8882a56f9 4DGL-uLCD-SE.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Mon Oct 19 18:52:57 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/4180_1/code/4DGL-uLCD-SE/#e39a44de229a
diff -r 000000000000 -r eda8882a56f9 LSM9DS0.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LSM9DS0.lib	Mon Oct 19 18:52:57 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/randrews33/code/LSM9DS0/#e6a15dcba942
diff -r 000000000000 -r eda8882a56f9 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 19 18:52:57 2015 +0000
@@ -0,0 +1,203 @@
+// LSM9DS90/uLCD Demo
+// ECE 4180 Lab Code Template
+
+#include "mbed.h"
+#include "LSM9DS0.h"
+#include "uLCD_4DGL.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+  
+// uncomment this line to enable the uLCD for Part 4 of the lab
+#define PART_4
+
+// SDO_XM and SDO_G are pulled up, so our addresses are:
+#define LSM9DS0_XM_ADDR  0x1D // Would be 0x1E if SDO_XM is LOW
+#define LSM9DS0_G_ADDR   0x6B // Would be 0x6A if SDO_G is LOW
+
+// refresh time. set to 500 for part 2 and 50 for part 4
+#define REFRESH_TIME_MS 200
+
+// Verify that the pin assignments below match your breadboard
+LSM9DS0 imu(p9, p10, LSM9DS0_G_ADDR, LSM9DS0_XM_ADDR);
+Serial pc(USBTX, USBRX);
+
+#ifdef PART_4
+uLCD_4DGL lcd(p28, p27, p30);
+#endif
+
+//Init Serial port and LSM9DS0 chip
+void setup()
+{
+#ifdef PART_4
+    lcd.baudrate(3000000);
+    lcd.background_color(0);
+    lcd.cls();
+    
+    lcd.printf("Initializing...");
+#endif
+
+    // Use the begin() function to initialize the LSM9DS0 library.
+    // You can either call it with no parameters (the easy way):
+    uint16_t status = imu.begin();
+}
+
+class Brick { 
+
+public:
+    int x; 
+    int y;
+    int color;
+    int width;
+    int height;
+    bool exist;
+    
+    Brick(){
+        width = 10;
+        height = 5;
+        exist = true;
+    }
+    
+    void set(int x, int y){
+        this->x = x;
+        this->y = y;    
+    }
+};
+
+int main()
+{
+    setup();  //Setup sensor and Serial
+    lcd.cls();
+
+    int score = 0;
+    Brick* wall[32];
+    srand(time(0));
+    for(int i = 0; i < 8; i ++){
+        for( int j = 0; j < 4; j++){
+            Brick * brick = new Brick();
+            brick->set(5 + i * brick->width, 20 + j * brick->height);
+            int c = 0;
+            int num = rand() % 8 + 1;
+            switch (num) {
+                case 1:
+                    c = 0xff0000;
+                    break;
+                case 2:
+                    c = 0xffff00;
+                    break;
+                case 3:
+                    c = 0x00FF00;
+                    break;
+                case 4:
+                    c = 0x0000FF;
+                    break;
+                case 5:
+                    c = 0xFFC0CB;
+                    break;
+                case 6:
+                    c = 0xA52A2A;
+                    break;
+                case 7:
+                    c = 0xd3d3d3;
+                    break;
+                case 8:
+                    c = 0x800080;
+                    break; 
+                default:
+                    c = 0x445566;
+            }
+            brick->color = c;
+            wall[i*4 + j] = brick;
+        }
+    }
+    
+    float player_x = 60.0;
+    float player_y = 120.0;
+    float p_width = 30.0;
+    
+    float ball_x = 23.0;
+    float ball_y = 49.0;
+    float ball_vx = 15.0;
+    float ball_vy = 15.0;
+    float ball_r = 2.0;
+    float width = 110.0;
+    float height = 120.0;
+    bool end = false;
+    bool win = false;
+    
+    while (!end && !win)
+    {
+        lcd.cls();
+        lcd.printf("score is %d", score);
+        imu.readMag();
+        imu.readAccel();
+        
+        for(int i = 0; i < 32; i++ ){
+            if(wall[i]->exist){
+                lcd.filled_rectangle(wall[i]->x, wall[i]->y, wall[i]->x + wall[i]->width, wall[i]->y + wall[i]->height, wall[i]->color);        
+            }
+        }
+        
+        lcd.circle(ball_x, ball_y, ball_r, RED);
+        lcd.line(player_x, player_y, player_x + p_width, player_y, BLUE);
+        
+        ball_x += ball_vx * 0.7;
+        ball_y += ball_vy * 0.7;
+        player_x = player_x - imu.ax_raw * 0.003;
+        
+        if(player_x + p_width > width){
+            player_x = width - p_width;    
+        }
+        
+        if(player_x < 0){
+            player_x = 0;     
+        }
+        
+        if(ball_x + ball_r > width){
+            ball_x = width - ball_r;
+            ball_vx *= -1;
+        }
+        
+        if(ball_x - ball_r < 0){
+            ball_x = ball_r;
+            ball_vx *= -1;   
+        }
+        
+        if(ball_y + ball_r > height){
+            if(ball_x < player_x || ball_x > player_x + p_width){
+                end = true;
+            } else {
+                ball_y = height - ball_r;
+                ball_vy *= -1;
+            }
+        }
+        
+        if(ball_y - ball_r < 0){
+            ball_y = ball_r;
+            ball_vy *= -1;
+        }
+        
+         for(int i = 0; i < 32; i++ ){
+            if(wall[i]->exist){
+                if (!(ball_x > wall[i]->x + wall[i]->width || 
+                ball_x + ball_r < wall[i]->x ||
+                ball_y > wall[i]->y + wall[i]->height ||
+                ball_y + ball_r < wall[i]->y)){
+                        wall[i]->exist = false;
+                        score++;
+                }    
+            }
+        }
+        if(score == 32){
+            win = true;    
+        }
+        wait_ms(REFRESH_TIME_MS);
+    }
+    lcd.cls();
+    
+    if(win){
+        lcd.printf("You Win!!!");
+    } else {
+        lcd.printf("Game Over...");
+    }
+}
diff -r 000000000000 -r eda8882a56f9 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Oct 19 18:52:57 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da