Dependencies:   mbed

Dependents:   MouseHybridSenseCode

calibrateFunc.cpp

Committer:
JamieBignell
Date:
2018-03-05
Revision:
3:7f44ab64e96b
Child:
4:f1670eec4681

File content as of revision 3:7f44ab64e96b:

#include "mbed.h"
#include "funcdef.h"

void CalibrateFunc()
{
    //USER PUTS MOUSE LEFT OF LINE 
    
    //TAKE MIN/MAX VALUES 1ST TIME
    for (int i=0;i<=7;i++)
    {
        sensorValue[i]=((sensorPin[i]).read_u16()>>4); 
        sensorMinValue1[i]=sensorValue[i];
        sensorMaxValue1[i]=sensorValue[i];
    }
    
    //LEFT WHEEL STARTS TURN  
    leftMotorVal.pulsewidth_ms(50);
    rightMotorVal.pulsewidth_ms(0);   
    
    //TURN UNTIL MIN AND MAX OF ALL SENSORS ARE SET AND A SMIDGE MORE
    /////////////////////////////////////////////  
      
    int doneYet=0;  
    while(1)
    {    
        for (int i=0;i<=7;i++)
        {
            sensorValue[i]=((sensorPin[i]).read_u16()>>4);      
            if (sensorValue[i]>=sensorMaxValue1[i])
            {    
                sensorMaxValue1[i]=sensorValue[i];      
            }
            else if ((sensorValue[i]+70)<=sensorMaxValue1[i]) 
            {
                doneYet++;
                if (doneYet==8)
                {
                  goto endOfScan1;
                }
            }
        }            
    }
    endOfScan1:
    wait(0.1);
    /////////////////////////////////////////////
  
    //STOP WHEELS
    leftMotorVal.pulsewidth_ms(0);
    rightMotorVal.pulsewidth_ms(0);
      
    //TAKE MIN/MAX VALUES 2ND TIME
    for (int i=0;i<=7;i++)
    {
        sensorValue[i]=((sensorPin[i]).read_u16()>>4);
        sensorMinValue2[i]=sensorValue[i];
        sensorMaxValue2[i]=sensorValue[i];
    }
    
    //RIGHT WHEEL STARTS TURN  
    leftMotorVal.pulsewidth_ms(0);
    rightMotorVal.pulsewidth_ms(50); 
  
    //TURN UNTIL MIN AND MAX OF ALL SENSORS ARE SET IN NEW VARIABLES
    doneYet=0;  
    while(1)
    {    
        for (int i=0;i<=7;i++)
        {
            sensorValue[i]=((sensorPin[i]).read_u16()>>4);      
            if (sensorValue[i]>=sensorMaxValue2[i])
            {    
                sensorMaxValue2[i]=sensorValue[i];      
            }
            else if ((sensorValue[i]+70)<=sensorMaxValue2[i]) 
            {
                doneYet++;
                if (doneYet==8)
                {
                    goto endOfScan2;
                }
            }
        }           
    }
    endOfScan2:
    
    wait(0.1);
    ///////////////////////////////////////////// 
    
    //STOP WHEELS
    leftMotorVal.pulsewidth_ms(0);
    rightMotorVal.pulsewidth_ms(0);
    
    //AVERAGE THESE VALUES       
    for (int i=1;i<=8;i++)
    {
        sensorMinValue[i]=(sensorMinValue1[i]+sensorMinValue2[i])/2;
        sensorMaxValue[i]=(sensorMaxValue1[i]+sensorMaxValue2[i])/2;
    }  
    
    //SET THRESHOLDS FOR ERROR OF 0
    for (int i=1;i<=8;i++)
    {
        sensorThreshold[i]=sensorMaxValue[i]-100;
    } 
    
    return;
}