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: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?

UserRevisionLine numberNew 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 }