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@54:d4990fb68404, 2018-06-08 (annotated)
- Committer:
- tnhnrl
- Date:
- Fri Jun 08 13:56:30 2018 +0000
- Revision:
- 54:d4990fb68404
- Parent:
- 17:7c16b5671d0e
- Child:
- 55:f4ec445c42fe
heading not working
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 |
tnhnrl | 54:d4990fb68404 | 5 | |
tnhnrl | 54:d4990fb68404 | 6 | WIP: Troy |
tnhnrl | 54:d4990fb68404 | 7 | - added the ability to read the counts from this class directly |
tnhnrl | 54:d4990fb68404 | 8 | - had to fix the class to have the header guard in the header file (#ifndef, #define, #endif) |
mkelly10 | 9:d5fcdcb3c89d | 9 | */ |
mkelly10 | 9:d5fcdcb3c89d | 10 | |
mkelly10 | 9:d5fcdcb3c89d | 11 | #include "mbed.h" |
mkelly10 | 9:d5fcdcb3c89d | 12 | #include "omegaPX209.hpp" |
tnhnrl | 54:d4990fb68404 | 13 | #include "StaticDefs.hpp" //pins and other hardware (new) |
mkelly10 | 9:d5fcdcb3c89d | 14 | |
danstrider | 10:085ab7328054 | 15 | omegaPX209::omegaPX209(PinName pin): |
tnhnrl | 54:d4990fb68404 | 16 | _adc(pin) //leaving function as is for now |
mkelly10 | 9:d5fcdcb3c89d | 17 | { |
danstrider | 14:85b64a4d08e8 | 18 | _psi = 14.7; // pressure [psi] |
danstrider | 14:85b64a4d08e8 | 19 | _zeroPsi = 14.7; // atmospheric pressure at sea level [psi] |
tnhnrl | 54:d4990fb68404 | 20 | _adcVoltage = 5.6; // Troy: I'm not sure this is the right name for this multiplier... [V] (was 3.3 before) |
danstrider | 14:85b64a4d08e8 | 21 | _fullscale = 50; // value of sensor at full scale (*confirm with Stearns*) [psi] |
tnhnrl | 54:d4990fb68404 | 22 | _psi_per_volt_cal = _fullscale/5.0; // psi per volt calibration [psi/V] |
tnhnrl | 54:d4990fb68404 | 23 | _PSI_reading = 0; |
mkelly10 | 9:d5fcdcb3c89d | 24 | } |
mkelly10 | 9:d5fcdcb3c89d | 25 | |
danstrider | 14:85b64a4d08e8 | 26 | // nothing to initialize, but you can call this function if it makes you feel better. |
danstrider | 14:85b64a4d08e8 | 27 | void omegaPX209::init() { |
danstrider | 14:85b64a4d08e8 | 28 | } |
danstrider | 14:85b64a4d08e8 | 29 | |
danstrider | 14:85b64a4d08e8 | 30 | // lets user set a different ambient pressure [psi] |
danstrider | 14:85b64a4d08e8 | 31 | void omegaPX209::setZero(float zeroPsi) { |
danstrider | 14:85b64a4d08e8 | 32 | _zeroPsi = zeroPsi; |
danstrider | 14:85b64a4d08e8 | 33 | } |
danstrider | 14:85b64a4d08e8 | 34 | |
danstrider | 14:85b64a4d08e8 | 35 | // returns the internal ambient pressure [psi] |
danstrider | 14:85b64a4d08e8 | 36 | float omegaPX209::getZero() { |
danstrider | 14:85b64a4d08e8 | 37 | return _zeroPsi; |
mkelly10 | 9:d5fcdcb3c89d | 38 | } |
mkelly10 | 9:d5fcdcb3c89d | 39 | |
danstrider | 14:85b64a4d08e8 | 40 | // reads from ADC system and does math for converting to psi |
danstrider | 10:085ab7328054 | 41 | float omegaPX209::getPsi() { |
danstrider | 14:85b64a4d08e8 | 42 | // filter by over-sampling |
danstrider | 14:85b64a4d08e8 | 43 | float add = 0; |
tnhnrl | 54:d4990fb68404 | 44 | float adc_reading = 0; |
tnhnrl | 54:d4990fb68404 | 45 | float PSI_reading = 0; |
tnhnrl | 54:d4990fb68404 | 46 | |
danstrider | 14:85b64a4d08e8 | 47 | for (int i = 0; i < OVERSAMPLE; i++) { |
danstrider | 14:85b64a4d08e8 | 48 | // analog input _adc is float 0.0 to 1.0 |
danstrider | 14:85b64a4d08e8 | 49 | // multiplying by _adcVoltage converts percentage to a voltage |
danstrider | 14:85b64a4d08e8 | 50 | // multiplying by _cal converts voltage to a pressure |
tnhnrl | 54:d4990fb68404 | 51 | adc_reading = adc().readCh4()/4095.0; |
tnhnrl | 54:d4990fb68404 | 52 | |
tnhnrl | 54:d4990fb68404 | 53 | _PSI_reading = adc_reading * _adcVoltage * _psi_per_volt_cal; //Note: real_voltage_reading = adc_reading * _adcVoltage |
tnhnrl | 54:d4990fb68404 | 54 | |
tnhnrl | 54:d4990fb68404 | 55 | add += PSI_reading; //replaced _adc.read() |
danstrider | 14:85b64a4d08e8 | 56 | } |
danstrider | 14:85b64a4d08e8 | 57 | |
danstrider | 14:85b64a4d08e8 | 58 | // use over-sampled |
danstrider | 14:85b64a4d08e8 | 59 | _psi = (add/OVERSAMPLE); |
danstrider | 14:85b64a4d08e8 | 60 | |
danstrider | 14:85b64a4d08e8 | 61 | return _psi; |
mkelly10 | 9:d5fcdcb3c89d | 62 | } |
danstrider | 10:085ab7328054 | 63 | |
danstrider | 14:85b64a4d08e8 | 64 | // reads the ADC system and returns depth in feet |
danstrider | 14:85b64a4d08e8 | 65 | float omegaPX209::getDepthFt() { |
danstrider | 14:85b64a4d08e8 | 66 | float psi = getPsi() - _zeroPsi; // read the sensor and remove atmospheric bias |
danstrider | 14:85b64a4d08e8 | 67 | float Pa = psi2Pa * psi; // convert psi to Pascals |
danstrider | 14:85b64a4d08e8 | 68 | float depth_m = Pa / (water_density_kg_m3 * grav_m_s2); // convert Pa to fluid depth in meters |
danstrider | 14:85b64a4d08e8 | 69 | float depth_ft = m2ft * depth_m; // convert meters to feet |
danstrider | 14:85b64a4d08e8 | 70 | |
danstrider | 10:085ab7328054 | 71 | return depth_ft; |
danstrider | 14:85b64a4d08e8 | 72 | } |
danstrider | 14:85b64a4d08e8 | 73 | |
danstrider | 14:85b64a4d08e8 | 74 | // call this if you want to tare to zero |
tnhnrl | 17:7c16b5671d0e | 75 | void omegaPX209::tare() { |
danstrider | 14:85b64a4d08e8 | 76 | setZero(getPsi()); |
tnhnrl | 54:d4990fb68404 | 77 | } |
tnhnrl | 54:d4990fb68404 | 78 | |
tnhnrl | 54:d4990fb68404 | 79 | // 06/06/2018 |
tnhnrl | 54:d4990fb68404 | 80 | |
tnhnrl | 54:d4990fb68404 | 81 | int omegaPX209::readADCCounts() { |
tnhnrl | 54:d4990fb68404 | 82 | //return _adc.read(); |
tnhnrl | 54:d4990fb68404 | 83 | return adc().readCh4(); |
tnhnrl | 54:d4990fb68404 | 84 | } |
tnhnrl | 54:d4990fb68404 | 85 | |
tnhnrl | 54:d4990fb68404 | 86 | float omegaPX209::readVoltage() { |
tnhnrl | 54:d4990fb68404 | 87 | float pressure_voltage = adc().readCh4()/4095.0 * 5.6; |
tnhnrl | 54:d4990fb68404 | 88 | return pressure_voltage; |
tnhnrl | 54:d4990fb68404 | 89 | } |
tnhnrl | 54:d4990fb68404 | 90 | |
tnhnrl | 54:d4990fb68404 | 91 | float omegaPX209::getRawPSI() { |
tnhnrl | 54:d4990fb68404 | 92 | float pressure_raw = adc().readCh4()/4095.0 * 56; |
tnhnrl | 54:d4990fb68404 | 93 | return pressure_raw; |
danstrider | 10:085ab7328054 | 94 | } |