Serpentine / Mbed 2 deprecated serpentine_snakecontroller_final

Dependencies:   MMA8451Q TSI mbed

Fork of snakecontroller by Serpentine

main.cpp

Committer:
danlock10y
Date:
2016-06-09
Revision:
8:93190b81ceca
Parent:
7:292f2de3c013
Child:
9:7628a5b8b6f2

File content as of revision 8:93190b81ceca:

/**
    Snake Controller
    snakeController.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.
    @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 - Set up USB serial to read back values for testing

MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);    //Setup accelerometer
DigitalOut lefthigh(PTC7);                         //Test LED for left
DigitalOut leftlow(PTA1);
DigitalOut righthigh(PTC4);                         //Test LED for right
DigitalOut rightlow(PTA12);
DigitalOut forwardhigh(PTC0);                      //Test LED for forward
DigitalOut forwardlow(PTC3);
DigitalOut backwardhigh(PTA2);                     //Test LED for backward
DigitalOut backwardlow(PTD4);

int Direction;                                      //2 bit number to describe direction 0 forward assigned CW

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
                
        //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);                              //Not sure if this is 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);                              //Not sure if this is 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 of
                leftlow = 0;
                righthigh = 0;
                rightlow = 0;
                forwardhigh = 1;
                forwardlow = 0;
                backwardhigh = 0;
                backwardlow = 0;                
            
            }//endif
            else
            {
                Direction = 2;
                
                lefthigh = 0;
                leftlow = 0;
                righthigh = 0;
                rightlow = 0;
                forwardhigh = 0;
                forwardlow = 0;
                backwardhigh = 1;
                backwardlow = 0;
                   
            }//endelse
        }//endif
        else
        {
            if(right == true)
            {
                Direction = 1;
                
                lefthigh = 0;
                leftlow = 0;
                righthigh = 1;
                rightlow = 0;
                forwardhigh = 0;
                forwardlow = 0;
                backwardhigh = 0;
                backwardlow = 0;
             
            }//endif
            else
            {
                Direction = 3;
                
                lefthigh = 1;
                leftlow = 0;
                righthigh = 0;
                rightlow = 0;
                forwardhigh = 0;
                forwardlow = 0;
                backwardhigh = 0;
                backwardlow = 0;                
                    
            }//endelse
        }//endelse
        
        printf("Direction = %d \r\n", Direction);          //Print the value of Direction to the serial         
        
    }//endwhile
}//endmain