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@92:52a91656458a, 2019-05-13 (annotated)
- Committer:
- joel_ssc
- Date:
- Mon May 13 19:25:26 2019 +0000
- Revision:
- 92:52a91656458a
- Parent:
- 85:dd8176285b6e
version for first flight test, timeouts not yet set correctly
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 | 55:f4ec445c42fe | 20 | _adcVoltage = 5.24; // 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 | 56:48a8a5a65b82 | 45 | |
tnhnrl | 56:48a8a5a65b82 | 46 | _PSI_reading = 0; //reset each time |
tnhnrl | 54:d4990fb68404 | 47 | |
danstrider | 14:85b64a4d08e8 | 48 | for (int i = 0; i < OVERSAMPLE; i++) { |
danstrider | 14:85b64a4d08e8 | 49 | // analog input _adc is float 0.0 to 1.0 |
danstrider | 14:85b64a4d08e8 | 50 | // multiplying by _adcVoltage converts percentage to a voltage |
danstrider | 14:85b64a4d08e8 | 51 | // multiplying by _cal converts voltage to a pressure |
tnhnrl | 54:d4990fb68404 | 52 | adc_reading = adc().readCh4()/4095.0; |
tnhnrl | 54:d4990fb68404 | 53 | |
tnhnrl | 54:d4990fb68404 | 54 | _PSI_reading = adc_reading * _adcVoltage * _psi_per_volt_cal; //Note: real_voltage_reading = adc_reading * _adcVoltage |
tnhnrl | 54:d4990fb68404 | 55 | |
tnhnrl | 56:48a8a5a65b82 | 56 | add += _PSI_reading; //replaced _adc.read() |
danstrider | 14:85b64a4d08e8 | 57 | } |
danstrider | 14:85b64a4d08e8 | 58 | |
danstrider | 14:85b64a4d08e8 | 59 | // use over-sampled |
danstrider | 14:85b64a4d08e8 | 60 | _psi = (add/OVERSAMPLE); |
danstrider | 14:85b64a4d08e8 | 61 | |
danstrider | 14:85b64a4d08e8 | 62 | return _psi; |
mkelly10 | 9:d5fcdcb3c89d | 63 | } |
danstrider | 10:085ab7328054 | 64 | |
danstrider | 14:85b64a4d08e8 | 65 | // reads the ADC system and returns depth in feet |
danstrider | 14:85b64a4d08e8 | 66 | float omegaPX209::getDepthFt() { |
danstrider | 14:85b64a4d08e8 | 67 | float psi = getPsi() - _zeroPsi; // read the sensor and remove atmospheric bias |
danstrider | 14:85b64a4d08e8 | 68 | float Pa = psi2Pa * psi; // convert psi to Pascals |
danstrider | 14:85b64a4d08e8 | 69 | float depth_m = Pa / (water_density_kg_m3 * grav_m_s2); // convert Pa to fluid depth in meters |
danstrider | 14:85b64a4d08e8 | 70 | float depth_ft = m2ft * depth_m; // convert meters to feet |
danstrider | 14:85b64a4d08e8 | 71 | |
danstrider | 10:085ab7328054 | 72 | return depth_ft; |
danstrider | 14:85b64a4d08e8 | 73 | } |
joel_ssc | 85:dd8176285b6e | 74 | float omegaPX209::getDepthM() { |
joel_ssc | 85:dd8176285b6e | 75 | float psi = getPsi() - _zeroPsi; // read the sensor and remove atmospheric bias |
joel_ssc | 85:dd8176285b6e | 76 | float Pa = psi2Pa * psi; // convert psi to Pascals |
joel_ssc | 85:dd8176285b6e | 77 | float depth_m = Pa / (water_density_kg_m3 * grav_m_s2); // convert Pa to fluid depth in meters |
joel_ssc | 85:dd8176285b6e | 78 | // float depth_ft = m2ft * depth_m; // convert meters to feet |
joel_ssc | 85:dd8176285b6e | 79 | |
joel_ssc | 85:dd8176285b6e | 80 | return depth_m; |
joel_ssc | 85:dd8176285b6e | 81 | } |
danstrider | 14:85b64a4d08e8 | 82 | |
danstrider | 14:85b64a4d08e8 | 83 | // call this if you want to tare to zero |
tnhnrl | 17:7c16b5671d0e | 84 | void omegaPX209::tare() { |
danstrider | 14:85b64a4d08e8 | 85 | setZero(getPsi()); |
tnhnrl | 54:d4990fb68404 | 86 | } |
tnhnrl | 54:d4990fb68404 | 87 | |
tnhnrl | 54:d4990fb68404 | 88 | // 06/06/2018 |
tnhnrl | 54:d4990fb68404 | 89 | |
tnhnrl | 54:d4990fb68404 | 90 | int omegaPX209::readADCCounts() { |
tnhnrl | 54:d4990fb68404 | 91 | //return _adc.read(); |
tnhnrl | 54:d4990fb68404 | 92 | return adc().readCh4(); |
tnhnrl | 54:d4990fb68404 | 93 | } |
tnhnrl | 54:d4990fb68404 | 94 | |
tnhnrl | 54:d4990fb68404 | 95 | float omegaPX209::readVoltage() { |
tnhnrl | 55:f4ec445c42fe | 96 | float pressure_voltage = adc().readCh4()/4095.0 * _adcVoltage; |
tnhnrl | 54:d4990fb68404 | 97 | return pressure_voltage; |
tnhnrl | 54:d4990fb68404 | 98 | } |
tnhnrl | 54:d4990fb68404 | 99 | |
tnhnrl | 54:d4990fb68404 | 100 | float omegaPX209::getRawPSI() { |
tnhnrl | 56:48a8a5a65b82 | 101 | return _PSI_reading; |
danstrider | 10:085ab7328054 | 102 | } |