Creating a project about IKS10A2 for TT_Mxx

Revision:
0:69ddd5bce0a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 21 09:34:41 2019 +0000
@@ -0,0 +1,223 @@
+#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)
+     {
+     }
+        
+}
\ No newline at end of file