B+IMU+SD
Dependencies: BMI160 RTC SDFileSystem USBDevice max32630fthr
Fork of MPSMAXbutton by
Revision 3:bd223559f79b, committed 2018-05-09
- Comitter:
- FaizanAhmad
- Date:
- Wed May 09 11:01:18 2018 +0000
- Parent:
- 0:769c5a7b3939
- Commit message:
- bUTTON+IMU+SD
Changed in this revision
diff -r 769c5a7b3939 -r bd223559f79b BMI160.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BMI160.lib Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/j3/code/BMI160/#0ae99e97bcf5
diff -r 769c5a7b3939 -r bd223559f79b IMU.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMU.cpp Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,180 @@ +#include "IMU.h" + + +I2C i2cBus(P5_7, P6_0); +BMI160_I2C imu(i2cBus, BMI160_I2C::I2C_ADRS_SDO_LO); + +BMI160::AccConfig accConfig; +BMI160::GyroConfig gyroConfig; + +int initIMU(){ + i2cBus.frequency(400000); + + // printf("\033[H"); //home + // printf("\033[0J"); //erase from cursor to end of screen + + uint32_t failures = 0; + + if(imu.setSensorPowerMode(BMI160::GYRO, BMI160::NORMAL) != BMI160::RTN_NO_ERROR){ + printf("Failed to set gyroscope power mode\n"); + failures++; + } + wait_ms(10); + + if(imu.setSensorPowerMode(BMI160::ACC, BMI160::NORMAL) != BMI160::RTN_NO_ERROR){ + printf("Failed to set accelerometer power mode\n"); + failures++; + } + wait_ms(10); + + + //example of using getSensorConfig + if(imu.getSensorConfig(accConfig) == BMI160::RTN_NO_ERROR){ + printf("ACC Range = %d\n", accConfig.range); + printf("ACC UnderSampling = %d\n", accConfig.us); + printf("ACC BandWidthParam = %d\n", accConfig.bwp); + printf("ACC OutputDataRate = %d\n\n", accConfig.odr); + }else{ + printf("Failed to get accelerometer configuration\n"); + failures++; + } + + //example of setting user defined configuration + accConfig.range = BMI160::SENS_2G ; + accConfig.us = BMI160::ACC_US_OFF; + accConfig.bwp = BMI160::ACC_BWP_2; + accConfig.odr = BMI160::ACC_ODR_8; + if(imu.setSensorConfig(accConfig) == BMI160::RTN_NO_ERROR){ + printf("ACC Range = %d\n", accConfig.range); + printf("ACC UnderSampling = %d\n", accConfig.us); + printf("ACC BandWidthParam = %d\n", accConfig.bwp); + printf("ACC OutputDataRate = %d\n\n", accConfig.odr); + }else{ + printf("Failed to set accelerometer configuration\n"); + failures++; + } + + if(imu.getSensorConfig(gyroConfig) == BMI160::RTN_NO_ERROR){ + printf("GYRO Range = %d\n", gyroConfig.range); + printf("GYRO BandWidthParam = %d\n", gyroConfig.bwp); + printf("GYRO OutputDataRate = %d\n\n", gyroConfig.odr); + }else{ + printf("Failed to get gyroscope configuration\n"); + failures++; + } + + // printf("\033[H"); //home + // printf("\033[0J"); //erase from cursor to end of screen + + if(failures == 0){ + return 0; + }else{ + printf("IMU init failed.. returning 1\n"); + return 1; + } +} + +void printIMUData(){ + float imuTemperature; + BMI160::SensorData accData; + BMI160::SensorData gyroData; + BMI160::SensorTime sensorTime; + + imu.getGyroAccXYZandSensorTime(accData, gyroData, sensorTime, accConfig.range, gyroConfig.range); + imu.getTemperature(&imuTemperature); + + printf("ACC xAxis = %d\n", accData.xAxis.raw); + printf("ACC yAxis = %d\n", accData.yAxis.raw); + printf("ACC zAxis = %d\n\n", accData.zAxis.raw); + + printf("GYRO xAxis = %d\n", gyroData.xAxis.raw); + printf("GYRO yAxis = %d\n", gyroData.yAxis.raw); + printf("GYRO zAxis = %d\n\n", gyroData.zAxis.raw); + + printf("Sensor Time = %f\n", sensorTime.seconds); + printf("Sensor Temperature = %5.3f\n", imuTemperature); +} + + +float getIMUAngle(){ + BMI160::SensorData accData; + BMI160::SensorData gyroData; + BMI160::SensorTime sensorTime; + double tempxAngle = 0; + double xAngle =0; + double tempyAngle =0; + double yAngle =0; + double res =0; + + imu.getGyroAccXYZandSensorTime(accData, gyroData, sensorTime, accConfig.range, gyroConfig.range); +// printf("X = %d\tY = %d\tZ = %d\t\n", accData.xAxis.raw, accData.yAxis.raw, accData.zAxis.raw); + + // uint32_t xVal = accData.xAxis.raw; + // uint32_t yVal = accData.yAxis.raw; + // uint32_t zVal = accData.zAxis.raw; + + float xVal = accData.xAxis.scaled; + float yVal = accData.yAxis.scaled; + float zVal = accData.zAxis.scaled; + + /* Compute angles in radian */ + tempxAngle = (double)((yVal * yVal) + (zVal * zVal)); + tempyAngle = (double)((xVal * xVal) + (zVal * zVal)); + xAngle = (double)atan (xVal / sqrt (tempxAngle)); + yAngle = (double)atan (yVal / sqrt(tempyAngle)); + /* Convert radian in degree */ + xAngle *= 180.00; + yAngle *= 180.00; //zAngle *=180.00; + xAngle /= M_PI; + yAngle /= M_PI; //zAngle /= 3.141592; + // for x angle + res = xAngle; + return res; +} + + + +// DEFAULT MBED FUNCTIONs.. not required for MPS +void dumpImuRegisters(BMI160 &imu) +{ + printRegister(imu, BMI160::CHIP_ID); + printBlock(imu, BMI160::ERR_REG,BMI160::FIFO_DATA); + printBlock(imu, BMI160::ACC_CONF, BMI160::FIFO_CONFIG_1); + printBlock(imu, BMI160::MAG_IF_0, BMI160::SELF_TEST); + printBlock(imu, BMI160::NV_CONF, BMI160::STEP_CONF_1); + printRegister(imu, BMI160::CMD); + printf("\n"); +} + +void printRegister(BMI160 &imu, BMI160::Registers reg) +{ + uint8_t data; + if(imu.readRegister(reg, &data) == BMI160::RTN_NO_ERROR) + { + printf("IMU Register 0x%02x = 0x%02x\n", reg, data); + } + else + { + printf("Failed to read register\n"); + } +} + +void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg) +{ + uint8_t numBytes = ((stopReg - startReg) + 1); + uint8_t buff[numBytes]; + uint8_t offset = static_cast<uint8_t>(startReg); + + if(imu.readBlock(startReg, stopReg, buff) == BMI160::RTN_NO_ERROR) + { + for(uint8_t idx = offset; idx < (numBytes + offset); idx++) + { + printf("IMU Register 0x%02x = 0x%02x\n", idx, buff[idx - offset]); + } + } + else + { + printf("Failed to read block\n"); + } +} +
diff -r 769c5a7b3939 -r bd223559f79b IMU.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMU.h Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,23 @@ +#ifndef IMU_H +#define IMU_H + +#include "mbed.h" +#include "main.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + + +void dumpImuRegisters(BMI160 &imu); +void printRegister(BMI160 &imu, BMI160::Registers reg); +void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg); + +int initIMU(); +void printIMUData(); +float getIMUAngle(); +void dumpImuRegisters(BMI160 &imu); +void printRegister(BMI160 &imu, BMI160::Registers reg); +void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg); + +#endif
diff -r 769c5a7b3939 -r bd223559f79b RTC.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RTC.lib Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/DanielOlarte/code/RTC/#86951afbcc3f
diff -r 769c5a7b3939 -r bd223559f79b RTClock.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RTClock.cpp Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,25 @@ +#include "RTClock.h" +extern Serial _serialport; + +void initRTC(){ + time_t seconds = time(NULL); +} + +void setRTCTime(){ + +} + + +void loadNextMove(){ + +} + +void printRTCTime(){ + time_t seconds = time(NULL); + _serialport.printf("Time as seconds since January 1, 1970 = %d\n", seconds); + _serialport.printf("Time as a basic string = %s", ctime(&seconds)); + char buffer[32]; + strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds)); + _serialport.printf("Time as a custom formatted string = %s", buffer); + +}
diff -r 769c5a7b3939 -r bd223559f79b RTClock.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RTClock.h Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,13 @@ +#ifndef RTCLOCK_H +#define RTCLOCK_H + +#include "mbed.h" +#include "main.h" +#include "RTC.h" + +void initRTC(); +void setRTCAlarm(); +void printRTCTime(); +void loadNextMove(); + +#endif
diff -r 769c5a7b3939 -r bd223559f79b files.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/files.cpp Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,111 @@ +#include "files.h" +#include "USBSerial.h" +extern Serial _serialport; + +#if (MBED_MAJOR_VERSION == 2) +#include "SDFileSystem.h" +#elif (MBED_MAJOR_VERSION == 5) +#include "SDBlockDevice.h" +#include "FATFileSystem.h" +#endif + +#if (MBED_MAJOR_VERSION == 2) +SDFileSystem sd(D11, D12, D13, D10, "fs"); // do,di,clk,cs +#elif (MBED_MAJOR_VERSION == 5) +//SDBlockDevice sd(D11, D12, D13, D10, 8000000); +SDBlockDevice sd(SPI0_MOSI, SPI0_MISO, SPI0_SCK, SPI0_SS, 8000000); // For MAX32630FTHR +FATFileSystem fs("fs"); +#endif + + +int totaFunctionlFiles = 0; +int functionFileNumber = 1; +int functionActive = 0; +extern int functionPosition = 0; +Function ffunc; + +int initSDCard() +{ +#if (MBED_MAJOR_VERSION == 5) + /* Init SD CARD reader */ + sd.init(); + fs.mount(&sd); +#endif + FILE* fp = fopen("/fs/mydata.txt", "a"); + if (fp != 0) { + _serialport.printf("writing something\n\r\n"); + fprintf(fp,"writing something\n\r\n"); + } else { + _serialport.printf("ERROR\r\n"); + } + fclose(fp); + return 0; +} + +int readFileNames() +{ + DIR *d; + struct dirent *p; + + d = opendir("/fs/functions"); + if (d != NULL) { + while ((p = readdir(d)) != NULL) { +// printf(" - %s\n", p->d_name); + totaFunctionlFiles++; + } + } else { + printf("Could not open directory!\n"); + } + closedir(d); + printf("Total files = %d\n", totaFunctionlFiles); + return 0; +} + +int navFunctionFiles(int direction) +{ + + if(direction == DIR_UP) { + if(functionFileNumber < totaFunctionlFiles) { + functionFileNumber++; + } else { + functionFileNumber = 1; + } + printf("UP: %d\n", functionFileNumber); + } else { + if(functionFileNumber > 1) { + functionFileNumber--; + } else { + functionFileNumber = totaFunctionlFiles; + } + printf("DOWN: %d\n", functionFileNumber); + } + return 0; +} + +int openFunctionFile(int inpFile) +{ + char fileLoc [40]; + sprintf (fileLoc, "/fs/functions/function%d.txt", inpFile); + printf ("[%s] is location %d file number\n", fileLoc, inpFile); + + FILE* fp = fopen(fileLoc, "r"); + ffunc.pos=0; + while (fscanf(fp, "%d,%d", &ffunc.x[ffunc.pos], &ffunc.t[ffunc.pos]) != EOF) { + ffunc.pos++; + } + + fclose(fp); + functionActive = 1; + functionPosition = 0; + printFunctionData(); + return 0; +} + +void printFunctionData() +{ + printf ("total: %d\n", ffunc.pos); + for(int i=0; i<ffunc.pos; i++ ) { + printf ("%d, %d\n", ffunc.x[i], ffunc.t[i]); + } +} +
diff -r 769c5a7b3939 -r bd223559f79b files.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/files.h Wed May 09 11:01:18 2018 +0000 @@ -0,0 +1,21 @@ +#ifndef MY_FILES_H +#define MY_FILES_H + +#define DIR_UP 0 +#define DIR_DOWN 1 + +typedef struct{ + int x[10]; + int t[10]; + int pos; +}Function; + +int initSDCard(); +int readFileNames(); +int navFunctionFiles(int direction); +int openFunctionFile(int inpFile); +void printFunctionData(); + + + +#endif
diff -r 769c5a7b3939 -r bd223559f79b main.cpp --- a/main.cpp Mon May 07 21:28:03 2018 +0000 +++ b/main.cpp Wed May 09 11:01:18 2018 +0000 @@ -3,16 +3,11 @@ #include "USBSerial.h" #include "Default.h" #include "DefaultRequired.h" - -#if (MBED_MAJOR_VERSION == 2) -#include "SDFileSystem.h" -#elif (MBED_MAJOR_VERSION == 5) -#include "SDBlockDevice.h" -#include "FATFileSystem.h" -#endif - -#include <stdlib.h> +#include <stdlib.h> #include "main.h" +#include "files.h" +#include "IMU.h" +#include "RTClock.h" MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); Serial _serialport(USBTX,USBRX); @@ -21,17 +16,8 @@ DigitalOut rLED(LED1); DigitalOut gLED(LED2); -DigitalOut bLED(LED3); -#if (MBED_MAJOR_VERSION == 2) -SDFileSystem sd(D11, D12, D13, D10, "fs"); // do,di,clk,cs -#elif (MBED_MAJOR_VERSION == 5) -//SDBlockDevice sd(D11, D12, D13, D10, 8000000); -SDBlockDevice sd(SPI0_MOSI, SPI0_MISO, SPI0_SCK, SPI0_SS, 8000000); // For MAX32630FTHR -FATFileSystem fs("fs"); -#endif - void Rx_interrupt(void); Default default_SM; @@ -44,40 +30,32 @@ _serialport.attach(&Rx_interrupt); gLED = LED_ON; rLED = LED_ON; - - _serialport.printf("in main\r\n"); - _serialport.printf("before init\r\n"); - -#if (MBED_MAJOR_VERSION == 5) - /* Init SD CARD reader */ - sd.init(); - fs.mount(&sd); -#endif - FILE* fp = fopen("/fs/somefile.txt", "a"); - if (fp != 0) - { - _serialport.printf("writing adasda\n\r\n"); - fprintf(fp,"writing asdasdasd\n\r\n"); - } else - { - _serialport.printf("ERROR\r\n"); + + +// _serialport.printf("before init\r\n"); + + if(initSDCard() == 0) { + _serialport.printf("SD init OK!\n"); } - fclose(fp); - - + + if(initIMU() == 0) { + _serialport.printf("IMU init OK!\n"); + } + + //readFileNames(); + //initRTC(); + /* initialize state machine*/ default_init(&default_SM); default_enter(&default_SM); is_smactive = false; - - while(1) - { - if(is_smactive == true) - { - // _serialport.printf("state active\n"); + + while(1) { + if(is_smactive == true) { + // _serialport.printf("state active\n"); is_smactive = false; - default_runCycle(&default_SM); - } + default_runCycle(&default_SM); + } } } @@ -93,31 +71,31 @@ break; case 'Q': - _serialport.printf("Q"); + // _serialport.printf("Q"); defaultIface_raise_mode(&default_SM); is_smactive = true; break; case 'W': - _serialport.printf("W "); + //_serialport.printf("W "); defaultIface_raise_up(&default_SM); is_smactive = true; break; case 'E': - _serialport.printf("E "); + //_serialport.printf("E "); defaultIface_raise_down(&default_SM); is_smactive = true; break; case 'R': - _serialport.printf("R "); + //_serialport.printf("R "); defaultIface_raise_back(&default_SM); is_smactive = true; break; case 'T': - _serialport.printf("T "); + //_serialport.printf("T "); defaultIface_raise_home(&default_SM); is_smactive = true; break; @@ -127,46 +105,45 @@ void PrintStatus_Serial(int val ) { - switch(val) - { + switch(val) { case 1: - _serialport.printf("Menu Selected\n"); - break; - + _serialport.printf("Menu "); + break; + case 2: - _serialport.printf("function \n"); - break; - + _serialport.printf("function "); + break; + case 3: - _serialport.printf("execute\n"); - break; - + _serialport.printf("execute "); + break; + case 4: - _serialport.printf("ready\n"); - break; - + _serialport.printf("ready\n"); + break; + case 5: - _serialport.printf("active\n"); - break; - + _serialport.printf("active\n"); + break; + case 6: - _serialport.printf("alarm\n"); - break; - - case 7: - _serialport.printf("move down act\n"); - break; - - case 8: - _serialport.printf("move up act\n"); - break; - + _serialport.printf("alarm\n"); + break; + + case 7: + _serialport.printf("move down act\n"); + break; + + case 8: + _serialport.printf("move up act\n"); + break; + case 9: - _serialport.printf("return\n"); - break; - + _serialport.printf("return\n"); + break; + default: - break; + break; } - } +}
diff -r 769c5a7b3939 -r bd223559f79b main.h --- a/main.h Mon May 07 21:28:03 2018 +0000 +++ b/main.h Wed May 09 11:01:18 2018 +0000 @@ -1,9 +1,54 @@ #include <string.h> #include "sc_types.h" +#include "max32630fthr.h" +#include <stdlib.h> +#include "bmi160.h" +#include "files.h" + +/*extern MAX32630FTHR pegasus; +extern Serial _serialport; +extern DigitalOut LED; +extern DigitalOut Ctrl; + +extern DigitalOut rLED; +extern DigitalOut gLED;*/ +//typedef struct { +// int x[10]; +// int t[10]; +// int pos; +//} Function; + + +// extern Maxim maxim; +extern I2C i2cBus; +extern BMI160_I2C imu; + +//extern variables here +extern int functionFileNumber; +extern Function ffunc; +extern int functionActive; +extern int functionPosition; +extern time_t timealarm; + +#if (MBED_MAJOR_VERSION == 2) +#include "SDFileSystem.h" +#elif (MBED_MAJOR_VERSION == 5) +#include "SDBlockDevice.h" +#include "FATFileSystem.h" +#endif + +#if (MBED_MAJOR_VERSION == 2) +extern SDFileSystem sd; // do,di,clk,cs +#elif (MBED_MAJOR_VERSION == 5) +//SDBlockDevice sd(D11, D12, D13, D10, 8000000); +extern SDBlockDevice sd; // For MAX32630FTHR +extern FATFileSystem fs; +#endif + /*Global variable*/ extern bool is_smactive; /*function declaration*/ -extern void PrintStatus_Serial(int val ); \ No newline at end of file +extern void PrintStatus_Serial(int val );
diff -r 769c5a7b3939 -r bd223559f79b mbed-os.lib --- a/mbed-os.lib Mon May 07 21:28:03 2018 +0000 +++ b/mbed-os.lib Wed May 09 11:01:18 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#78474a5129e18e136cc7e872adbaa5b74fbb8f6a +https://github.com/ARMmbed/mbed-os/#ae6c7c60f91c89cbf755a2f3c8ec9c66635849fd