most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

omegaPX209/omegaPX209.cpp

Committer:
tnhnrl
Date:
2017-11-21
Revision:
17:7c16b5671d0e
Parent:
14:85b64a4d08e8
Child:
54:d4990fb68404

File content as of revision 17:7c16b5671d0e:

/*
This class wraps an Omega pressure transducer.
Author: Matthew, October 24th, 2013
Modified: Dan, 2017-10-30
*/

#include "mbed.h"
#include "omegaPX209.hpp"

omegaPX209::omegaPX209(PinName pin): 
    _adc(pin)
{
    _psi = 14.7;                    // pressure [psi]
    _zeroPsi = 14.7;                // atmospheric pressure at sea level [psi]
    _adcVoltage = 3.3;              // mbed ADC system voltage [V]
    _fullscale = 50;                // value of sensor at full scale (*confirm with Stearns*) [psi]
    _cal = _fullscale/5.0;          // psi per volt calibration [psi/V]
}

// nothing to initialize, but you can call this function if it makes you feel better.
void omegaPX209::init() {
}

// lets user set a different ambient pressure [psi]
void omegaPX209::setZero(float zeroPsi) {
    _zeroPsi = zeroPsi;    
}

// returns the internal ambient pressure [psi]
float omegaPX209::getZero() {
    return _zeroPsi;
}

// reads from ADC system and does math for converting to psi
float omegaPX209::getPsi() {
    // filter by over-sampling
    float add = 0;
    for (int i = 0; i < OVERSAMPLE; i++) {
        // analog input _adc is float 0.0 to 1.0
        // multiplying by _adcVoltage converts percentage to a voltage
        // multiplying by _cal converts voltage to a pressure
        add += _adc.read() * _adcVoltage * _cal;
    }
    
    // use over-sampled
    _psi = (add/OVERSAMPLE);

    return _psi;
}

// reads the ADC system and returns depth in feet
float omegaPX209::getDepthFt() {
    float psi = getPsi() - _zeroPsi; // read the sensor and remove atmospheric bias
    float Pa = psi2Pa * psi; // convert psi to Pascals
    float depth_m = Pa / (water_density_kg_m3 * grav_m_s2); // convert Pa to fluid depth in meters
    float depth_ft = m2ft * depth_m; // convert meters to feet

    return depth_ft;
}

// call this if you want to tare to zero
void omegaPX209::tare() {
    setZero(getPsi());
}