Serpentine / Mbed 2 deprecated serpentine_foodcontroller_final

Dependencies:   MMA8451Q TSI mbed

Fork of foodcontroller_NoWiFi by Serpentine

Revision:
6:57b9a6427bc2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foodController.cpp	Thu Jun 09 18:42:57 2016 +0000
@@ -0,0 +1,176 @@
+/**
+    Food Controller
+    foodController.cpp
+    Purpose:    This function runs on a FRDM KL25Z. It uses the accelerometer to measure the tilt of the board.
+                It outputs a 2 bit number that describes the direction. The board is also fitted with four LEDS
+                oriented in the following configuration: o8o to provide feedback to the user. This board also 
+                makes use of the touch sensor input to set a variable speed for the food, indicated by RGB LED
+    @author Daniel Lock
+    @author Jamie Gnodde
+    @version
+*/
+
+#include "mbed.h"
+#include "TSISensor.h"
+#include "MMA8451Q.h"
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+Serial pc(USBTX, USBRX); // tx, rx  used for printing to the PC screen during debugging
+
+DigitalOut gled(LED_GREEN);                         //Indicator for touch sensor Output speed 1
+DigitalOut bled(LED_BLUE);                          //Indicator for touch sensor Output speed 2
+DigitalOut rled(LED_RED);                           //Indicator for touch sensor Output speed 3
+TSISensor tsi;                                      //Setup touch sensor
+MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);    //Setup accelerometer
+DigitalOut lefthigh(PTC7);                          //LED for left
+DigitalOut leftlow(PTA1);
+DigitalOut righthigh(PTC4);                         //LED for right
+DigitalOut rightlow(PTA12);
+DigitalOut forwardhigh(PTC0);                       //LED for forward
+DigitalOut forwardlow(PTC3);
+DigitalOut backwardhigh(PTA2);                      //LED for backward
+DigitalOut backwardlow(PTD4);
+
+int Direction;                                      //2 bit number to describe direction 0 forward assigned CW
+int Velocity;                                       //2 bit number to vary velocity in game
+
+bool right;                                         //Right or left? right = 1
+bool forward;                                       //Forward or Backward? forward = 1
+
+int main()
+{
+    while (1) 
+    {
+         
+        float accX=acc.getAccX();                   //Measure acceleration in X direction
+        float accY=acc.getAccY();                   //Measure acceleration in Y direction
+
+         if (tsi.readDistance() != 0)               //Only execute if the touch sensor is being pressed
+        {          
+            if (tsi.readDistance() <= 13)           //Length of touch sensor divided into three distinct zones, this defines top zone
+            {
+                Velocity = 3;                       //Top zone -> highest velocity (varies 1-3)
+                rled = 0;                           //Use the RGB LED as an indicator for which speed is selected
+                bled = 1;
+                gled = 1;
+            }
+            if (tsi.readDistance() > 13 && tsi.readDistance() < 26)         //Middle zone of touch sensor
+            {
+                Velocity = 2;                       //Middle zone -> middle velocity
+                rled = 1;                           //Use the RGB LED as an indicator for which speed is selected
+                bled = 0;
+                gled = 1;              
+            }
+            if (tsi.readDistance() >= 26)
+            {
+                Velocity = 1;                       //Bottom zone -> lowest velocity
+                rled = 1;                           //Use the RGB LED as an indicator for which speed is selected
+                bled = 1;
+                gled = 0;
+            }
+                             
+            printf("x=%d\r\n",Velocity);            //Print the velocity to the serial for debugging
+           
+            wait(0.2);                              //May be left over from debugging?
+
+        }//endif touch sensor 
+     
+        //Establish whether the board is tilted left or right         
+        if (accX > 0.1) 
+        {
+            right = false;
+            //printf("left \r\n");
+        }//endif
+
+        if (accX < -0.1) 
+        {
+            right = true;
+            //printf("right \r\n");
+        }//endif
+        
+        wait(0.1);                                  //May be left over from debugging?
+
+        //Establish whether the board is tilted front or back
+        if (accY > 0.1) 
+        {
+            forward = false;
+            //printf("back \r\n");
+        }//endif
+
+        if (accY < -0.1) 
+        {
+            forward = true;            
+            //printf("for \r\n");
+        }//endif
+        
+        wait(0.1);                                  //May be left over from debugging?
+        
+        //Establish the main axis of tilting so that the control outputs one direction        
+        if(abs(accY) > abs(accX))
+        {
+            if(forward == true)
+            {
+                Direction = 0;                  //Direction variable is a two bit number 0-3 0 is forward
+                
+                lefthigh = 0;                   //Light up the forward LED, make sure all others are off
+                leftlow = 0;
+                righthigh = 0;
+                rightlow = 0;
+                forwardhigh = 1;
+                forwardlow = 0;
+                backwardhigh = 0;
+                backwardlow = 0;                
+            
+            }//endif
+            else
+            {
+                Direction = 2;                  //Direction variable is a two bit number 0-3 2 is backward
+                
+                lefthigh = 0;                   //Light up the backward LED, make sure all others are off
+                leftlow = 0;
+                righthigh = 0;
+                rightlow = 0;
+                forwardhigh = 0;
+                forwardlow = 0;
+                backwardhigh = 1;
+                backwardlow = 0;
+                   
+            }//endelse
+        }//endif
+        else
+        {
+            if(right == true)
+            {
+                Direction = 1;                  //Direction variable is a two bit number 0-3 1 is right
+                
+                lefthigh = 0;                   //Light up the right LED, make sure all others are off
+                leftlow = 0;
+                righthigh = 1;
+                rightlow = 0;
+                forwardhigh = 0;
+                forwardlow = 0;
+                backwardhigh = 0;
+                backwardlow = 0;
+             
+            }//endif
+            else
+            {
+                Direction = 3;                  //Direction variable is a two bit number 0-3 3 is left
+                
+                lefthigh = 1;                   //Light up the left LED, make sure all others are off
+                leftlow = 0;
+                righthigh = 0;
+                rightlow = 0;
+                forwardhigh = 0;
+                forwardlow = 0;
+                backwardhigh = 0;
+                backwardlow = 0;                
+                    
+            }//endelse
+        }//endelse
+        
+        printf("Direction = %d \r\n", Direction);           //Print the direction variable to screen for debugging
+        
+    }//endwhile
+}//endmain
+