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@14:85b64a4d08e8, 2017-10-31 (annotated)
- 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?
User | Revision | Line number | New 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 | } |