hw3

Dependencies:   LSM303DLHC-a PinDetect USBDevice mbed

Files at this revision

API Documentation at this revision

Comitter:
jn80842
Date:
Mon Sep 29 08:51:48 2014 +0000
Child:
1:f1a403c1fa78
Commit message:
finished to the best of our ability

Changed in this revision

LSM303DLHC.lib Show annotated file Show diff for this revision Revisions of this file
PinDetect.lib Show annotated file Show diff for this revision Revisions of this file
USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
acchello.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LSM303DLHC.lib	Mon Sep 29 08:51:48 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/bclaus/code/LSM303DLHC/#762e7cfed86f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PinDetect.lib	Mon Sep 29 08:51:48 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/jn80842/code/PinDetect/#8d7f44cc5347
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice.lib	Mon Sep 29 08:51:48 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/USBDevice/#335f2506f422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/acchello.cpp	Mon Sep 29 08:51:48 2014 +0000
@@ -0,0 +1,213 @@
+#include "mbed.h"
+#include "vector.h"
+#include "LSM303DLHC.h"
+#include "USBKeyboard.h"
+ 
+Serial pc(USBTX, USBRX); // tx, rx
+USBKeyboard keyboard;
+ // top face
+LSM303DLHC lsm(PTE0,PTE1);
+AnalogIn pU1(A0); // up
+AnalogIn pD1(A1); //down
+AnalogIn pR1(A2); //right
+AnalogIn pL1(A3); //left
+
+// bottom face
+AnalogIn pU(PTE20);     //up
+AnalogIn pD(PTE21);     //down
+AnalogIn pR(PTE22);   //right
+AnalogIn pL(PTE23);   //left
+
+//switches
+DigitalIn s1(D6);
+DigitalIn s2(D7);
+
+// Integers
+int counter = 0;
+
+// Levels for photocells
+float covered = 0.5; // maximum value to be considered covered
+float opened = 0.8; // minimum value to be considered open (ambient)
+
+// boolean variables for different wait states
+bool waitingUP = false;
+bool waitingDOWN = false;
+bool waitingRIGHT = false;
+bool waitingLEFT = false;
+
+class Orientation {
+    vector a, m;
+    bool rightSideUp, movingDown, movingUp, movedDown, movedUp;
+    float top_threshold, bottom_threshold;
+    public: Orientation() {
+        top_threshold = -0.3;
+        bottom_threshold = 0.3;
+        rightSideUp = true;
+        movingDown = false;
+        movingUp = false;
+        movedDown = false;
+        movedUp = true;
+    }
+    bool isRightSideUp() {
+        
+        bool check = lsm.read(&a.x,&a.y,&a.z,&m.x,&m.y,&m.z);
+        //pc.printf("x %f y %f z %f",a.z,a.y,a.z);
+        pc.printf("{ \"x\": %f, \"y\": %f, \"z\": %f}\r\n",a.x,a.y,a.z);
+        if (check) {
+            if (a.x > top_threshold) {
+                movingDown = true;
+                movingUp = false;
+            } else if (a.x < bottom_threshold) {
+                movingUp = true;
+                movingDown = false;
+            }
+            if (movingDown && a.x > bottom_threshold) {
+                movingDown = false;
+                movedUp = false;
+                movedDown = true;
+            } else if (movingUp && a.x < top_threshold) {
+                movingUp = false;
+                movedDown = false;
+                movedUp = true;
+            }
+            if (!rightSideUp && movedUp) {
+                rightSideUp = true;
+            } else if (rightSideUp && movedDown) {
+                rightSideUp = false;
+            }
+        }
+        return rightSideUp;
+    }
+};
+
+bool isCovered(AnalogIn p) {
+    return p < covered;
+}
+
+bool isOpen(AnalogIn p) {
+    return p > opened;
+}
+
+bool photoCellUp(AnalogIn pUp,AnalogIn pDown,AnalogIn pRight,AnalogIn pLeft) {
+   // pc.printf("covered only up\r\n");
+    return isCovered(pUp) && isOpen(pDown) && isOpen(pRight) && isOpen(pLeft);
+}
+
+bool photoCellDown(AnalogIn pUp,AnalogIn pDown,AnalogIn pRight,AnalogIn pLeft) {
+    //pc.printf("covered only down\r\n");
+    return isOpen(pUp) && isCovered(pDown) && isOpen(pRight) && isOpen(pLeft);
+}
+
+bool photoCellLeft(AnalogIn pUp,AnalogIn pDown,AnalogIn pRight,AnalogIn pLeft) {
+    //pc.printf("covered only right\r\n");
+    return isOpen(pUp) && isOpen(pDown) && isOpen(pRight) && isCovered(pLeft);
+}
+
+bool photoCellRight(AnalogIn pUp,AnalogIn pDown,AnalogIn pRight,AnalogIn pLeft) {
+    //pc.printf("covered only left\r\n");
+    return isOpen(pUp) && isOpen(pDown) && isCovered(pRight) && isOpen(pLeft);
+}
+
+
+int main() {
+    pc.printf("hello\r\n");
+    Orientation up;
+    bool lastRightSideUp = true;
+
+    while (1) {
+            bool rightSideUp = up.isRightSideUp();
+            if (rightSideUp != lastRightSideUp) {
+               pc.printf("flipped\r\n");
+               //keyboard.printf("f\r");
+            }
+            if (rightSideUp) {
+                pc.printf("RIGHT SIDE UP\r\n");
+            } else {
+                pc.printf("UP SIDE DOWN\r\n");
+            }
+            lastRightSideUp = rightSideUp;
+                // LISTENING FOR UP & DOWN SWIPES
+    if ((rightSideUp && photoCellUp(pU1,pD1,pR1,pL1)) || (!rightSideUp && photoCellUp(pU,pD,pR,pL)))
+    {   
+        if (waitingUP)
+        {
+            pc.printf("Swiped UP \r\n");
+            //keyboard.printf("w\r");
+            counter = 0;
+            waitingUP = false;
+            wait(0.2);
+        }
+            else
+            {
+                waitingDOWN = true;
+               // pc.printf("Waiting to Swipe Down \r\n");
+               // keyboard.printf("Waiting to Swipe Down\r");
+            }
+        }
+
+        else if ((rightSideUp && photoCellDown(pU1,pD1,pR1,pL1)) || (!rightSideUp && photoCellDown(pU,pD,pR,pL)))
+        {
+            if (waitingDOWN)
+            {
+                pc.printf("Swiped DOWN \r\n");
+                //keyboard.printf("s\r");
+                counter = 0;
+                waitingDOWN = false;
+                wait(0.2);
+            }
+                else
+                {
+                    waitingUP = true;
+                    //pc.printf("Waiting to Swipe Up \r\n");
+                    //keyboard.printf("Waiting to Swipe Up\r");
+                }
+        }
+        else if ((rightSideUp && photoCellRight(pU1,pD1,pR1,pL1)) || (!rightSideUp && photoCellRight(pU,pD,pR,pL))) {
+            if (waitingRIGHT)
+            {
+            pc.printf("Swiped RIGHT \r\n");
+            //keyboard.printf("e\r");
+            counter = 0;
+            waitingRIGHT = false;
+            wait(0.2);
+            }
+            else
+            {
+                waitingLEFT = true;
+                //pc.printf("Waiting to Swipe LEFT \r\n");
+                //keyboard.printf("Waiting to Swipe Left\r");
+            }
+        } else if ((rightSideUp && photoCellLeft(pU1,pD1,pR1,pL1)) || (!rightSideUp && photoCellLeft(pU,pD,pR,pL))) {
+            if (waitingLEFT)
+            {
+                pc.printf("Swiped LEFT \r\n");
+                //keyboard.printf("w\r");
+                counter = 0;
+                waitingLEFT = false;
+                wait(0.2);
+            }
+            else
+            {
+                waitingRIGHT = true;
+                //pc.printf("Waiting to Swipe RIGHT \r\n");
+                //keyboard.printf("Waiting to Swipe Right\r");
+            }
+        } else if ((rightSideUp && s1 == 0) || (!rightSideUp && s2 == 0)) {
+            pc.printf("Pressed button!\r\n");
+            // keyboard.printf("m\r");
+        }
+
+    if (counter > 40)
+    {
+        waitingUP = false;
+        waitingDOWN = false;
+        waitingRIGHT = false;
+        waitingDOWN = false;
+        counter = 0;
+        //printf("Counter Reset \r\n");
+    }
+        wait(0.1); 
+    }
+    
+    
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Sep 29 08:51:48 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file