k

Dependencies:   Servo ServoArm mbed

Sources/DistanceSensors.cpp

Committer:
beacon
Date:
2017-05-22
Revision:
0:15a8480061e8

File content as of revision 0:15a8480061e8:

#include <cmath>
#include "Robot.h"
#include "Declarations.h"



DistanceSensors::DistanceSensors() 
{
    //Nothing
}
    
DistanceSensors::DistanceSensors(AnalogIn* sensorVoltage, AnalogIn* frontS, AnalogIn* leftS, AnalogIn* rightS, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number)
{   
    init(sensorVoltage, frontS, leftS, rightS, bit0, bit1, bit2, number);
}

//initialise
void DistanceSensors::init(AnalogIn* sensorVoltage, AnalogIn* frontS, AnalogIn* leftS, AnalogIn* rightS, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number)
{
    this->sensorVoltage = sensorVoltage;
    this->frontS = frontS;
    this->leftS = leftS;
    this->rightS = rightS;
    
    this->bit0 = bit0;
    this->bit1 = bit1;
    this->bit2 = bit2;
    this->number = number;
}


DistanceSensors::~DistanceSensors()
{ 
}


float DistanceSensors::read()//Return the distance of an object
{
    
    float Usensor;

    if (number < 6){
        *bit0 = number & 1; // Set the first bit of the Sensors MUX
        *bit1 = number & 2; // Set the second bit of the Sensors MUX
        *bit2 = number & 4; // Set the third bit of the Sensors MUX
        
        Usensor=sensorVoltage->read(); //Read the Voltage from the selected distance sensor
    }
    else{
        switch(number){
            case 6:
                Usensor=frontS->read();
                break;
            case 7:
                Usensor=leftS->read();
                break;
            case 8:
                Usensor=rightS->read();
                break;
        }
    }
    
    //Usensor=sensorVoltage->read(); //Read the Voltage from the selected distance sensor
    Usensor *= 3.3f;
    float Distance= 5.906*Usensor*Usensor - 30.831*Usensor + 47.628;
    Distance /= 100;
    
    static float distance_filtered = 0.0f;
    distance_filtered = 0.55f * distance_filtered + 0.45f * Distance;
    
    return Distance;
    return distance_filtered;
}

DistanceSensors::operator float()
{ 
    return read();
}