Thomas Van Aken
/
bartho
test
main.cpp
- Committer:
- TVA
- Date:
- 2021-02-10
- Revision:
- 4:40d23f4295f9
- Parent:
- 3:0e37515b92f1
File content as of revision 4:40d23f4295f9:
/* mbed Microcontroller Library * Copyright (c) 2019 ARM Limited * SPDX-License-Identifier: Apache-2.0 */ #include "mbed.h" #include "platform/mbed_thread.h" // populate from databuffer queue raw samples data before sending over ble // struct RawData samples_raw_data; // int sampleIndex = 0; // int ptr = 0; // while(sampleIndex < mumberOffSamples) // status byte is index 0 // samples_raw_data.green_led_cnt = (databuf[ptr+1] << 16) + (databuf[ptr+2] << 8) + (databuf[ptr+3]); // samples_raw_data.ir_led_cnt = (databuf[ptr+4] << 16) + (databuf[ptr+5] << 8) + (databuf[ptr+6]); // samples_raw_data.red_led_cnt = (databuf[ptr+7] << 16) + (databuf[ptr+8] << 8) + (databuf[ptr+9]); // samples_raw_data.green2_led_cnt = (databuf[ptr+10] << 16) + (databuf[ptr+11] << 8) + (databuf[ptr12]); // samples_raw_data.x = (databuf[ptr+19] << 8) + (databuf[ptr+20]); // samples_raw_data.y = (databuf[ptr+21] << 8) + (databuf[ptr+22]); // samples_raw_data.z = (databuf[ptr+23] << 8) + (databuf[ptr+24]); struct RawData { uint32_t green_led_cnt; uint32_t ir_led_cnt; uint32_t red_led_cnt; uint32_t green2_led_cnt; int16_t x; int16_t y; int16_t z; }; // Blinking rate in milliseconds #define BLINKING_RATE_MS 500 #define RST_PIN P5_6 #define MFIO_PIN P5_4 I2C i2c(P3_4, P3_5); const int addr = 0xAA;//0x55; int main() { i2c.frequency(400000); char cmd[4]; // Initialise the digital pin LED1 as an output DigitalOut led(LED1); DigitalOut rst(RST_PIN); DigitalOut mfio(MFIO_PIN); mfio = 0; rst = 1; thread_sleep_for(10); rst = 0; thread_sleep_for(10); rst = 1; //thread_sleep_for(1500); thread_sleep_for(100); //scanI2C(); while (true) { //Read out status (app or boot mode) cmd[0] = 0x02; cmd[1] = 0x00; i2c.write(addr, cmd, 2); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; i2c.read(addr, cmd, 2); printf("1: %x %x\n", cmd[0], cmd[1]); //Switch to APP mode cmd[0] = 0x01; cmd[1] = 0x00; cmd[2] = 0x00; i2c.write(addr, cmd, 3); thread_sleep_for(1500); //Switch off MFIO mfio = 0; thread_sleep_for(1); //Wait 300us //Read out status (app or boot mode) cmd[0] = 0x02; cmd[1] = 0x00; i2c.write(addr, cmd, 2); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; i2c.read(addr, cmd, 2); printf("2: %x %x\n", cmd[0], cmd[1]); //Sensor hub firmware nummer opvragen cmd[0] = 0xFF; cmd[1] = 0x03; i2c.write(addr, cmd, 2); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; cmd[2] = 0x00; cmd[3] = 0x00; i2c.read(addr, cmd, 4); printf("3: %d %d %d %d\n", cmd[0], cmd[1], cmd[2], cmd[3]); //Raw data mode cmd[0] = 0x10; cmd[1] = 0x00; cmd[2] = 0x03; i2c.write(addr, cmd, 3); thread_sleep_for(2); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("4: %x\n", cmd[0]); //Interrupt threshold cmd[0] = 0x10; cmd[1] = 0x01; cmd[2] = 0x01; i2c.write(addr, cmd, 3); thread_sleep_for(2); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("5: %x\n", cmd[0]); //Set sample report period cmd[0] = 0x10; cmd[1] = 0x02; cmd[2] = 0x01; i2c.write(addr, cmd, 3); thread_sleep_for(2); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("6: %x\n", cmd[0]); //Enable accelerometer cmd[0] = 0x44; cmd[1] = 0x04; cmd[2] = 0x01; cmd[3] = 0x00; //0x01 i2c.write(addr, cmd, 4); thread_sleep_for(20); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("7: %x\n", cmd[0]); //Read accelerometer WHO_AM_I register cmd[0] = 0x41; cmd[1] = 0x04; cmd[2] = 0x0F; i2c.write(addr, cmd, 3); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; i2c.read(addr, cmd, 2); printf("8: %x %x\n", cmd[0], cmd[1]); printf("Start\n"); //Enable AFE cmd[0] = 0x44; cmd[1] = 0x00; cmd[2] = 0x01; //MAYBE 4 i2c.write(addr, cmd, 3); thread_sleep_for(250); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("9: %x\n", cmd[0]); //Set 100Hz read samples cmd[0] = 0x40; cmd[1] = 0x00; cmd[2] = 0x12; cmd[3] = 0x18; i2c.write(addr, cmd, 4); thread_sleep_for(2); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("10: %x\n", cmd[0]); //get data struct RawData samples_raw_data; int sampleIndex = 0; char rawData[1024]; uint8_t amount = 0; memset(rawData,0,sizeof(rawData)); for(uint8_t i=0; i<250; i++) { //Get status sensor hub cmd[0] = 0x00; cmd[1] = 0x00; i2c.write(addr, cmd, 2); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; i2c.read(addr, cmd, 2); printf("dat1: %x %x\n", cmd[0], cmd[1]); //Get number of samples in the fifo cmd[0] = 0x12; cmd[1] = 0x00; i2c.write(addr, cmd, 2); thread_sleep_for(2); cmd[0] = 0x00; cmd[1] = 0x00; i2c.read(addr, cmd, 2); amount = cmd[1]; printf("dat2: %x %x\n", cmd[0], cmd[1]); //Get data from fifo cmd[0] = 0x12; cmd[1] = 0x01; i2c.write(addr, cmd, 2); thread_sleep_for(2); i2c.read(addr, rawData, 1+((36+6)*amount)); printf("Satus: %x\n", rawData[0]); printf("Data: "); for(uint32_t j=1; j<1+((36+6)*amount); j+=42) { //%zu printf("%u, %d, %d, %d\n", (uint32_t)(0x00<<24 | rawData[j+1]<<16 | rawData[j+2]<<8 | rawData[j+3]), (rawData[j+37]<<8 | rawData[j+38]), (rawData[j+39]<<8 | rawData[j+40]), (rawData[j+41]<<8 | rawData[j+42])); } //thread_sleep_for(200); thread_sleep_for(1); } //Disable AFE cmd[0] = 0x44; cmd[1] = 0x00; cmd[2] = 0x00; //MAYBE 4 i2c.write(addr, cmd, 3); thread_sleep_for(250); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("11: %x\n", cmd[0]); printf("Stop\n"); //Disable Accelerometer cmd[0] = 0x44; cmd[1] = 0x04; cmd[2] = 0x00; //MAYBE 4 i2c.write(addr, cmd, 3); thread_sleep_for(20); cmd[0] = 0x00; i2c.read(addr, cmd, 1); printf("12: %x\n", cmd[0]); /*rst =! rst; mfio =! mfio;*/ thread_sleep_for(BLINKING_RATE_MS); led = !led; } }