A quick and dirty demo of the Xadow M0 acceleromoeter values displayed on the Xadow OLED 0.96" (using the SSD1308 128x64 OLED Driver with I2C interface library).

Dependencies:   mbed SSD1308_128x64_I2C_opt XadowGPS BMP180 ADXL345_I2C MPU9250 USBDevice

Revision:
2:7abdbccdf0c8
Parent:
0:b017c907d53d
Child:
5:50051611b5bd
--- a/main.cpp	Wed Aug 20 09:13:25 2014 +0000
+++ b/main.cpp	Tue Jan 05 13:25:28 2016 +0000
@@ -1,6 +1,10 @@
-#include "ADXL345_I2C.h"
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
 
-#define DEBUG
+#include "ADXL345_I2C.h"
+#include "SSD1308.h"
+
+//#define DEBUG
 
 #ifdef DEBUG
 #include "USBSerial.h"                       // To use USB virtual serial, a driver is needed, check http://mbed.org/handbook/USBSerial
@@ -10,14 +14,44 @@
 #define LOG(args...)
 #endif
 
+#define MAX_ACC_AXIS 3
 ADXL345_I2C accelerometer(P0_5, P0_4);
 
+// Xhadow - OLED 128x64 is connected with I2C
+I2C i2c(P0_5, P0_4);    // SDA, SCL
+SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
+
+AnalogIn AD00(P0_11);
+AnalogIn AD01(P0_12);
+AnalogIn ChargerStatus(P0_13);      // ADC input from VCC through a 200K/200K divider with extara 100K pull down on !DONE and 49.9K on !CHRG 
+
+DigitalOut blue_led(P0_20, 0);
+DigitalOut white_led(P0_23, 1);
+DigitalOut Bus3V3En(P0_14, 1);      // Pin that controls the BUS-3V3 (3.3V) regulator output to the Xadow Bus
+
+InterruptIn test_int(P0_7);
+
+void test_pin_int(void)
+{
+    white_led = !white_led;
+    Bus3V3En = !Bus3V3En;
+}
+
 int main()
 {
-    int readings[3] = {0, 0, 0};
+    int readings[MAX_ACC_AXIS] = {0, 0, 0};
+    int MAXreadings[MAX_ACC_AXIS] = {INT16_MIN, INT16_MIN, INT16_MIN};
+    int MINreadings[MAX_ACC_AXIS] = {INT16_MAX, INT16_MAX, INT16_MAX};
+
+    char display_buf[17];
+    
+    test_int.rise(test_pin_int);
 
     LOG("Starting ADXL345 test...\n");
     LOG("Device ID is: 0x%02x\n", accelerometer.getDeviceID());
+
+    oled.writeString(0, 0, "Accelerometer:");
+    oled.writeString(1, 0, "  Curr  Min  Max");
  
     //Go into standby mode to configure the device.
     accelerometer.setPowerControl(0x00);
@@ -33,7 +67,39 @@
 
     while (1) {
         accelerometer.getOutput(readings);
-        LOG("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
+        
+        for (int i=0; i<MAX_ACC_AXIS; ++i) {
+            if ((int16_t)readings[i] > (int16_t)MAXreadings[i]) {
+                MAXreadings[i] = readings[i];    
+            }
+            if ((int16_t)readings[i] < (int16_t)MINreadings[i]) {
+                MINreadings[i] = readings[i];    
+            }
+            
+            snprintf(display_buf, sizeof(display_buf), "%c%5i%5i%5i",
+                     'X'+i, (int16_t)readings[i], (int16_t)MINreadings[i], (int16_t)MAXreadings[i] );
+            oled.writeString(2+i, 0, display_buf);
+            LOG("%c:%i|%i|%i\r\n", 'X'+i, (int16_t)readings[i], (int16_t)MINreadings[i], (int16_t)MAXreadings[i] );
+        }
+        
+/*        snprintf(display_buf, sizeof(display_buf), "Ch: %u", ChargerStatus.read_u16());
+        oled.writeString(2+MAX_ACC_AXIS, 0, display_buf);
+
+        snprintf(display_buf, sizeof(display_buf), "Ch: %f", 3.3*(float)ChargerStatus.read_u16()/UINT16_MAX);
+        oled.writeString(2+MAX_ACC_AXIS+1, 0, display_buf);
+*/        
+        snprintf(display_buf, sizeof(display_buf), "Bat:%.2fV", 3.3*ChargerStatus);
+        oled.writeString(2+MAX_ACC_AXIS+2, 0, display_buf);
+        
+        LOG("Ch: %f\r\n", ChargerStatus.read());
+        LOG("Chu: %u\r\n", ChargerStatus.read_u16());
+        LOG("A0: %f\r\n", (float)AD00.read());
+        LOG("A1: %f\r\n", AD01.read());
+        
+        blue_led = !blue_led;
+ //       white_led = !white_led;   // toggled by pin P0_7 interrupt
+ 
+//        deepsleep();  // Deep sleep until external interrupt  // The wakeup pin on Xadow is on the sme buton at RESET - no good.
         
         wait(1);
     }