Test with EzSbc2 LPC1347 board and Adafruit 0,96" display, connected to i2c
Dependencies: Adafruit_GFX I2CDevLib MPU9150 SmallGUI USBDevice WeeESP8266 mbed nRF24L01P
main.cpp@2:2eb3f38f9141, 2017-04-24 (annotated)
- Committer:
- JojoS
- Date:
- Mon Apr 24 16:24:46 2017 +0000
- Revision:
- 2:2eb3f38f9141
- Parent:
- 0:e1e154fcc87e
Testprogram for MPU9250 IMU sensor. Displays acceleration and gyro values on a SSD1306 OLED display.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JojoS | 0:e1e154fcc87e | 1 | #include "mbed.h" |
JojoS | 0:e1e154fcc87e | 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 "nRF24L01P.h" |
JojoS | 2:2eb3f38f9141 | 7 | |
JojoS | 2:2eb3f38f9141 | 8 | |
JojoS | 2:2eb3f38f9141 | 9 | |
JojoS | 2:2eb3f38f9141 | 10 | // #define USE_USBSERIAL |
JojoS | 2:2eb3f38f9141 | 11 | // #define USE_NRF |
JojoS | 0:e1e154fcc87e | 12 | |
JojoS | 0:e1e154fcc87e | 13 | // modified für EzSBC2 |
JojoS | 0:e1e154fcc87e | 14 | |
JojoS | 0:e1e154fcc87e | 15 | DigitalOut ledRed(P1_16); |
JojoS | 0:e1e154fcc87e | 16 | DigitalOut ledGreen(P1_15); |
JojoS | 0:e1e154fcc87e | 17 | |
JojoS | 2:2eb3f38f9141 | 18 | float sum = 0; |
JojoS | 2:2eb3f38f9141 | 19 | uint32_t sumCount = 0; |
JojoS | 2:2eb3f38f9141 | 20 | char buffer[14]; |
JojoS | 2:2eb3f38f9141 | 21 | |
JojoS | 2:2eb3f38f9141 | 22 | Timer t; |
JojoS | 2:2eb3f38f9141 | 23 | #ifdef USE_USBSERIAL |
JojoS | 2:2eb3f38f9141 | 24 | USBSerial pc; |
JojoS | 2:2eb3f38f9141 | 25 | #endif |
JojoS | 2:2eb3f38f9141 | 26 | |
JojoS | 2:2eb3f38f9141 | 27 | |
JojoS | 0:e1e154fcc87e | 28 | // an I2C sub-class that provides a constructed default |
JojoS | 0:e1e154fcc87e | 29 | class I2C2 : public I2C |
JojoS | 0:e1e154fcc87e | 30 | { |
JojoS | 0:e1e154fcc87e | 31 | public: |
JojoS | 2:2eb3f38f9141 | 32 | I2C2(PinName sda, PinName scl) : I2C(sda, scl) { |
JojoS | 0:e1e154fcc87e | 33 | frequency(400000); |
JojoS | 0:e1e154fcc87e | 34 | start(); |
JojoS | 0:e1e154fcc87e | 35 | }; |
JojoS | 0:e1e154fcc87e | 36 | }; |
JojoS | 2:2eb3f38f9141 | 37 | |
JojoS | 2:2eb3f38f9141 | 38 | #ifdef USE_NRF |
JojoS | 2:2eb3f38f9141 | 39 | nRF24L01P my_nrf24l01p(P0_9, P0_8, P1_29, P0_11, P0_7, P0_17); // mosi, miso, sck, csn, ce, irq |
JojoS | 2:2eb3f38f9141 | 40 | #endif |
JojoS | 0:e1e154fcc87e | 41 | |
JojoS | 0:e1e154fcc87e | 42 | I2C2 gI2C(P0_5, P0_4); |
JojoS | 2:2eb3f38f9141 | 43 | Adafruit_SSD1306_I2c gOled2(gI2C, NC, 0x78, 64, 128); |
JojoS | 2:2eb3f38f9141 | 44 | |
JojoS | 2:2eb3f38f9141 | 45 | I2Cdev i2Cdev; |
JojoS | 2:2eb3f38f9141 | 46 | MPU9150 mpu(i2Cdev); |
JojoS | 2:2eb3f38f9141 | 47 | |
JojoS | 2:2eb3f38f9141 | 48 | #define TRANSFER_SIZE 4 |
JojoS | 2:2eb3f38f9141 | 49 | |
JojoS | 0:e1e154fcc87e | 50 | int main() |
JojoS | 2:2eb3f38f9141 | 51 | { |
JojoS | 0:e1e154fcc87e | 52 | uint16_t x=0; |
JojoS | 2:2eb3f38f9141 | 53 | |
JojoS | 2:2eb3f38f9141 | 54 | uint16_t txData[2]; |
JojoS | 2:2eb3f38f9141 | 55 | |
JojoS | 2:2eb3f38f9141 | 56 | |
JojoS | 2:2eb3f38f9141 | 57 | #ifdef USE_NRF |
JojoS | 2:2eb3f38f9141 | 58 | my_nrf24l01p.powerUp(); |
JojoS | 2:2eb3f38f9141 | 59 | |
JojoS | 2:2eb3f38f9141 | 60 | // Display the (default) setup of the nRF24L01+ chip |
JojoS | 2:2eb3f38f9141 | 61 | //pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); |
JojoS | 2:2eb3f38f9141 | 62 | //pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); |
JojoS | 2:2eb3f38f9141 | 63 | //pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); |
JojoS | 2:2eb3f38f9141 | 64 | //pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); |
JojoS | 2:2eb3f38f9141 | 65 | //pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); |
JojoS | 2:2eb3f38f9141 | 66 | |
JojoS | 2:2eb3f38f9141 | 67 | //pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
JojoS | 2:2eb3f38f9141 | 68 | |
JojoS | 2:2eb3f38f9141 | 69 | my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); |
JojoS | 2:2eb3f38f9141 | 70 | |
JojoS | 2:2eb3f38f9141 | 71 | //my_nrf24l01p.setReceiveMode(); |
JojoS | 2:2eb3f38f9141 | 72 | my_nrf24l01p.setTransmitMode(); |
JojoS | 2:2eb3f38f9141 | 73 | my_nrf24l01p.enable(); |
JojoS | 2:2eb3f38f9141 | 74 | #endif |
JojoS | 2:2eb3f38f9141 | 75 | |
JojoS | 2:2eb3f38f9141 | 76 | //while(1) |
JojoS | 0:e1e154fcc87e | 77 | { |
JojoS | 0:e1e154fcc87e | 78 | ledRed = 1; |
JojoS | 0:e1e154fcc87e | 79 | ledGreen = 0; |
JojoS | 0:e1e154fcc87e | 80 | wait(0.5); |
JojoS | 0:e1e154fcc87e | 81 | |
JojoS | 0:e1e154fcc87e | 82 | ledRed = 0; |
JojoS | 0:e1e154fcc87e | 83 | ledGreen = 1; |
JojoS | 0:e1e154fcc87e | 84 | wait(0.5); |
JojoS | 0:e1e154fcc87e | 85 | } |
JojoS | 0:e1e154fcc87e | 86 | |
JojoS | 2:2eb3f38f9141 | 87 | int16_t y = 12; |
JojoS | 2:2eb3f38f9141 | 88 | int16_t ySize = 4; |
JojoS | 2:2eb3f38f9141 | 89 | int16_t yGap = 2; |
JojoS | 2:2eb3f38f9141 | 90 | |
JojoS | 2:2eb3f38f9141 | 91 | float scaleMin = SHRT_MIN * 0.5f; // fullscale = -1g |
JojoS | 2:2eb3f38f9141 | 92 | float scaleMax = SHRT_MAX * 0.5f; // fullscale = +1g |
JojoS | 2:2eb3f38f9141 | 93 | |
JojoS | 2:2eb3f38f9141 | 94 | Canvas canvasBG(gOled2); |
JojoS | 2:2eb3f38f9141 | 95 | barGraph bgAx(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 96 | canvasBG.addControl(bgAx); |
JojoS | 2:2eb3f38f9141 | 97 | bgAx.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 98 | y = y + ySize + yGap; |
JojoS | 2:2eb3f38f9141 | 99 | |
JojoS | 2:2eb3f38f9141 | 100 | barGraph bgAy(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 101 | canvasBG.addControl(bgAy); |
JojoS | 2:2eb3f38f9141 | 102 | bgAy.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 103 | y = y + ySize + yGap; |
JojoS | 2:2eb3f38f9141 | 104 | |
JojoS | 2:2eb3f38f9141 | 105 | barGraph bgAz(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 106 | canvasBG.addControl(bgAz); |
JojoS | 2:2eb3f38f9141 | 107 | bgAz.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 108 | y = y + ySize + yGap; |
JojoS | 2:2eb3f38f9141 | 109 | |
JojoS | 2:2eb3f38f9141 | 110 | barGraph bgGx(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 111 | canvasBG.addControl(bgGx); |
JojoS | 2:2eb3f38f9141 | 112 | bgGx.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 113 | y = y + ySize + yGap; |
JojoS | 2:2eb3f38f9141 | 114 | |
JojoS | 2:2eb3f38f9141 | 115 | barGraph bgGy(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 116 | canvasBG.addControl(bgGy); |
JojoS | 2:2eb3f38f9141 | 117 | bgGy.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 118 | y = y + ySize + yGap; |
JojoS | 2:2eb3f38f9141 | 119 | |
JojoS | 2:2eb3f38f9141 | 120 | barGraph bgGz(barGraph::bgHorizontal, 0, y, 127, y+ySize); |
JojoS | 2:2eb3f38f9141 | 121 | canvasBG.addControl(bgGz); |
JojoS | 2:2eb3f38f9141 | 122 | bgGz.setScale(scaleMin, scaleMax); |
JojoS | 2:2eb3f38f9141 | 123 | |
JojoS | 0:e1e154fcc87e | 124 | gOled2.clearDisplay(); |
JojoS | 0:e1e154fcc87e | 125 | gOled2.display(); |
JojoS | 0:e1e154fcc87e | 126 | |
JojoS | 0:e1e154fcc87e | 127 | //gOled2.setTextCursor(1, 0); |
JojoS | 0:e1e154fcc87e | 128 | gOled2.printf("%ux%u OLED Display\r\n", gOled2.width(), gOled2.height()); |
JojoS | 2:2eb3f38f9141 | 129 | |
JojoS | 2:2eb3f38f9141 | 130 | #ifdef USE_USBSERIAL |
JojoS | 2:2eb3f38f9141 | 131 | pc.printf("MPU6050 test\n\n"); |
JojoS | 2:2eb3f38f9141 | 132 | pc.printf("MPU6050 initialize \n"); |
JojoS | 2:2eb3f38f9141 | 133 | #endif |
JojoS | 2:2eb3f38f9141 | 134 | |
JojoS | 2:2eb3f38f9141 | 135 | int16_t ax, ay, az; |
JojoS | 2:2eb3f38f9141 | 136 | int16_t gx, gy, gz; |
JojoS | 2:2eb3f38f9141 | 137 | |
JojoS | 2:2eb3f38f9141 | 138 | mpu.initialize(); |
JojoS | 2:2eb3f38f9141 | 139 | |
JojoS | 2:2eb3f38f9141 | 140 | #ifdef USE_USBSERIAL |
JojoS | 2:2eb3f38f9141 | 141 | pc.printf("MPU6050 testConnection \n"); |
JojoS | 2:2eb3f38f9141 | 142 | #endif |
JojoS | 2:2eb3f38f9141 | 143 | |
JojoS | 2:2eb3f38f9141 | 144 | bool mpu6050TestResult = mpu.testConnection(); |
JojoS | 2:2eb3f38f9141 | 145 | |
JojoS | 2:2eb3f38f9141 | 146 | #ifdef USE_USBSERIAL |
JojoS | 2:2eb3f38f9141 | 147 | if(mpu6050TestResult) { |
JojoS | 2:2eb3f38f9141 | 148 | pc.printf("MPU6050 test passed \n"); |
JojoS | 2:2eb3f38f9141 | 149 | } else { |
JojoS | 2:2eb3f38f9141 | 150 | pc.printf("MPU6050 test failed \n"); |
JojoS | 2:2eb3f38f9141 | 151 | } |
JojoS | 2:2eb3f38f9141 | 152 | #endif |
JojoS | 2:2eb3f38f9141 | 153 | |
JojoS | 2:2eb3f38f9141 | 154 | char buffer[32]; |
JojoS | 2:2eb3f38f9141 | 155 | while(1) { |
JojoS | 0:e1e154fcc87e | 156 | ledRed = !ledRed; |
JojoS | 2:2eb3f38f9141 | 157 | gOled2.clearDisplay(); |
JojoS | 2:2eb3f38f9141 | 158 | |
JojoS | 2:2eb3f38f9141 | 159 | mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); |
JojoS | 2:2eb3f38f9141 | 160 | //writing current accelerometer and gyro position |
JojoS | 2:2eb3f38f9141 | 161 | //pc.printf("%d;%d;%d;%d;%d;%d\n",ax,ay,az,gx,gy,gz); |
JojoS | 2:2eb3f38f9141 | 162 | |
JojoS | 2:2eb3f38f9141 | 163 | if (0) { |
JojoS | 2:2eb3f38f9141 | 164 | sprintf(buffer, "%i %i %i", ax, ay, az); |
JojoS | 2:2eb3f38f9141 | 165 | } |
JojoS | 2:2eb3f38f9141 | 166 | |
JojoS | 2:2eb3f38f9141 | 167 | #ifdef USE_NRF |
JojoS | 2:2eb3f38f9141 | 168 | // Send the transmitbuffer via the nRF24L01+ |
JojoS | 2:2eb3f38f9141 | 169 | txData[0] = ax; |
JojoS | 2:2eb3f38f9141 | 170 | txData[1] = ay; |
JojoS | 2:2eb3f38f9141 | 171 | my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)txData, TRANSFER_SIZE ); |
JojoS | 2:2eb3f38f9141 | 172 | #endif |
JojoS | 2:2eb3f38f9141 | 173 | |
JojoS | 2:2eb3f38f9141 | 174 | |
JojoS | 2:2eb3f38f9141 | 175 | gOled2.setTextCursor(0, 0); |
JojoS | 2:2eb3f38f9141 | 176 | //gOled2.printf("wifi ok: %u\r", wifiOk); |
JojoS | 2:2eb3f38f9141 | 177 | |
JojoS | 2:2eb3f38f9141 | 178 | bgAx.setValue(ax); |
JojoS | 2:2eb3f38f9141 | 179 | bgAy.setValue(ay); |
JojoS | 2:2eb3f38f9141 | 180 | bgAz.setValue(az); |
JojoS | 2:2eb3f38f9141 | 181 | |
JojoS | 2:2eb3f38f9141 | 182 | bgGx.setValue(gx); |
JojoS | 2:2eb3f38f9141 | 183 | bgGy.setValue(gy); |
JojoS | 2:2eb3f38f9141 | 184 | bgGz.setValue(gz); |
JojoS | 2:2eb3f38f9141 | 185 | |
JojoS | 2:2eb3f38f9141 | 186 | canvasBG.draw(); |
JojoS | 2:2eb3f38f9141 | 187 | |
JojoS | 0:e1e154fcc87e | 188 | gOled2.display(); |
JojoS | 2:2eb3f38f9141 | 189 | |
JojoS | 0:e1e154fcc87e | 190 | x++; |
JojoS | 2:2eb3f38f9141 | 191 | //wait(0.01); |
JojoS | 0:e1e154fcc87e | 192 | } |
JojoS | 0:e1e154fcc87e | 193 | } |