This code enables our mouse to go round the track using the two error methods.

Dependencies:   Nucleo_blink_led mbed

Fork of Nucleo_blink_led by Jamie Bignell

senseFunc.cpp

Committer:
JamieBignell
Date:
2018-03-11
Revision:
5:dfea493f7a12
Child:
6:a652deaae134

File content as of revision 5:dfea493f7a12:

#include <mbed.h>
#include <funcdef.h>
  
void senseFunc()
{
    //READ ALL SENSORS
    for (int i=0;i<=7;i++)
    {
        sensorValue[i]=((sensorPin[i]).read_u16()>>4); 
    }
    
    //USING THRESHOLDS, DETERMINE IF SENSOR ON LINE, THEN PRODUCE ERROR ARRAY
    for (int i=0;i<=7;i++)
    {
        if ((sensorValue[i])>=(sensorThreshold[i]))
        {
            sensorErrors[i] = 1;
        }
        else
        {
            sensorErrors[i] = 0;
        }
    }
    
    //SENSOR CONFIG 1
    /*
    6 4 2 0 1 3 5 7
    0 0 0 1 1 0 0 0 /
    0 0 1 1 1 0 0 0 /
    0 0 1 1 0 0 0 0 /
    0 1 1 1 0 0 0 0 /
    0 1 1 0 0 0 0 0 /
    1 1 1 0 0 0 0 0 /
    1 1 0 0 0 0 0 0 /
    1 0 0 0 0 0 0 0 /
    
    6 4 2 0 1 3 5 7
    0 0 0 1 1 0 0 0 /
    0 0 0 1 1 1 0 0 /
    0 0 0 0 1 1 0 0 /
    0 0 0 0 1 1 1 0 / 
    0 0 0 0 0 1 1 0 /
    0 0 0 0 0 1 1 1 /
    0 0 0 0 0 0 1 1 /
    0 0 0 0 0 0 0 1 /
    */
    
    //SENSOR CONFIG 2
    /*
    6 4 2 0 1 3 5 7
    0 0 0 1 1 0 0 0 /
    0 0 1 1 0 0 0 0 /
    0 1 1 0 0 0 0 0 /
    1 1 0 0 0 0 0 0 /
    1 0 0 0 0 0 0 0 /
    
    6 4 2 0 1 3 5 7
    0 0 0 1 1 0 0 0 /
    0 0 0 0 1 1 0 0 /
    0 0 0 0 0 1 1 0 /
    0 0 0 0 0 0 1 1 /
    0 0 0 0 0 0 0 1 /
    */
    
    //DETERMINE STATES WHERE AN ERROR CAN DEFINITELY BE PRODUCED, IF NONE OF THESE STATES EXIST CURRENTLY, USE PREVIOUS ERROR
    if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 1) && ((sensorErrors[1]) == 1) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=0;
        //delayBetweenPulses_ms=500;  
        //note=period_F6; 
    } 
       
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 1) && ((sensorErrors[0]) == 1) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=-1;
        //delayBetweenPulses_ms=400;
        //note=period_E6;  
    }    
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 1) && ((sensorErrors[2]) == 1) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=-2;
        //delayBetweenPulses_ms=300;
        //note=period_D6;   
    }   
    else if (((sensorErrors[6]) == 1) && ((sensorErrors[4]) == 1) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=-3;
        //delayBetweenPulses_ms=200; 
        //note=period_B6;  
    }
    else if (((sensorErrors[6]) == 1) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=-4;
        //delayBetweenPulses_ms=100;
        //note=period_A6;   
    }
    
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 1) && ((sensorErrors[3]) == 1) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 0))
    {
        errorVar=1;
        //delayBetweenPulses_ms=400;
        //note=period_E6;   
    }
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 1) && ((sensorErrors[5]) == 1) && ((sensorErrors[7]) == 0))
    {
        errorVar=2;
        //delayBetweenPulses_ms=300; 
        //note=period_D6;  
    }    
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 1) && ((sensorErrors[7]) == 1))
    {
        errorVar=3;
        //delayBetweenPulses_ms=200;
        //note=period_B6;   
    }
    else if (((sensorErrors[6]) == 0) && ((sensorErrors[4]) == 0) && ((sensorErrors[2]) == 0) && ((sensorErrors[0]) == 0) && ((sensorErrors[1]) == 0) && ((sensorErrors[3]) == 0) && ((sensorErrors[5]) == 0) && ((sensorErrors[7]) == 1))
    {
        errorVar=4;
        //delayBetweenPulses_ms=100; 
        //note=period_A6;  
    }
    else
    {
        errorVar=previousError;
    }
        
    return;
}