A Simple Programming Workshop - University of Calgary

Dependencies:   mbed C12832 MMA7660

Revision:
3:7278142d6a1a
Parent:
2:c2ebc7fa80eb
--- a/main.cpp	Fri Oct 30 05:51:44 2015 +0000
+++ b/main.cpp	Wed May 15 00:15:50 2019 +0000
@@ -1,21 +1,38 @@
-#include "mbed.h"
+#include "mbed.h"                   // General board
 #include "MMA7660.h"                // accelerometer sensor
 #include "C12832.h"                 // LCD display
 
+//Some ideas: 
+// create a for loop to turn the LED on and off with a pattern. For example, every 1 second.
+// create a condition to turn the LED on when the joystick fire pin is pressed, and turn it off when any other pin is pressed
 
 int main() 
 {  
+    // Variables
+    int x, y, joy, press;
+    float accX, accY, accZ, acc3;
+    
     // create an accelerometer object
     MMA7660 accelerometer(p28, p27);
     
-    // LCD display
+    // LCD display object
     C12832 lcd(p5, p7, p6, p8, p11);
     
-    // joystick
-    BusIn joystick(p15,p12,p13,p16);
+    //An external LED powered by pin 30
+    DigitalOut redled(p30);
+    redled = 1; //1 means the LED is turned on
+    wait(2.0); //Make the program pause for 2 seconds
+    redled=0; // 0 means the LED is turned off
     
-    // LEDs
-    BusOut LEDs(LED1,LED2,LED3,LED4);
+    // joystick object
+    BusIn joystick(p15,p12,p13,p16);
+    DigitalIn fire(p14);
+    
+    // Left LED
+    DigitalOut leftled(LED1); 
+    
+    //A way to manipulate all the LEDs together
+    BusOut LEDs(LED1, LED2, LED3, LED4);
 
     // try to establish a connection with the accelerometer
     if( !accelerometer.testConnection() )
@@ -31,22 +48,66 @@
     
     // TODO: Move to the centre of the LCD and set the corresponding pixel to black
     //       We will call the current location the "active pixel"
-
+    x = lcd.width() / 2;
+    y = lcd.height() / 2;
+    lcd.pixel(x, y, 1);
+    lcd.copy_to_lcd();
    
     // create an infinite loop (i.e., the program runs as long as the processor is on)
     while(1)                                                       
     {
         // TODO: Get the state/value of the joystick
-
+        joy = joystick.read();
         
         // TODO: Determine the coordinates of the next active pixel based on joystick data
+        if (joy == 1 && y > 0) // UP
+        { 
+            --y;
+        } 
+        else if (joy == 2 && y < lcd.height() - 1) // DOWN
+        { 
+            ++y;
+        } else if (joy == 4 && x > 0) // LEFT
+        { 
+            --x;
+        } 
+        else if (joy == 8 && x < lcd.width() - 1) // RIGHT
+        {   
+            ++x;
+        } 
+        else if (joy == 5 && x > 0 && y > 0) // LEFT-UP
+        {    
+            --x;
+            --y;
+        } 
+        else if (joy == 6 && x > 0 && y < lcd.height() - 1) // LEFT-DOWN
+        {     
+            --x;
+            ++y;
+        } 
+        else if (joy == 9 && x < lcd.width() - 1 && y > 0) // RIGHT-UP
+        { 
+            ++x;
+            --y;
+        } 
+        else if (joy == 10 && x < lcd.width() - 1 && y < lcd.height() - 1) 
+        {  // RIGHT-DOWN
+            ++x;
+            ++y;
+        }
+        
+        // TODO: Set the next pixel to black
+        lcd.pixel(x, y, 1);
+        lcd.copy_to_lcd();
+
         
         
-        // TODO: Set the next pixel to black
+        // TODO: Get the accelerometer measurements
         
-
-        // TODO: Get the accelerometer measurements
-
+        accX = accelerometer.x();
+        accY = accelerometer.y();
+        accZ = accelerometer.z();
+        acc3 = sqrt(accX * accX + accY * accY + accZ * accZ); //this the amount of acceleration (how fast you displace or shake the board!)
 
         // TODO: Check if the screen should be cleared based on the accelerometer 
         //       measurements, and if so, clear the screen but don't move the active 
@@ -54,7 +115,20 @@
         //
         //       NOTE: Although you may have an idea of how to do this, it may take some
         //             "tuning" to get it to "feel right". 
-
+       
+        if (acc3 > 1.5 || fire ) {
+            
+            lcd.cls();
+            x = lcd.width() / 2;
+            y = lcd.height() / 2;
+            lcd.pixel(x, y, 1);
+            lcd.copy_to_lcd();
+            
+            leftled=1;
+            wait(0.2);
+            leftled=0;
+            
+        }
 
      
         // wait a short period