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

Dependencies:   Adafruit_GFX I2CDevLib MPU9150 SmallGUI USBDevice WeeESP8266 mbed nRF24L01P

Committer:
JojoS
Date:
Mon Apr 24 16:30:28 2017 +0000
Revision:
3:8d93e16c38a6
Parent:
2:2eb3f38f9141
Test program for MPU8250 IMU sensor. Shows bar graphs with acceleration and gyro values on a SSD1306 OLED.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JojoS 2:2eb3f38f9141 1 #include "mbed.h"
JojoS 2:2eb3f38f9141 2 #include "Adafruit_SSD1306.h"
JojoS 2:2eb3f38f9141 3 #include "MPU9150.h"
JojoS 2:2eb3f38f9141 4 #include "USBSerial.h"
JojoS 2:2eb3f38f9141 5 #include "Controls.h"
JojoS 2:2eb3f38f9141 6 #include "ArduinoAPI.h"
JojoS 2:2eb3f38f9141 7 #include "ESP8266.h"
JojoS 2:2eb3f38f9141 8
JojoS 2:2eb3f38f9141 9
JojoS 2:2eb3f38f9141 10 //#define USE_USBSERIAL
JojoS 2:2eb3f38f9141 11
JojoS 2:2eb3f38f9141 12 // modified für EzSBC2
JojoS 2:2eb3f38f9141 13
JojoS 2:2eb3f38f9141 14 DigitalOut ledRed(P1_16);
JojoS 2:2eb3f38f9141 15 DigitalOut ledGreen(P1_15);
JojoS 2:2eb3f38f9141 16
JojoS 2:2eb3f38f9141 17 float sum = 0;
JojoS 2:2eb3f38f9141 18 uint32_t sumCount = 0;
JojoS 2:2eb3f38f9141 19 char buffer[14];
JojoS 2:2eb3f38f9141 20
JojoS 2:2eb3f38f9141 21 Timer t;
JojoS 2:2eb3f38f9141 22 #ifdef USE_USBSERIAL
JojoS 2:2eb3f38f9141 23 USBSerial pc;
JojoS 2:2eb3f38f9141 24 #endif
JojoS 2:2eb3f38f9141 25
JojoS 2:2eb3f38f9141 26 // an SPI sub-class that provides a constructed default
JojoS 2:2eb3f38f9141 27 class SPI2 : public SPI
JojoS 2:2eb3f38f9141 28 {
JojoS 2:2eb3f38f9141 29 public:
JojoS 2:2eb3f38f9141 30 SPI2(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) {
JojoS 2:2eb3f38f9141 31 format(8,3);
JojoS 2:2eb3f38f9141 32 frequency(2000000);
JojoS 2:2eb3f38f9141 33 };
JojoS 2:2eb3f38f9141 34 };
JojoS 2:2eb3f38f9141 35
JojoS 2:2eb3f38f9141 36 // an I2C sub-class that provides a constructed default
JojoS 2:2eb3f38f9141 37 class I2C2 : public I2C
JojoS 2:2eb3f38f9141 38 {
JojoS 2:2eb3f38f9141 39 public:
JojoS 2:2eb3f38f9141 40 I2C2(PinName sda, PinName scl) : I2C(sda, scl) {
JojoS 2:2eb3f38f9141 41 frequency(400000);
JojoS 2:2eb3f38f9141 42 start();
JojoS 2:2eb3f38f9141 43 };
JojoS 2:2eb3f38f9141 44 };
JojoS 2:2eb3f38f9141 45
JojoS 2:2eb3f38f9141 46
JojoS 2:2eb3f38f9141 47 I2C2 gI2C(P0_5, P0_4);
JojoS 2:2eb3f38f9141 48 Adafruit_SSD1306_I2c gOled2(gI2C, NC, 0x78, 64, 128);
JojoS 2:2eb3f38f9141 49 I2Cdev i2Cdev;
JojoS 2:2eb3f38f9141 50 MPU9150 mpu(i2Cdev);
JojoS 2:2eb3f38f9141 51
JojoS 2:2eb3f38f9141 52 ArduinoSerial esp_uart(P1_13, P1_14);
JojoS 2:2eb3f38f9141 53 ESP8266 wifi(esp_uart, 115200);
JojoS 2:2eb3f38f9141 54
JojoS 2:2eb3f38f9141 55 int main()
JojoS 2:2eb3f38f9141 56 {
JojoS 2:2eb3f38f9141 57 uint16_t x=0;
JojoS 2:2eb3f38f9141 58
JojoS 2:2eb3f38f9141 59 //while(1)
JojoS 2:2eb3f38f9141 60 {
JojoS 2:2eb3f38f9141 61 ledRed = 1;
JojoS 2:2eb3f38f9141 62 ledGreen = 0;
JojoS 2:2eb3f38f9141 63 wait(0.5);
JojoS 2:2eb3f38f9141 64
JojoS 2:2eb3f38f9141 65 ledRed = 0;
JojoS 2:2eb3f38f9141 66 ledGreen = 1;
JojoS 2:2eb3f38f9141 67 wait(0.5);
JojoS 2:2eb3f38f9141 68 }
JojoS 2:2eb3f38f9141 69
JojoS 2:2eb3f38f9141 70 int16_t y = 12;
JojoS 2:2eb3f38f9141 71 int16_t ySize = 4;
JojoS 2:2eb3f38f9141 72 int16_t yGap = 2;
JojoS 2:2eb3f38f9141 73
JojoS 2:2eb3f38f9141 74 Canvas canvasBG(gOled2);
JojoS 2:2eb3f38f9141 75 barGraph bgAx(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 76 canvasBG.addControl(bgAx);
JojoS 2:2eb3f38f9141 77 bgAx.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 78 y = y + ySize + yGap;
JojoS 2:2eb3f38f9141 79
JojoS 2:2eb3f38f9141 80 barGraph bgAy(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 81 canvasBG.addControl(bgAy);
JojoS 2:2eb3f38f9141 82 bgAy.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 83 y = y + ySize + yGap;
JojoS 2:2eb3f38f9141 84
JojoS 2:2eb3f38f9141 85 barGraph bgAz(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 86 canvasBG.addControl(bgAz);
JojoS 2:2eb3f38f9141 87 bgAz.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 88 y = y + ySize + yGap;
JojoS 2:2eb3f38f9141 89
JojoS 2:2eb3f38f9141 90 barGraph bgGx(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 91 canvasBG.addControl(bgGx);
JojoS 2:2eb3f38f9141 92 bgGx.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 93 y = y + ySize + yGap;
JojoS 2:2eb3f38f9141 94
JojoS 2:2eb3f38f9141 95 barGraph bgGy(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 96 canvasBG.addControl(bgGy);
JojoS 2:2eb3f38f9141 97 bgGy.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 98 y = y + ySize + yGap;
JojoS 2:2eb3f38f9141 99
JojoS 2:2eb3f38f9141 100 barGraph bgGz(barGraph::bgHorizontal, 0, y, 127, y+ySize);
JojoS 2:2eb3f38f9141 101 canvasBG.addControl(bgGz);
JojoS 2:2eb3f38f9141 102 bgGz.setScale(-16383.0f, 16384.0f);
JojoS 2:2eb3f38f9141 103
JojoS 2:2eb3f38f9141 104 gOled2.clearDisplay();
JojoS 2:2eb3f38f9141 105 gOled2.display();
JojoS 2:2eb3f38f9141 106
JojoS 2:2eb3f38f9141 107 //gOled2.setTextCursor(1, 0);
JojoS 2:2eb3f38f9141 108 gOled2.printf("%ux%u OLED Display\r\n", gOled2.width(), gOled2.height());
JojoS 2:2eb3f38f9141 109
JojoS 2:2eb3f38f9141 110 #ifdef USE_USBSERIAL
JojoS 2:2eb3f38f9141 111 pc.printf("MPU6050 test\n\n");
JojoS 2:2eb3f38f9141 112 pc.printf("MPU6050 initialize \n");
JojoS 2:2eb3f38f9141 113 #endif
JojoS 2:2eb3f38f9141 114
JojoS 2:2eb3f38f9141 115 int16_t ax, ay, az;
JojoS 2:2eb3f38f9141 116 int16_t gx, gy, gz;
JojoS 2:2eb3f38f9141 117
JojoS 2:2eb3f38f9141 118 mpu.initialize();
JojoS 2:2eb3f38f9141 119
JojoS 2:2eb3f38f9141 120 #ifdef USE_USBSERIAL
JojoS 2:2eb3f38f9141 121 pc.printf("MPU6050 testConnection \n");
JojoS 2:2eb3f38f9141 122 #endif
JojoS 2:2eb3f38f9141 123
JojoS 2:2eb3f38f9141 124 bool mpu6050TestResult = mpu.testConnection();
JojoS 2:2eb3f38f9141 125
JojoS 2:2eb3f38f9141 126 #ifdef USE_USBSERIAL
JojoS 2:2eb3f38f9141 127 if(mpu6050TestResult) {
JojoS 2:2eb3f38f9141 128 pc.printf("MPU6050 test passed \n");
JojoS 2:2eb3f38f9141 129 } else {
JojoS 2:2eb3f38f9141 130 pc.printf("MPU6050 test failed \n");
JojoS 2:2eb3f38f9141 131 }
JojoS 2:2eb3f38f9141 132 #endif
JojoS 2:2eb3f38f9141 133
JojoS 2:2eb3f38f9141 134 bool wifiOk = false;
JojoS 2:2eb3f38f9141 135 // wifi connect
JojoS 2:2eb3f38f9141 136 {
JojoS 2:2eb3f38f9141 137 wifiOk = wifi.setOprToStationSoftAP();
JojoS 2:2eb3f38f9141 138
JojoS 2:2eb3f38f9141 139 if (wifiOk)
JojoS 2:2eb3f38f9141 140 wifiOk = wifi.joinAP("JojosWLan2", "1883057324535716");
JojoS 2:2eb3f38f9141 141
JojoS 2:2eb3f38f9141 142 if (wifiOk)
JojoS 2:2eb3f38f9141 143 wifiOk = wifi.disableMUX();
JojoS 2:2eb3f38f9141 144 //wifiOk = wifi.enableMUX();
JojoS 2:2eb3f38f9141 145
JojoS 2:2eb3f38f9141 146 if (wifiOk)
JojoS 2:2eb3f38f9141 147 wifiOk = wifi.registerUDP("192.168.100.74", 8090);
JojoS 2:2eb3f38f9141 148
JojoS 2:2eb3f38f9141 149 }
JojoS 2:2eb3f38f9141 150
JojoS 2:2eb3f38f9141 151 char buffer[32];
JojoS 2:2eb3f38f9141 152 while(1) {
JojoS 2:2eb3f38f9141 153 ledRed = !ledRed;
JojoS 2:2eb3f38f9141 154 gOled2.clearDisplay();
JojoS 2:2eb3f38f9141 155
JojoS 2:2eb3f38f9141 156 mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
JojoS 2:2eb3f38f9141 157 //writing current accelerometer and gyro position
JojoS 2:2eb3f38f9141 158 //pc.printf("%d;%d;%d;%d;%d;%d\n",ax,ay,az,gx,gy,gz);
JojoS 2:2eb3f38f9141 159
JojoS 2:2eb3f38f9141 160 if (wifiOk) {
JojoS 2:2eb3f38f9141 161 sprintf(buffer, "%i %i %i", ax, ay, az);
JojoS 2:2eb3f38f9141 162 wifi.send((const uint8_t*)buffer, strlen(buffer));
JojoS 2:2eb3f38f9141 163 }
JojoS 2:2eb3f38f9141 164
JojoS 2:2eb3f38f9141 165 gOled2.setTextCursor(0, 0);
JojoS 2:2eb3f38f9141 166 gOled2.printf("wifi ok: %u\r", wifiOk);
JojoS 2:2eb3f38f9141 167
JojoS 2:2eb3f38f9141 168 bgAx.setValue(ax);
JojoS 2:2eb3f38f9141 169 bgAy.setValue(ay);
JojoS 2:2eb3f38f9141 170 bgAz.setValue(az);
JojoS 2:2eb3f38f9141 171
JojoS 2:2eb3f38f9141 172 bgGx.setValue(gx);
JojoS 2:2eb3f38f9141 173 bgGy.setValue(gy);
JojoS 2:2eb3f38f9141 174 bgGz.setValue(gz);
JojoS 2:2eb3f38f9141 175
JojoS 2:2eb3f38f9141 176 canvasBG.draw();
JojoS 2:2eb3f38f9141 177
JojoS 2:2eb3f38f9141 178 gOled2.display();
JojoS 2:2eb3f38f9141 179
JojoS 2:2eb3f38f9141 180 x++;
JojoS 2:2eb3f38f9141 181 //wait(0.1);
JojoS 2:2eb3f38f9141 182 }
JojoS 2:2eb3f38f9141 183 }