-

Dependencies:   Adafruit_GFX MS5803_14BA mbed

Files at this revision

API Documentation at this revision

Comitter:
frada
Date:
Wed Jun 29 09:15:43 2016 +0000
Commit message:
A demo for MS5803-14BA mbed library

Changed in this revision

Adafruit_GFX.lib Show annotated file Show diff for this revision Revisions of this file
MS5803_14BA.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 6e3731afdabf Adafruit_GFX.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_GFX.lib	Wed Jun 29 09:15:43 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/nkhorman/code/Adafruit_GFX/#7fb1d4d3525d
diff -r 000000000000 -r 6e3731afdabf MS5803_14BA.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MS5803_14BA.lib	Wed Jun 29 09:15:43 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/frada/code/MS5803_14BA/#373f735e50e2
diff -r 000000000000 -r 6e3731afdabf main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 29 09:15:43 2016 +0000
@@ -0,0 +1,158 @@
+/* 
+    MS5803_14BA with 0.96" OLED Display
+ */
+ 
+#include "mbed.h"
+#include "Adafruit_SSD1306.h"
+#include "MS5803_14BA.h"
+
+//#define DISPLAY_USES_SPI
+//#define DISPLAY_USES_I2C
+
+#ifdef TARGET_K64F
+ #define SPI_SCK     PTD1
+ #define SPI_MOSI    PTD2
+ #define SPI_MISO    PTD3
+ #define SPI_CS      PTD0
+ #define I2C_SDA     PTE25
+ #define I2C_SCL     PTE24
+ #define displayDC   PTC4
+ #define displayRST  PTC3
+#elif defined(TARGET_KL25Z)
+ #define SPI_SCK     PTD1
+ #define SPI_MOSI    PTD2
+ #define SPI_MISO    PTD3
+ #define SPI_CS      PTD0
+ #define I2C_SDA     PTE0
+ #define I2C_SCL     PTE1
+ #define displayDC   PTD5
+ #define displayRST  PTA13
+#endif
+
+#define descentSL   (double) 23.0    // Descent speed limit in m/s
+#define liftSL      (double) 9.0     // Lift speed limit in m/s
+
+#define LED_ON 0
+#define LED_OFF 1
+
+#ifdef DISPLAY_USES_SPI
+ // an SPI sub-class that provides a constructed default
+ class SPIPreInit : public SPI
+ {
+ public:
+     SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk)
+     {
+        format(8, 3);
+        frequency(100000);
+     };
+ };
+
+ SPIPreInit gSpi(SPI_MOSI, NC, SPI_SCK);
+ Adafruit_SSD1306_Spi display(gSpi, displayDC, displayRST, SPI_CS, 64, 128);
+#elif defined(DISPLAY_USES_I2C)
+ #define DISPLAY_I2C_ADDRESS    0x00
+ 
+ // an I2C sub-class that provides a constructed default
+ class I2CPreInit : public I2C
+ {
+ public:
+     I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
+     {
+         frequency(400000);
+         start();
+     };
+ };
+
+ I2CPreInit gI2C(I2C_SDA, I2C_SCL);
+ Adafruit_SSD1306_I2c display(gI2C, displayRST, DISPLAY_I2C_ADDRESS, 64, 128);
+#endif
+ 
+Ticker ticker;
+char tmpstr[50];
+Serial pc(USBTX, USBRX);
+MS5803_14BA  sensor(I2C_SDA, I2C_SCL, 0x3B, D1_OSR_4096, D2_OSR_4096); // SDA, SCL, I2C_address (0x76 or 0x77 look at MS5803.h)
+bool volatile tick = false;
+uint8_t k;
+double p, p0 = 0.0, pp = 0.0, h = 0.0, hmax = 0.0, t = 20.0;
+DigitalOut greenLED(LED_GREEN);
+DigitalOut redLED(LED_RED);
+//DigitalOut blueLED(LED_BLUE); // blueLED is not usable because it is shared with the SPI0_SCK line!
+
+void ticker_ISR() {
+    tick = true;
+}
+
+void setup() {
+    greenLED = LED_OFF;
+    redLED = LED_OFF;
+    pc.baud(115200);
+    sprintf(tmpstr, "MS5803 demo\n");
+    pc.printf(tmpstr);
+    
+    sensor.reset();
+
+#if defined(DISPLAY_USES_SPI) || defined(DISPLAY_USES_I2C)
+    display.printf(tmpstr);
+#endif
+    
+    sprintf(tmpstr, "Calibrating...\r\n\r\n");
+
+ #if defined(DISPLAY_USES_SPI) || defined(DISPLAY_USES_I2C)
+    display.printf(tmpstr);
+    display.display();
+#endif
+
+    // gets the reference (surface) pressure as the mean of 10 initial measures
+    for (k = 1; k <= 10; k++) {
+        sensor.convert();
+                p0 = (p0*(k-1) + sensor.pressure)/k;
+    }
+    hmax = 0.0;
+        
+ #if defined(DISPLAY_USES_SPI) || defined(DISPLAY_USES_I2C)
+    display.clearDisplay();
+ //   display.setTextSize((uint8_t) 2);
+ #endif
+    ticker.attach(&ticker_ISR, 0.1);    
+}
+
+int main()
+{   
+    setup();
+        
+    while(1) {
+            while(!tick); // wait a timer interrupt
+      tick = false;
+            greenLED = LED_ON;
+
+            sensor.convert();
+            p = sensor.pressure; // pressure in mBar
+            t = sensor.temperature; // temperature in degC
+            h = (p - p0)/100; // depth in m
+            hmax = (h > hmax) ? h : hmax; // max depth
+/*        
+            if ((p - pp)/60 > descentSL)
+        redLED = LED_ON;
+            else
+                redLED = LED_OFF;
+        
+            if ((p - pp)/60 < -liftSL)
+                redLED = LED_ON;
+            else
+                redLED = LED_OFF;
+
+            pp = p;
+*/
+            sprintf(tmpstr, "%.1f mBar/%.1f m\r\n%.1f C", p, h, t);
+            pc.printf(tmpstr);//"%.3f\n", p);
+            pc.printf("\n");
+                    
+#if defined(DISPLAY_USES_SPI) || defined(DISPLAY_USES_I2C)
+      display.clearDisplay();
+      display.setTextCursor(0, 0);
+      display.printf("%s", tmpstr);
+      display.display();
+#endif
+      greenLED = LED_OFF;
+    }
+}
diff -r 000000000000 -r 6e3731afdabf mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 29 09:15:43 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34
\ No newline at end of file