Test with EzSbc2 LPC1347 board and Adafruit 0,96" display, connected to i2c
Dependencies: Adafruit_GFX I2CDevLib MPU9150 SmallGUI USBDevice WeeESP8266 mbed nRF24L01P
main.txt@3:8d93e16c38a6, 2017-04-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |