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:
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?

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
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 }