Serpentine / Mbed 2 deprecated serpentine_foodcontroller_final

Dependencies:   MMA8451Q TSI mbed

Fork of foodcontroller_NoWiFi by Serpentine

foodController.cpp

Committer:
danlock10y
Date:
2016-06-09
Revision:
6:57b9a6427bc2

File content as of revision 6:57b9a6427bc2:

/**
    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