Test with EzSbc2 LPC1347 board and Adafruit 0,96" display, connected to i2c

Dependencies:   Adafruit_GFX I2CDevLib MPU9150 SmallGUI USBDevice WeeESP8266 mbed nRF24L01P

Revision:
2:2eb3f38f9141
Parent:
0:e1e154fcc87e
--- a/main.cpp	Mon Nov 17 23:01:56 2014 +0000
+++ b/main.cpp	Mon Apr 24 16:24:46 2017 +0000
@@ -1,44 +1,79 @@
 #include "mbed.h"
 #include "Adafruit_SSD1306.h"
- 
+#include "MPU9150.h"
+#include "USBSerial.h"
+#include "Controls.h"
+#include "nRF24L01P.h"
+
+
+
+// #define USE_USBSERIAL
+// #define USE_NRF
 
 // modified für EzSBC2
 
 DigitalOut ledRed(P1_16);
 DigitalOut ledGreen(P1_15);
 
-// an SPI sub-class that provides a constructed default
-class SPI2 : public SPI
-{
-public:
-    SPI2(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk)
-    {
-        format(8,3);
-        frequency(2000000);
-    };
-};
- 
+float sum = 0;
+uint32_t sumCount = 0;
+char buffer[14];
+
+Timer t;
+#ifdef USE_USBSERIAL
+USBSerial pc;
+#endif
+
+
 // an I2C sub-class that provides a constructed default
 class I2C2 : public I2C
 {
 public:
-    I2C2(PinName sda, PinName scl) : I2C(sda, scl)
-    {
+    I2C2(PinName sda, PinName scl) : I2C(sda, scl) {
         frequency(400000);
         start();
     };
 };
- 
+
+#ifdef USE_NRF
+nRF24L01P my_nrf24l01p(P0_9, P0_8, P1_29, P0_11, P0_7, P0_17);    // mosi, miso, sck, csn, ce, irq
+#endif
 
 I2C2 gI2C(P0_5, P0_4);
-Adafruit_SSD1306_I2c gOled2(gI2C, P0_21, 0x78, 64, 128);
-// Adafruit_SSD1306_I2c gOled2(gI2C, NC, 0x78, 64, 128);    // works only with mbed libs < version 86
- 
+Adafruit_SSD1306_I2c gOled2(gI2C, NC, 0x78, 64, 128);
+
+I2Cdev  i2Cdev;
+MPU9150 mpu(i2Cdev);
+
+#define TRANSFER_SIZE   4
+
 int main()
-{   
+{
     uint16_t x=0;
- 
-    //while(1) 
+
+    uint16_t txData[2];
+    
+
+#ifdef USE_NRF
+    my_nrf24l01p.powerUp();
+
+    // Display the (default) setup of the nRF24L01+ chip
+    //pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
+    //pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
+    //pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
+    //pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
+    //pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
+
+    //pc.printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
+
+    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
+
+    //my_nrf24l01p.setReceiveMode();
+    my_nrf24l01p.setTransmitMode();
+    my_nrf24l01p.enable();
+#endif
+
+    //while(1)
     {
         ledRed = 1;
         ledGreen = 0;
@@ -49,24 +84,110 @@
         wait(0.5);
     }
 
+    int16_t y = 12;
+    int16_t ySize = 4;
+    int16_t yGap = 2;
+    
+    float   scaleMin = SHRT_MIN * 0.5f;     // fullscale = -1g
+    float   scaleMax = SHRT_MAX * 0.5f;     // fullscale = +1g
+
+    Canvas canvasBG(gOled2);
+    barGraph bgAx(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgAx);
+    bgAx.setScale(scaleMin, scaleMax);
+    y = y + ySize + yGap;
+
+    barGraph bgAy(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgAy);
+    bgAy.setScale(scaleMin, scaleMax);
+    y = y + ySize + yGap;
+
+    barGraph bgAz(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgAz);
+    bgAz.setScale(scaleMin, scaleMax);
+    y = y + ySize + yGap;
+
+    barGraph bgGx(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgGx);
+    bgGx.setScale(scaleMin, scaleMax);
+    y = y + ySize + yGap;
+
+    barGraph bgGy(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgGy);
+    bgGy.setScale(scaleMin, scaleMax);
+    y = y + ySize + yGap;
+
+    barGraph bgGz(barGraph::bgHorizontal, 0, y, 127, y+ySize);
+    canvasBG.addControl(bgGz);
+    bgGz.setScale(scaleMin, scaleMax);
+
     gOled2.clearDisplay();
     gOled2.display();
 
     //gOled2.setTextCursor(1, 0);
     gOled2.printf("%ux%u OLED Display\r\n", gOled2.width(), gOled2.height());
-    
-    while(1)
-    {
+
+#ifdef USE_USBSERIAL
+    pc.printf("MPU6050 test\n\n");
+    pc.printf("MPU6050 initialize \n");
+#endif
+
+    int16_t ax, ay, az;
+    int16_t gx, gy, gz;
+
+    mpu.initialize();
+
+#ifdef USE_USBSERIAL
+    pc.printf("MPU6050 testConnection \n");
+#endif
+
+    bool mpu6050TestResult = mpu.testConnection();
+
+#ifdef USE_USBSERIAL
+    if(mpu6050TestResult) {
+        pc.printf("MPU6050 test passed \n");
+    } else {
+        pc.printf("MPU6050 test failed \n");
+    }
+#endif
+
+    char buffer[32];
+    while(1) {
         ledRed = !ledRed;
-        
-        gOled2.setTextCursor(0, 10);
-        gOled2.printf("%u\r", x);
+        gOled2.clearDisplay();
+
+        mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
+        //writing current accelerometer and gyro position
+        //pc.printf("%d;%d;%d;%d;%d;%d\n",ax,ay,az,gx,gy,gz);
+
+        if (0) {
+            sprintf(buffer, "%i %i %i", ax, ay, az);
+        }
+
+#ifdef USE_NRF
+        // Send the transmitbuffer via the nRF24L01+
+        txData[0] = ax;
+        txData[1] = ay;
+        my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)txData, TRANSFER_SIZE );
+#endif
+
+
+        gOled2.setTextCursor(0, 0);
+        //gOled2.printf("wifi ok: %u\r", wifiOk);
+
+        bgAx.setValue(ax);
+        bgAy.setValue(ay);
+        bgAz.setValue(az);
+
+        bgGx.setValue(gx);
+        bgGy.setValue(gy);
+        bgGz.setValue(gz);
+
+        canvasBG.draw();
+
         gOled2.display();
-        
+
         x++;
-        wait(1.0);
+        //wait(0.01);
     }
-// AnalogOut sine(PA_4);
-
-   
 }