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

Committer:
danstrider
Date:
Tue Oct 31 17:06:52 2017 +0000
Revision:
14:85b64a4d08e8
Parent:
10:085ab7328054
Child:
17:7c16b5671d0e
New depth sensor class with tare and oversampling.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkelly10 9:d5fcdcb3c89d 1 /*
danstrider 14:85b64a4d08e8 2 This class wraps an Omega pressure transducer.
danstrider 14:85b64a4d08e8 3 Author: Matthew, October 24th, 2013
danstrider 14:85b64a4d08e8 4 Modified: Dan, 2017-10-30
mkelly10 9:d5fcdcb3c89d 5 */
mkelly10 9:d5fcdcb3c89d 6
mkelly10 9:d5fcdcb3c89d 7 #include "mbed.h"
mkelly10 9:d5fcdcb3c89d 8 #include "omegaPX209.hpp"
mkelly10 9:d5fcdcb3c89d 9
danstrider 10:085ab7328054 10 omegaPX209::omegaPX209(PinName pin):
danstrider 14:85b64a4d08e8 11 _adc(pin)
mkelly10 9:d5fcdcb3c89d 12 {
danstrider 14:85b64a4d08e8 13 _psi = 14.7; // pressure [psi]
danstrider 14:85b64a4d08e8 14 _zeroPsi = 14.7; // atmospheric pressure at sea level [psi]
danstrider 14:85b64a4d08e8 15 _adcVoltage = 3.3; // mbed ADC system voltage [V]
danstrider 14:85b64a4d08e8 16 _fullscale = 50; // value of sensor at full scale (*confirm with Stearns*) [psi]
danstrider 14:85b64a4d08e8 17 _cal = _fullscale/5.0; // psi per volt calibration [psi/V]
mkelly10 9:d5fcdcb3c89d 18 }
mkelly10 9:d5fcdcb3c89d 19
danstrider 14:85b64a4d08e8 20 // nothing to initialize, but you can call this function if it makes you feel better.
danstrider 14:85b64a4d08e8 21 void omegaPX209::init() {
danstrider 14:85b64a4d08e8 22 }
danstrider 14:85b64a4d08e8 23
danstrider 14:85b64a4d08e8 24 // lets user set a different ambient pressure [psi]
danstrider 14:85b64a4d08e8 25 void omegaPX209::setZero(float zeroPsi) {
danstrider 14:85b64a4d08e8 26 _zeroPsi = zeroPsi;
danstrider 14:85b64a4d08e8 27 }
danstrider 14:85b64a4d08e8 28
danstrider 14:85b64a4d08e8 29 // returns the internal ambient pressure [psi]
danstrider 14:85b64a4d08e8 30 float omegaPX209::getZero() {
danstrider 14:85b64a4d08e8 31 return _zeroPsi;
mkelly10 9:d5fcdcb3c89d 32 }
mkelly10 9:d5fcdcb3c89d 33
danstrider 14:85b64a4d08e8 34 // reads from ADC system and does math for converting to psi
danstrider 10:085ab7328054 35 float omegaPX209::getPsi() {
danstrider 14:85b64a4d08e8 36 // filter by over-sampling
danstrider 14:85b64a4d08e8 37 float add = 0;
danstrider 14:85b64a4d08e8 38 for (int i = 0; i < OVERSAMPLE; i++) {
danstrider 14:85b64a4d08e8 39 // analog input _adc is float 0.0 to 1.0
danstrider 14:85b64a4d08e8 40 // multiplying by _adcVoltage converts percentage to a voltage
danstrider 14:85b64a4d08e8 41 // multiplying by _cal converts voltage to a pressure
danstrider 14:85b64a4d08e8 42 add += _adc.read() * _adcVoltage * _cal;
danstrider 14:85b64a4d08e8 43 }
danstrider 14:85b64a4d08e8 44
danstrider 14:85b64a4d08e8 45 // use over-sampled
danstrider 14:85b64a4d08e8 46 _psi = (add/OVERSAMPLE);
danstrider 14:85b64a4d08e8 47
danstrider 14:85b64a4d08e8 48 return _psi;
mkelly10 9:d5fcdcb3c89d 49 }
danstrider 10:085ab7328054 50
danstrider 14:85b64a4d08e8 51 // reads the ADC system and returns depth in feet
danstrider 14:85b64a4d08e8 52 float omegaPX209::getDepthFt() {
danstrider 14:85b64a4d08e8 53 float psi = getPsi() - _zeroPsi; // read the sensor and remove atmospheric bias
danstrider 14:85b64a4d08e8 54 float Pa = psi2Pa * psi; // convert psi to Pascals
danstrider 14:85b64a4d08e8 55 float depth_m = Pa / (water_density_kg_m3 * grav_m_s2); // convert Pa to fluid depth in meters
danstrider 14:85b64a4d08e8 56 float depth_ft = m2ft * depth_m; // convert meters to feet
danstrider 14:85b64a4d08e8 57
danstrider 10:085ab7328054 58 return depth_ft;
danstrider 14:85b64a4d08e8 59 }
danstrider 14:85b64a4d08e8 60
danstrider 14:85b64a4d08e8 61 // call this if you want to tare to zero
danstrider 14:85b64a4d08e8 62 float omegaPX209::tare() {
danstrider 14:85b64a4d08e8 63 setZero(getPsi());
danstrider 10:085ab7328054 64 }