Sample program of sakura.io Evalution board.
Dependencies: AQM0802A BME280 MPU9250_SPI SakuraIO gps mbed
Fork of SakuraIO_Evaluation_Board_Standard by
main.cpp@0:db3ec2781484, 2017-09-07 (annotated)
- Committer:
- misodengaku
- Date:
- Thu Sep 07 08:32:10 2017 +0000
- Revision:
- 0:db3ec2781484
- Child:
- 1:faf04d99f302
init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
misodengaku | 0:db3ec2781484 | 1 | #include <mbed.h> |
misodengaku | 0:db3ec2781484 | 2 | #include <AQM0802A.h> |
misodengaku | 0:db3ec2781484 | 3 | #include <BME280.h> |
misodengaku | 0:db3ec2781484 | 4 | #include <MPU9250.h> |
misodengaku | 0:db3ec2781484 | 5 | #include <SakuraIO.h> |
misodengaku | 0:db3ec2781484 | 6 | #include "SakuraPinNames.h" |
misodengaku | 0:db3ec2781484 | 7 | #include "sensors.h" |
misodengaku | 0:db3ec2781484 | 8 | |
misodengaku | 0:db3ec2781484 | 9 | // Serial over CMSIS_DAP |
misodengaku | 0:db3ec2781484 | 10 | Serial pc(DAP_UART_TX, DAP_UART_RX, 9600); |
misodengaku | 0:db3ec2781484 | 11 | |
misodengaku | 0:db3ec2781484 | 12 | // GPS |
misodengaku | 0:db3ec2781484 | 13 | Serial gps(GPS_TX, GPS_RX, 9600); |
misodengaku | 0:db3ec2781484 | 14 | DigitalOut gps_en(GPS_EN); |
misodengaku | 0:db3ec2781484 | 15 | |
misodengaku | 0:db3ec2781484 | 16 | // LED |
misodengaku | 0:db3ec2781484 | 17 | DigitalOut led_1(LED1); |
misodengaku | 0:db3ec2781484 | 18 | DigitalOut led_2(LED2); |
misodengaku | 0:db3ec2781484 | 19 | DigitalOut led_3(LED3); |
misodengaku | 0:db3ec2781484 | 20 | DigitalOut led_4(LED4); |
misodengaku | 0:db3ec2781484 | 21 | |
misodengaku | 0:db3ec2781484 | 22 | // LCD backlight |
misodengaku | 0:db3ec2781484 | 23 | DigitalOut lcd_led(LED_LCD); |
misodengaku | 0:db3ec2781484 | 24 | |
misodengaku | 0:db3ec2781484 | 25 | // Switch |
misodengaku | 0:db3ec2781484 | 26 | DigitalIn sw_1(SW1); |
misodengaku | 0:db3ec2781484 | 27 | DigitalIn sw_2(SW2); |
misodengaku | 0:db3ec2781484 | 28 | DigitalIn sw_3(SW3); |
misodengaku | 0:db3ec2781484 | 29 | DigitalIn sw_4(SW4); |
misodengaku | 0:db3ec2781484 | 30 | DigitalIn sw_5(SW5); |
misodengaku | 0:db3ec2781484 | 31 | DigitalIn sw_6(SW6); |
misodengaku | 0:db3ec2781484 | 32 | |
misodengaku | 0:db3ec2781484 | 33 | // Internal I2C |
misodengaku | 0:db3ec2781484 | 34 | I2C internal_i2c(I2C_INTERNAL_SDA, I2C_INTERNAL_SCL); |
misodengaku | 0:db3ec2781484 | 35 | AQM0802A lcd(internal_i2c); |
misodengaku | 0:db3ec2781484 | 36 | BME280 bme280(internal_i2c); |
misodengaku | 0:db3ec2781484 | 37 | |
misodengaku | 0:db3ec2781484 | 38 | // SPI |
misodengaku | 0:db3ec2781484 | 39 | SPI internal_mpu9250_spi(SPI_MPU_MOSI, SPI_MPU_MISO, SPI_MPU_SCK); |
misodengaku | 0:db3ec2781484 | 40 | mpu9250_spi mpu9250(internal_mpu9250_spi, SPI_MPU_CS); |
misodengaku | 0:db3ec2781484 | 41 | |
misodengaku | 0:db3ec2781484 | 42 | // sakura.io |
misodengaku | 0:db3ec2781484 | 43 | SakuraIO_I2C sakuraio(I2C_SDA, I2C_SCL); |
misodengaku | 0:db3ec2781484 | 44 | |
misodengaku | 0:db3ec2781484 | 45 | SensorData sensor_data; |
misodengaku | 0:db3ec2781484 | 46 | |
misodengaku | 0:db3ec2781484 | 47 | |
misodengaku | 0:db3ec2781484 | 48 | void setup() |
misodengaku | 0:db3ec2781484 | 49 | { |
misodengaku | 0:db3ec2781484 | 50 | lcd_led = 1; |
misodengaku | 0:db3ec2781484 | 51 | pc.printf("Hello World !\r\n"); |
misodengaku | 0:db3ec2781484 | 52 | lcd.cls(); |
misodengaku | 0:db3ec2781484 | 53 | lcd.printf("Hello"); |
misodengaku | 0:db3ec2781484 | 54 | |
misodengaku | 0:db3ec2781484 | 55 | // Initialize sensors |
misodengaku | 0:db3ec2781484 | 56 | bme280.initialize(); |
misodengaku | 0:db3ec2781484 | 57 | pc.printf("BME280 ok.\r\n"); |
misodengaku | 0:db3ec2781484 | 58 | mpu9250.init(1, BITS_DLPF_CFG_188HZ); |
misodengaku | 0:db3ec2781484 | 59 | pc.printf("MPU9250 ok. WHOAMI=%02x\r\n", mpu9250.whoami()); |
misodengaku | 0:db3ec2781484 | 60 | if (mpu9250.whoami() != 0x71) { |
misodengaku | 0:db3ec2781484 | 61 | pc.printf("[ERROR] MPU9250 init fail.\r\n"); |
misodengaku | 0:db3ec2781484 | 62 | } |
misodengaku | 0:db3ec2781484 | 63 | |
misodengaku | 0:db3ec2781484 | 64 | mpu9250.set_gyro_scale(BITS_FS_2000DPS); //Set full scale range for gyros |
misodengaku | 0:db3ec2781484 | 65 | mpu9250.set_acc_scale(BITS_FS_16G); //Set full scale range for accs |
misodengaku | 0:db3ec2781484 | 66 | mpu9250.calib_acc(); |
misodengaku | 0:db3ec2781484 | 67 | mpu9250.AK8963_calib_Magnetometer(); |
misodengaku | 0:db3ec2781484 | 68 | |
misodengaku | 0:db3ec2781484 | 69 | gps_en = 1; |
misodengaku | 0:db3ec2781484 | 70 | } |
misodengaku | 0:db3ec2781484 | 71 | |
misodengaku | 0:db3ec2781484 | 72 | void read_sensor_data() |
misodengaku | 0:db3ec2781484 | 73 | { |
misodengaku | 0:db3ec2781484 | 74 | sensor_data.bme280.temperature = bme280.getTemperature(); |
misodengaku | 0:db3ec2781484 | 75 | sensor_data.bme280.pressure = bme280.getPressure(); |
misodengaku | 0:db3ec2781484 | 76 | sensor_data.bme280.humidity = bme280.getHumidity(); |
misodengaku | 0:db3ec2781484 | 77 | |
misodengaku | 0:db3ec2781484 | 78 | mpu9250.read_all(); |
misodengaku | 0:db3ec2781484 | 79 | sensor_data.mpu9250.temperature = mpu9250.Temperature; |
misodengaku | 0:db3ec2781484 | 80 | for (int i = 0; i < 3; i++) { |
misodengaku | 0:db3ec2781484 | 81 | sensor_data.mpu9250.accelerometer[i] = mpu9250.accelerometer_data[i]; |
misodengaku | 0:db3ec2781484 | 82 | sensor_data.mpu9250.gyroscope[i] = mpu9250.gyroscope_data[i]; |
misodengaku | 0:db3ec2781484 | 83 | sensor_data.mpu9250.magnetometer[i] = mpu9250.Magnetometer[i]; |
misodengaku | 0:db3ec2781484 | 84 | } |
misodengaku | 0:db3ec2781484 | 85 | } |
misodengaku | 0:db3ec2781484 | 86 | |
misodengaku | 0:db3ec2781484 | 87 | void enqueue_sensor_data(int counter) |
misodengaku | 0:db3ec2781484 | 88 | { |
misodengaku | 0:db3ec2781484 | 89 | sakuraio.enqueueTx(0, counter); |
misodengaku | 0:db3ec2781484 | 90 | sakuraio.enqueueTx(1, sensor_data.bme280.temperature); |
misodengaku | 0:db3ec2781484 | 91 | sakuraio.enqueueTx(2, sensor_data.bme280.pressure); |
misodengaku | 0:db3ec2781484 | 92 | sakuraio.enqueueTx(3, sensor_data.bme280.humidity); |
misodengaku | 0:db3ec2781484 | 93 | |
misodengaku | 0:db3ec2781484 | 94 | sakuraio.enqueueTx(4, sensor_data.mpu9250.temperature); // これいる? |
misodengaku | 0:db3ec2781484 | 95 | sakuraio.enqueueTx(5, sensor_data.mpu9250.accelerometer[0]); |
misodengaku | 0:db3ec2781484 | 96 | sakuraio.enqueueTx(6, sensor_data.mpu9250.accelerometer[1]); |
misodengaku | 0:db3ec2781484 | 97 | sakuraio.enqueueTx(7, sensor_data.mpu9250.accelerometer[2]); |
misodengaku | 0:db3ec2781484 | 98 | sakuraio.enqueueTx(8, sensor_data.mpu9250.gyroscope[0]); |
misodengaku | 0:db3ec2781484 | 99 | sakuraio.enqueueTx(9, sensor_data.mpu9250.gyroscope[1]); |
misodengaku | 0:db3ec2781484 | 100 | sakuraio.enqueueTx(10, sensor_data.mpu9250.gyroscope[2]); |
misodengaku | 0:db3ec2781484 | 101 | sakuraio.enqueueTx(11, sensor_data.mpu9250.magnetometer[0]); |
misodengaku | 0:db3ec2781484 | 102 | sakuraio.enqueueTx(12, sensor_data.mpu9250.magnetometer[1]); |
misodengaku | 0:db3ec2781484 | 103 | sakuraio.enqueueTx(13, sensor_data.mpu9250.magnetometer[2]); |
misodengaku | 0:db3ec2781484 | 104 | //sakuraio.enqueueTx(14, lon); |
misodengaku | 0:db3ec2781484 | 105 | //sakuraio.enqueueTx(15, lat); |
misodengaku | 0:db3ec2781484 | 106 | } |
misodengaku | 0:db3ec2781484 | 107 | |
misodengaku | 0:db3ec2781484 | 108 | |
misodengaku | 0:db3ec2781484 | 109 | void loop() |
misodengaku | 0:db3ec2781484 | 110 | { |
misodengaku | 0:db3ec2781484 | 111 | pc.printf("\r\n\r\nGPS\r\n"); |
misodengaku | 0:db3ec2781484 | 112 | while(gps.readable()) { |
misodengaku | 0:db3ec2781484 | 113 | pc.putc(gps.getc()); |
misodengaku | 0:db3ec2781484 | 114 | } |
misodengaku | 0:db3ec2781484 | 115 | pc.printf("\r\n"); |
misodengaku | 0:db3ec2781484 | 116 | static int i = 1; |
misodengaku | 0:db3ec2781484 | 117 | read_sensor_data(); |
misodengaku | 0:db3ec2781484 | 118 | wait(1); |
misodengaku | 0:db3ec2781484 | 119 | pc.printf("This program runs since %d seconds.\r\n", i); |
misodengaku | 0:db3ec2781484 | 120 | pc.printf("BME280\r\n"); |
misodengaku | 0:db3ec2781484 | 121 | pc.printf("\tTemp: %fC\r\n", sensor_data.bme280.temperature); |
misodengaku | 0:db3ec2781484 | 122 | pc.printf("\tPres: %fhPa\r\n", sensor_data.bme280.pressure); |
misodengaku | 0:db3ec2781484 | 123 | pc.printf("\tHum: %f%%\r\n", sensor_data.bme280.humidity); |
misodengaku | 0:db3ec2781484 | 124 | pc.printf("MPU9250\r\n"); |
misodengaku | 0:db3ec2781484 | 125 | pc.printf("\tTemp: %fC\r\n", sensor_data.mpu9250.temperature); |
misodengaku | 0:db3ec2781484 | 126 | for (int j = 0; j < 3; j++) { |
misodengaku | 0:db3ec2781484 | 127 | pc.printf("\tacc[%d]: %f\r\n", j, sensor_data.mpu9250.accelerometer[j]); |
misodengaku | 0:db3ec2781484 | 128 | pc.printf("\tgyro[%d]: %f\r\n", j, sensor_data.mpu9250.gyroscope[j]); |
misodengaku | 0:db3ec2781484 | 129 | pc.printf("\tmag[%d]: %f\r\n", j, sensor_data.mpu9250.magnetometer[j]); |
misodengaku | 0:db3ec2781484 | 130 | } |
misodengaku | 0:db3ec2781484 | 131 | lcd.cls(); |
misodengaku | 0:db3ec2781484 | 132 | if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) { |
misodengaku | 0:db3ec2781484 | 133 | lcd.printf("Online\n", i); |
misodengaku | 0:db3ec2781484 | 134 | } else { |
misodengaku | 0:db3ec2781484 | 135 | lcd.printf("Offline\n", i); |
misodengaku | 0:db3ec2781484 | 136 | } |
misodengaku | 0:db3ec2781484 | 137 | lcd.printf("%d", i); |
misodengaku | 0:db3ec2781484 | 138 | i++; |
misodengaku | 0:db3ec2781484 | 139 | led_1 = !led_1; |
misodengaku | 0:db3ec2781484 | 140 | led_4 = !sw_4; |
misodengaku | 0:db3ec2781484 | 141 | |
misodengaku | 0:db3ec2781484 | 142 | enqueue_sensor_data(i); |
misodengaku | 0:db3ec2781484 | 143 | sakuraio.send(); |
misodengaku | 0:db3ec2781484 | 144 | } |
misodengaku | 0:db3ec2781484 | 145 | |
misodengaku | 0:db3ec2781484 | 146 | |
misodengaku | 0:db3ec2781484 | 147 | int main() |
misodengaku | 0:db3ec2781484 | 148 | { |
misodengaku | 0:db3ec2781484 | 149 | setup(); |
misodengaku | 0:db3ec2781484 | 150 | while(1) { |
misodengaku | 0:db3ec2781484 | 151 | loop(); |
misodengaku | 0:db3ec2781484 | 152 | } |
misodengaku | 0:db3ec2781484 | 153 | } |