Thundersoft
/
IKS01A2_for_TT_Mxx
Creating a project about IKS10A2 for TT_Mxx
main.cpp
- Committer:
- ThunderSoft
- Date:
- 2019-04-26
- Revision:
- 1:28de8dff2317
- Parent:
- 0:69ddd5bce0a0
File content as of revision 1:28de8dff2317:
#include "mbed.h" #include "IKS01A2.h" #ifdef TEST_LCD LCD tft(LCD_SPI_CS,LCD_SPI_DC, LCD_MOSI_PIN, LCD_MISO_PIN, LCD_SPI_CL_PIN,LCD_BL_PIN); #else #define LCD int LCD tft; #endif #if __TT_M3HQ__ #define DISPLAY_TMPM_STRING "Welcome to Thundersoft TT_M3HQ" #endif #if __TT_M4G9__ #define DISPLAY_TMPM_STRING "Welcome to Thundersoft TT_M4G9" #endif /*macros for ISK01A2 shiled board*/ #define DISPLAY_LSM6DSL_ID_STRING "LSM6DSL ID:" #define DISPLAY_LSM6DSL_ID_HIGHT 16 #define DISPLAY_LSM303ACC_ID_STRING "LSMACC ID:" #define DISPLAY_LSM303ACC_ID_HIGHT 32 #define DISPLAY_LSM303MAG_ID_STRING "LSMMAG ID:" #define DISPLAY_LSM303MAG_ID_HIGHT 48 #define DISPLAY_HTS221_ID_STRING "HTS221 ID:" #define DISPLAY_HTS221_ID_HIGHT 64 #define DISPLAY_LPS22_ID_STRING "LPS22 ID:" #define DISPLAY_LPS22_ID_HIGHT 80 #define DISPLAY_LSM6DSL_ACC_VALUE_STRING "LSM6DSL X Axes:" #define DISPLAY_LSM6DSL_ACC_VALUE_STRING_HIGHT 96 #define DISPLAY_LSM6DSL_ACC_VALUE_HIGHT (DISPLAY_LSM6DSL_ACC_VALUE_STRING_HIGHT + FONT_CHAR_HEIGHT) #define DISPLAY_LSM6DSL_MAG_VALUE_STRING "LSM6DSL G Axes:" #define DISPLAY_LSM6DSL_MAG_VALUE_STRING_HIGHT 128 #define DISPLAY_LSM6DSL_MAG_VALUE_HIGHT (DISPLAY_LSM6DSL_MAG_VALUE_STRING_HIGHT + FONT_CHAR_HEIGHT) #define DISPLAY_LSM303AGR_ACC_VALUE_STRING "LSM303AGR:" #define DISPLAY_LSM303AGR_ACC_VALUE_STRING_HIGH 160 #define DISPLAY_LSM303AGR_ACC_VALUE_HIGH (DISPLAY_LSM303AGR_ACC_VALUE_STRING_HIGH + FONT_CHAR_HEIGHT) #define DISPLAY_LSM303MAG_VALUE_STRING "LSM303MAG:" #define DISPLAY_LSM303MAG_VALUE_STRING_HIGH 192 #define DISPLAY_LSM303MAG_VALUE_HIGH (DISPLAY_LSM303MAG_VALUE_STRING_HIGH + FONT_CHAR_HEIGHT) #define DISPLAY_HTS221_VALUE_STRING "HTS221:" #define DISPLAY_HTS221_VALUE_STRING_HIGH (DISPLAY_LSM303MAG_VALUE_HIGH + FONT_CHAR_HEIGHT) #define DISPLAY_HTS221_VALUE_HIGH (DISPLAY_HTS221_VALUE_STRING_HIGH + FONT_CHAR_HEIGHT) #define DISPLAY_LPS22HB_VALUE_STRING "LPS22HB:" #define DISPLAY_LPS22HB_VALUE_STRING_HIGH (DISPLAY_HTS221_VALUE_HIGH + FONT_CHAR_HEIGHT) #define DISPLAY_LPS22HB_VALUE_HIGH (DISPLAY_LPS22HB_VALUE_STRING_HIGH + FONT_CHAR_HEIGHT) static void displayForIKS01A2(LCD &lcd,IKS01A2 &iks102) { #ifdef TEST_LCD char temp_buffer[5]; temp_buffer[4] = '\0'; lcd.drawString(0,0,DISPLAY_TMPM_STRING,RED); lcd.drawString(0,DISPLAY_LSM6DSL_ID_HIGHT,DISPLAY_LSM6DSL_ID_STRING,RED); translateBinaryToBCD(temp_buffer,iks102.getIdLSM6DSL()); lcd.drawString((sizeof(DISPLAY_LSM6DSL_ID_STRING) - 1) * FONT_CHAR_WIDTH,DISPLAY_LSM6DSL_ID_HIGHT,(const char *)temp_buffer,BLACK); lcd.drawString(0,DISPLAY_LSM303ACC_ID_HIGHT,DISPLAY_LSM303ACC_ID_STRING,RED); translateBinaryToBCD(temp_buffer,iks102.getIdLSM303AGR()); lcd.drawString((sizeof(DISPLAY_LSM303ACC_ID_STRING) - 1) * FONT_CHAR_WIDTH,DISPLAY_LSM303ACC_ID_HIGHT,(const char *)temp_buffer,BLACK); lcd.drawString(0,DISPLAY_LSM303MAG_ID_HIGHT,DISPLAY_LSM303MAG_ID_STRING,RED); translateBinaryToBCD(temp_buffer,iks102.getIdLSM303MAG()); lcd.drawString((sizeof(DISPLAY_LSM303MAG_ID_STRING) - 1) * FONT_CHAR_WIDTH,DISPLAY_LSM303MAG_ID_HIGHT,(const char *)temp_buffer,BLACK); lcd.drawString(0,DISPLAY_HTS221_ID_HIGHT,DISPLAY_HTS221_ID_STRING,RED); translateBinaryToBCD(temp_buffer,iks102.getIdHTS221()); lcd.drawString((sizeof(DISPLAY_HTS221_ID_STRING) - 1) * FONT_CHAR_WIDTH,DISPLAY_HTS221_ID_HIGHT,(const char *)temp_buffer,BLACK); lcd.drawString(0,DISPLAY_LPS22_ID_HIGHT,DISPLAY_LPS22_ID_STRING,RED); translateBinaryToBCD(temp_buffer,iks102.getIdLPS22HB()); lcd.drawString((sizeof(DISPLAY_LPS22_ID_STRING) - 1) * FONT_CHAR_WIDTH,DISPLAY_LPS22_ID_HIGHT,(const char *)temp_buffer,BLACK); /*Set LSM6DSL for LCD string*/ lcd.drawString(0,DISPLAY_LSM6DSL_ACC_VALUE_STRING_HIGHT,DISPLAY_LSM6DSL_ACC_VALUE_STRING,RED); lcd.drawString(0,DISPLAY_LSM6DSL_MAG_VALUE_STRING_HIGHT,DISPLAY_LSM6DSL_MAG_VALUE_STRING,RED); lcd.drawString(0,DISPLAY_LSM303AGR_ACC_VALUE_STRING_HIGH,DISPLAY_LSM303AGR_ACC_VALUE_STRING,RED); lcd.drawString(0,DISPLAY_LSM303MAG_VALUE_STRING_HIGH,DISPLAY_LSM303MAG_VALUE_STRING,RED); lcd.drawString(0,DISPLAY_HTS221_VALUE_STRING_HIGH,DISPLAY_HTS221_VALUE_STRING,RED); lcd.drawString(0,DISPLAY_LPS22HB_VALUE_STRING_HIGH,DISPLAY_LPS22HB_VALUE_STRING,RED); #endif } static void handleLCDForIKS102(LCD &lcd,IKS01A2 &iks102) { int32_t accelerometer[3]; char temp_buffer[50]; float humidity,temperature,pressure; //display for IKS102 //display Img while(1) { /*Display LSM6DSL ACC*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.getXAxesLSM6DSL(accelerometer); sprintf(temp_buffer,"%d,%d,%d",accelerometer[0],accelerometer[1],accelerometer[2]); printf("LSM6DSL X Axes = %d , %d , %d\r\n",accelerometer[0],accelerometer[1],accelerometer[2]); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_LSM6DSL_ACC_VALUE_HIGHT,temp_buffer,RED); #endif /*Display LSM6DSL MAG*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.getGAxesLSM6DSL(accelerometer); sprintf(temp_buffer,"%d,%d,%d",accelerometer[0],accelerometer[1],accelerometer[2]); printf("LSM6DSL G Axes = %d , %d , %d\r\n",accelerometer[0],accelerometer[1],accelerometer[2]); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_LSM6DSL_MAG_VALUE_HIGHT,temp_buffer,RED); #endif /*Display LSM303AGR_ACC*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.getDataLSM303AGR(accelerometer); sprintf(temp_buffer,"%d,%d,%d",accelerometer[0],accelerometer[1],accelerometer[2]); printf("LSM303AGR [acc/mg] = %d , %d , %d\r\n",accelerometer[0],accelerometer[1],accelerometer[2]); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_LSM303AGR_ACC_VALUE_HIGH,temp_buffer,RED); #endif /*Display LSM303AGR_MAG*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.getDataLSM303MAG(accelerometer); sprintf(temp_buffer,"%d,%d,%d",accelerometer[0],accelerometer[1],accelerometer[2]); printf("LSM303MAG [mag/mgauss] = %d , %d , %d\r\n",accelerometer[0],accelerometer[1],accelerometer[2]); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_LSM303MAG_VALUE_HIGH,temp_buffer,RED); #endif /*Display HTS221*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.GetHumidity(&humidity); sprintf(temp_buffer,"humidity %d,",(int)humidity); iks102.GetTemperatureHTS221(&temperature); sprintf(temp_buffer + strlen(temp_buffer),"temperature %d",(int)temperature); printf("HTS221Sensor humidity = %f,temperature = %f \r\n",humidity,temperature); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_HTS221_VALUE_HIGH,temp_buffer,RED); #endif /*Display LPS22HB*/ memset(temp_buffer,0,sizeof(temp_buffer)); iks102.GetPressure(&humidity); sprintf(temp_buffer,"pressure %d,",(int)humidity); iks102.GetTemperatureLPS22HB(&temperature); sprintf(temp_buffer + strlen(temp_buffer),"temperature %d",(int)temperature); printf("LPS22HBSensor pressure = %f, temperature = %f \r\n",pressure,temperature); #ifdef TEST_LCD lcd.drawString(0,DISPLAY_LPS22HB_VALUE_HIGH,temp_buffer,RED); #endif //add log wait_ms(1000); #ifdef TEST_LCD lcd.clearScreenArea(0,DISPLAY_LSM6DSL_ACC_VALUE_HIGHT,WHITE); lcd.clearScreenArea(0,DISPLAY_LSM6DSL_MAG_VALUE_HIGHT,WHITE); lcd.clearScreenArea(0,DISPLAY_LSM303AGR_ACC_VALUE_HIGH,WHITE); lcd.clearScreenArea(0,DISPLAY_LSM303MAG_VALUE_HIGH,WHITE); lcd.clearScreenArea(0,DISPLAY_HTS221_VALUE_HIGH,WHITE); lcd.clearScreenArea(0,DISPLAY_LPS22HB_VALUE_HIGH,WHITE); #endif } } int main() { int32_t accelerometer[3]; float humidity,temperature; float pressure; printf("%s\r\n",DISPLAY_TMPM_STRING); I2C *i2c =new I2C(D14,D15); LSM6DSLSensor *lsm = new LSM6DSLSensor(i2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_HIGH); LSM303AGR_ACC_Sensor *Acc = new LSM303AGR_ACC_Sensor(i2c); LSM303AGR_MAG_Sensor *Mag = new LSM303AGR_MAG_Sensor(i2c); HTS221Sensor *HumTemp = new HTS221Sensor (i2c); LPS22HBSensor *PressTemp = new LPS22HBSensor(i2c); uint8_t temp_id; lsm->ReadID(&temp_id); // lsm->Enable_X(); lsm->Enable_G(); // Acc->Enable(); Mag->Enable(); HumTemp->Enable(); PressTemp->Enable(); printf("LSM6DSLSensor ID = 0x%x \r\n",temp_id); Acc->ReadID(&temp_id); printf("LSM303AGR_ACC_Sensor ID = 0x%x \r\n",temp_id); Mag->ReadID(&temp_id); printf("LSM303AGR_MAG_Sensor ID = 0x%x \r\n",temp_id); HumTemp->ReadID(&temp_id); printf("HTS221Sensor ID = 0x%x \r\n",temp_id); PressTemp->ReadID(&temp_id); printf("LPS22HBSensor ID = 0x%x \r\n",temp_id); IKS01A2 iks102(i2c); #ifdef TEST_LCD tft.init(); #endif displayForIKS01A2(tft,iks102); handleLCDForIKS102(tft,iks102); while(1) { } }