test
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2019 ARM Limited 00003 * SPDX-License-Identifier: Apache-2.0 00004 */ 00005 00006 #include "mbed.h" 00007 #include "platform/mbed_thread.h" 00008 00009 // populate from databuffer queue raw samples data before sending over ble 00010 // struct RawData samples_raw_data; 00011 // int sampleIndex = 0; 00012 // int ptr = 0; 00013 // while(sampleIndex < mumberOffSamples) 00014 // status byte is index 0 00015 // samples_raw_data.green_led_cnt = (databuf[ptr+1] << 16) + (databuf[ptr+2] << 8) + (databuf[ptr+3]); 00016 // samples_raw_data.ir_led_cnt = (databuf[ptr+4] << 16) + (databuf[ptr+5] << 8) + (databuf[ptr+6]); 00017 // samples_raw_data.red_led_cnt = (databuf[ptr+7] << 16) + (databuf[ptr+8] << 8) + (databuf[ptr+9]); 00018 // samples_raw_data.green2_led_cnt = (databuf[ptr+10] << 16) + (databuf[ptr+11] << 8) + (databuf[ptr12]); 00019 // samples_raw_data.x = (databuf[ptr+19] << 8) + (databuf[ptr+20]); 00020 // samples_raw_data.y = (databuf[ptr+21] << 8) + (databuf[ptr+22]); 00021 // samples_raw_data.z = (databuf[ptr+23] << 8) + (databuf[ptr+24]); 00022 struct RawData 00023 { 00024 uint32_t green_led_cnt; 00025 uint32_t ir_led_cnt; 00026 uint32_t red_led_cnt; 00027 uint32_t green2_led_cnt; 00028 int16_t x; 00029 int16_t y; 00030 int16_t z; 00031 }; 00032 00033 // Blinking rate in milliseconds 00034 #define BLINKING_RATE_MS 500 00035 00036 #define RST_PIN P5_6 00037 #define MFIO_PIN P5_4 00038 00039 I2C i2c(P3_4, P3_5); 00040 00041 const int addr = 0xAA;//0x55; 00042 00043 int main() 00044 { 00045 i2c.frequency(400000); 00046 char cmd[4]; 00047 00048 // Initialise the digital pin LED1 as an output 00049 DigitalOut led(LED1); 00050 DigitalOut rst(RST_PIN); 00051 DigitalOut mfio(MFIO_PIN); 00052 00053 mfio = 0; 00054 rst = 1; 00055 thread_sleep_for(10); 00056 rst = 0; 00057 thread_sleep_for(10); 00058 rst = 1; 00059 //thread_sleep_for(1500); 00060 thread_sleep_for(100); 00061 00062 //scanI2C(); 00063 00064 while (true) { 00065 //Read out status (app or boot mode) 00066 cmd[0] = 0x02; 00067 cmd[1] = 0x00; 00068 i2c.write(addr, cmd, 2); 00069 thread_sleep_for(2); 00070 00071 cmd[0] = 0x00; 00072 cmd[1] = 0x00; 00073 i2c.read(addr, cmd, 2); 00074 printf("1: %x %x\n", cmd[0], cmd[1]); 00075 00076 //Switch to APP mode 00077 cmd[0] = 0x01; 00078 cmd[1] = 0x00; 00079 cmd[2] = 0x00; 00080 i2c.write(addr, cmd, 3); 00081 thread_sleep_for(1500); 00082 00083 //Switch off MFIO 00084 mfio = 0; 00085 thread_sleep_for(1); //Wait 300us 00086 00087 //Read out status (app or boot mode) 00088 cmd[0] = 0x02; 00089 cmd[1] = 0x00; 00090 i2c.write(addr, cmd, 2); 00091 thread_sleep_for(2); 00092 00093 cmd[0] = 0x00; 00094 cmd[1] = 0x00; 00095 i2c.read(addr, cmd, 2); 00096 printf("2: %x %x\n", cmd[0], cmd[1]); 00097 00098 //Sensor hub firmware nummer opvragen 00099 cmd[0] = 0xFF; 00100 cmd[1] = 0x03; 00101 i2c.write(addr, cmd, 2); 00102 thread_sleep_for(2); 00103 00104 cmd[0] = 0x00; 00105 cmd[1] = 0x00; 00106 cmd[2] = 0x00; 00107 cmd[3] = 0x00; 00108 i2c.read(addr, cmd, 4); 00109 printf("3: %d %d %d %d\n", cmd[0], cmd[1], cmd[2], cmd[3]); 00110 00111 //Raw data mode 00112 cmd[0] = 0x10; 00113 cmd[1] = 0x00; 00114 cmd[2] = 0x03; 00115 00116 i2c.write(addr, cmd, 3); 00117 thread_sleep_for(2); 00118 00119 cmd[0] = 0x00; 00120 i2c.read(addr, cmd, 1); 00121 printf("4: %x\n", cmd[0]); 00122 00123 //Interrupt threshold 00124 cmd[0] = 0x10; 00125 cmd[1] = 0x01; 00126 cmd[2] = 0x01; 00127 00128 i2c.write(addr, cmd, 3); 00129 thread_sleep_for(2); 00130 00131 cmd[0] = 0x00; 00132 i2c.read(addr, cmd, 1); 00133 printf("5: %x\n", cmd[0]); 00134 00135 //Set sample report period 00136 cmd[0] = 0x10; 00137 cmd[1] = 0x02; 00138 cmd[2] = 0x01; 00139 00140 i2c.write(addr, cmd, 3); 00141 thread_sleep_for(2); 00142 00143 cmd[0] = 0x00; 00144 i2c.read(addr, cmd, 1); 00145 printf("6: %x\n", cmd[0]); 00146 00147 //Enable accelerometer 00148 cmd[0] = 0x44; 00149 cmd[1] = 0x04; 00150 cmd[2] = 0x01; 00151 cmd[3] = 0x00; //0x01 00152 00153 i2c.write(addr, cmd, 4); 00154 thread_sleep_for(20); 00155 00156 cmd[0] = 0x00; 00157 i2c.read(addr, cmd, 1); 00158 printf("7: %x\n", cmd[0]); 00159 00160 //Read accelerometer WHO_AM_I register 00161 cmd[0] = 0x41; 00162 cmd[1] = 0x04; 00163 cmd[2] = 0x0F; 00164 00165 i2c.write(addr, cmd, 3); 00166 thread_sleep_for(2); 00167 00168 cmd[0] = 0x00; 00169 cmd[1] = 0x00; 00170 i2c.read(addr, cmd, 2); 00171 printf("8: %x %x\n", cmd[0], cmd[1]); 00172 00173 00174 00175 printf("Start\n"); 00176 00177 00178 00179 //Enable AFE 00180 cmd[0] = 0x44; 00181 cmd[1] = 0x00; 00182 cmd[2] = 0x01; 00183 //MAYBE 4 00184 00185 i2c.write(addr, cmd, 3); 00186 thread_sleep_for(250); 00187 00188 cmd[0] = 0x00; 00189 i2c.read(addr, cmd, 1); 00190 printf("9: %x\n", cmd[0]); 00191 00192 //Set 100Hz read samples 00193 cmd[0] = 0x40; 00194 cmd[1] = 0x00; 00195 cmd[2] = 0x12; 00196 cmd[3] = 0x18; 00197 00198 i2c.write(addr, cmd, 4); 00199 thread_sleep_for(2); 00200 00201 cmd[0] = 0x00; 00202 i2c.read(addr, cmd, 1); 00203 printf("10: %x\n", cmd[0]); 00204 00205 00206 00207 00208 //get data 00209 struct RawData samples_raw_data; 00210 int sampleIndex = 0; 00211 char rawData[1024]; 00212 uint8_t amount = 0; 00213 memset(rawData,0,sizeof(rawData)); 00214 for(uint8_t i=0; i<250; i++) 00215 { 00216 //Get status sensor hub 00217 cmd[0] = 0x00; 00218 cmd[1] = 0x00; 00219 i2c.write(addr, cmd, 2); 00220 thread_sleep_for(2); 00221 00222 cmd[0] = 0x00; 00223 cmd[1] = 0x00; 00224 i2c.read(addr, cmd, 2); 00225 printf("dat1: %x %x\n", cmd[0], cmd[1]); 00226 00227 //Get number of samples in the fifo 00228 cmd[0] = 0x12; 00229 cmd[1] = 0x00; 00230 i2c.write(addr, cmd, 2); 00231 thread_sleep_for(2); 00232 00233 cmd[0] = 0x00; 00234 cmd[1] = 0x00; 00235 i2c.read(addr, cmd, 2); 00236 amount = cmd[1]; 00237 printf("dat2: %x %x\n", cmd[0], cmd[1]); 00238 00239 //Get data from fifo 00240 cmd[0] = 0x12; 00241 cmd[1] = 0x01; 00242 i2c.write(addr, cmd, 2); 00243 thread_sleep_for(2); 00244 00245 i2c.read(addr, rawData, 1+((36+6)*amount)); 00246 00247 printf("Satus: %x\n", rawData[0]); 00248 printf("Data: "); 00249 for(uint32_t j=1; j<1+((36+6)*amount); j+=42) 00250 { 00251 //%zu 00252 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])); 00253 } 00254 00255 //thread_sleep_for(200); 00256 thread_sleep_for(1); 00257 } 00258 00259 00260 00261 00262 00263 //Disable AFE 00264 cmd[0] = 0x44; 00265 cmd[1] = 0x00; 00266 cmd[2] = 0x00; 00267 //MAYBE 4 00268 00269 i2c.write(addr, cmd, 3); 00270 thread_sleep_for(250); 00271 00272 cmd[0] = 0x00; 00273 i2c.read(addr, cmd, 1); 00274 printf("11: %x\n", cmd[0]); 00275 00276 00277 00278 printf("Stop\n"); 00279 00280 00281 00282 //Disable Accelerometer 00283 cmd[0] = 0x44; 00284 cmd[1] = 0x04; 00285 cmd[2] = 0x00; 00286 //MAYBE 4 00287 00288 i2c.write(addr, cmd, 3); 00289 thread_sleep_for(20); 00290 00291 cmd[0] = 0x00; 00292 i2c.read(addr, cmd, 1); 00293 printf("12: %x\n", cmd[0]); 00294 00295 /*rst =! rst; 00296 mfio =! mfio;*/ 00297 thread_sleep_for(BLINKING_RATE_MS); 00298 led = !led; 00299 } 00300 }
Generated on Sat Jul 30 2022 06:58:04 by
1.7.2