This is my first application to write in the particle world…except for the blink apps. I have the MS5803 pressure sensor connected to the xenon on the featherwing. I connected the pressure sensor’s I2C sda wire to pin 17 of the spare place on the featherwing, and scl to pin 18. 3.3 volts (pin 2) and ground to pin 4 for the I2c interface.
I know there are problems with this code. It is written for an arduino, which has a serial monitor. I don’t think I have a serial monitor in the particle environment, so I don’t know how to see the output from the pressure sensor.
It seems that there should be three ways to see the data: Using the cell phone app, through the ethernet cable or possibly that little header on the board, for development. Could someone clue me in on how I should read the data from the sensor?
When I get the boron I will have to explore that step too, but this is my first step. Code below:
#include <Wire.h>
#include <MS5803_I2C.h>
// Begin class with selected address
// available addresses (selected by jumper on board)
// default is ADDRESS_HIGH
// ADDRESS_HIGH = 0x76
// ADDRESS_LOW = 0x77
MS5803 sensor(ADDRESS_LOW);
//Create variables to store results
float temperature_c, temperature_f;
double pressure_abs, pressure_relative, altitude_delta, pressure_baseline;
// Create Variable to store altitude in (m) for calculations;
double base_altitude = 1655.0; // Altitude of SparkFun's HQ in Boulder, CO. in (m)
void setup() {
Serial.begin(9600);
//Retrieve calibration constants for conversion math.
sensor.reset();
sensor.begin();
pressure_baseline = sensor.getPressure(ADC_4096);
}
void loop() {
// To measure to higher degrees of precision use the following sensor settings:
// ADC_256
// ADC_512
// ADC_1024
// ADC_2048
// ADC_4096
// Read temperature from the sensor in deg C. This operation takes about
temperature_c = sensor.getTemperature(CELSIUS, ADC_512);
// Read temperature from the sensor in deg F. Converting
// to Fahrenheit is not internal to the sensor.
// Additional math is done to convert a Celsius reading.
temperature_f = sensor.getTemperature(FAHRENHEIT, ADC_512);
// Read pressure from the sensor in mbar.
pressure_abs = sensor.getPressure(ADC_4096);
// Let's do something interesting with our data.
// Convert abs pressure with the help of altitude into relative pressure
// This is used in Weather stations.
pressure_relative = sealevel(pressure_abs, base_altitude);
// Taking our baseline pressure at the beginning we can find an approximate
// change in altitude based on the differences in pressure.
altitude_delta = altitude(pressure_abs , pressure_baseline);
// Report values via UART
Serial.print("Temperature C = ");
Serial.println(temperature_c);
Serial.print("Temperature F = ");
Serial.println(temperature_f);
Serial.print("Pressure abs (mbar)= ");
Serial.println(pressure_abs);
Serial.print("Pressure relative (mbar)= ");
Serial.println(pressure_relative);
Serial.print("Altitude change (m) = ");
Serial.println(altitude_delta);
delay(1000);
}
// Thanks to Mike Grusin for letting me borrow the functions below from
// the BMP180 example code.
double sealevel(double P, double A)
// Given a pressure P (mbar) taken at a specific altitude (meters),
// return the equivalent pressure (mbar) at sea level.
// This produces pressure readings that can be used for weather measurements.
{
return(P/pow(1-(A/44330.0),5.255));
}
double altitude(double P, double P0)
// Given a pressure measurement P (mbar) and the pressure at a baseline P0 (mbar),
// return altitude (meters) above baseline.
{
return(44330.0*(1-pow(P/P0,1/5.255)));
}