tiz

Dependencies:   TextLCD X_NUCLEO_IKS01A1 func mbed-src mbed

Fork of mas by esproj

Committer:
youle1119
Date:
Wed Sep 14 10:49:56 2016 +0000
Revision:
6:fb1b3ce7738d
Parent:
5:100310ea8fba
tiz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
herenvarno 0:99767aa66bce 1 /**
herenvarno 0:99767aa66bce 2 ******************************************************************************
herenvarno 0:99767aa66bce 3 * @file main.cpp
herenvarno 0:99767aa66bce 4 * @author AST / EST
herenvarno 0:99767aa66bce 5 * @version V0.0.1
herenvarno 0:99767aa66bce 6 * @date 14-August-2015
herenvarno 0:99767aa66bce 7 * @brief Simple Example application for using the X_NUCLEO_IKS01A1
herenvarno 0:99767aa66bce 8 * MEMS Inertial & Environmental Sensor Nucleo expansion board.
herenvarno 0:99767aa66bce 9 ******************************************************************************
herenvarno 0:99767aa66bce 10 * @attention
herenvarno 0:99767aa66bce 11 *
herenvarno 0:99767aa66bce 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
herenvarno 0:99767aa66bce 13 *
herenvarno 0:99767aa66bce 14 * Redistribution and use in source and binary forms, with or without modification,
herenvarno 0:99767aa66bce 15 * are permitted provided that the following conditions are met:
herenvarno 0:99767aa66bce 16 * 1. Redistributions of source code must retain the above copyright notice,
herenvarno 0:99767aa66bce 17 * this list of conditions and the following disclaimer.
herenvarno 0:99767aa66bce 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
herenvarno 0:99767aa66bce 19 * this list of conditions and the following disclaimer in the documentation
herenvarno 0:99767aa66bce 20 * and/or other materials provided with the distribution.
herenvarno 0:99767aa66bce 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
herenvarno 0:99767aa66bce 22 * may be used to endorse or promote products derived from this software
herenvarno 0:99767aa66bce 23 * without specific prior written permission.
herenvarno 0:99767aa66bce 24 *
herenvarno 0:99767aa66bce 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
herenvarno 0:99767aa66bce 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
herenvarno 0:99767aa66bce 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
herenvarno 0:99767aa66bce 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
herenvarno 0:99767aa66bce 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
herenvarno 0:99767aa66bce 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
herenvarno 0:99767aa66bce 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
herenvarno 0:99767aa66bce 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
herenvarno 0:99767aa66bce 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
herenvarno 0:99767aa66bce 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
herenvarno 0:99767aa66bce 35 *
herenvarno 0:99767aa66bce 36 ******************************************************************************
herenvarno 0:99767aa66bce 37 */
herenvarno 0:99767aa66bce 38
herenvarno 0:99767aa66bce 39 /* Includes */
herenvarno 3:4355890e55b4 40 #include "main.h"
herenvarno 0:99767aa66bce 41
herenvarno 0:99767aa66bce 42 /* Instantiate the expansion board */
herenvarno 0:99767aa66bce 43 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
herenvarno 0:99767aa66bce 44
herenvarno 0:99767aa66bce 45 /* Retrieve the composing elements of the expansion board */
herenvarno 0:99767aa66bce 46 static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope();
herenvarno 0:99767aa66bce 47 static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer();
herenvarno 0:99767aa66bce 48 static MagneticSensor *magnetometer = mems_expansion_board->magnetometer;
herenvarno 0:99767aa66bce 49 static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
herenvarno 0:99767aa66bce 50 static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
herenvarno 0:99767aa66bce 51 static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
herenvarno 0:99767aa66bce 52 static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;
herenvarno 0:99767aa66bce 53
herenvarno 0:99767aa66bce 54 /* Helper function for printing floats & doubles */
herenvarno 0:99767aa66bce 55 static char *printDouble(char* str, double v, int decimalDigits=2)
herenvarno 0:99767aa66bce 56 {
herenvarno 0:99767aa66bce 57 int i = 1;
herenvarno 0:99767aa66bce 58 int intPart, fractPart;
herenvarno 0:99767aa66bce 59 int len;
herenvarno 0:99767aa66bce 60 char *ptr;
herenvarno 0:99767aa66bce 61
herenvarno 0:99767aa66bce 62 /* prepare decimal digits multiplicator */
herenvarno 0:99767aa66bce 63 for (;decimalDigits!=0; i*=10, decimalDigits--);
herenvarno 0:99767aa66bce 64
herenvarno 0:99767aa66bce 65 /* calculate integer & fractinal parts */
herenvarno 0:99767aa66bce 66 intPart = (int)v;
herenvarno 0:99767aa66bce 67 fractPart = (int)((v-(double)(int)v)*i);
herenvarno 0:99767aa66bce 68
herenvarno 0:99767aa66bce 69 /* fill in integer part */
herenvarno 0:99767aa66bce 70 sprintf(str, "%i.", intPart);
herenvarno 0:99767aa66bce 71
herenvarno 0:99767aa66bce 72 /* prepare fill in of fractional part */
herenvarno 0:99767aa66bce 73 len = strlen(str);
herenvarno 0:99767aa66bce 74 ptr = &str[len];
herenvarno 0:99767aa66bce 75
herenvarno 0:99767aa66bce 76 /* fill in leading fractional zeros */
herenvarno 0:99767aa66bce 77 for (i/=10;i>1; i/=10, ptr++) {
herenvarno 0:99767aa66bce 78 if(fractPart >= i) break;
herenvarno 0:99767aa66bce 79 *ptr = '0';
herenvarno 0:99767aa66bce 80 }
herenvarno 0:99767aa66bce 81
herenvarno 0:99767aa66bce 82 /* fill in (rest of) fractional part */
herenvarno 0:99767aa66bce 83 sprintf(ptr, "%i", fractPart);
herenvarno 0:99767aa66bce 84
herenvarno 0:99767aa66bce 85 return str;
herenvarno 0:99767aa66bce 86 }
herenvarno 0:99767aa66bce 87
herenvarno 0:99767aa66bce 88 DigitalOut myled(LED1);
herenvarno 0:99767aa66bce 89 DigitalIn mybutton(USER_BUTTON);
herenvarno 3:4355890e55b4 90 Display mydisplay;
herenvarno 3:4355890e55b4 91 RawData myrawdata;
herenvarno 0:99767aa66bce 92
herenvarno 3:4355890e55b4 93 uint8_t fbtn=BTN_RELEASED;
herenvarno 3:4355890e55b4 94 uint8_t fbtn_counter=0;
herenvarno 3:4355890e55b4 95 uint8_t mode=MODE_NORMAL;
herenvarno 3:4355890e55b4 96 uint8_t func=FUNC_DATETIME;
herenvarno 3:4355890e55b4 97 uint8_t config_index=0;
herenvarno 4:3fecfc9eeadd 98 uint8_t flag_flash=0;
herenvarno 3:4355890e55b4 99
herenvarno 3:4355890e55b4 100
herenvarno 3:4355890e55b4 101 /**
herenvarno 3:4355890e55b4 102 * FUNC: wait_action
herenvarno 3:4355890e55b4 103 * DESC: wait for pressing button action, update the global flag for next polling cycle
herenvarno 3:4355890e55b4 104 */
herenvarno 3:4355890e55b4 105 void wait_action()
herenvarno 3:4355890e55b4 106 {
herenvarno 3:4355890e55b4 107 fbtn=BTN_RELEASED;
herenvarno 3:4355890e55b4 108 for(int i=0; i<5; i++)
herenvarno 3:4355890e55b4 109 {
herenvarno 3:4355890e55b4 110 if(fbtn==BTN_RELEASED)
herenvarno 3:4355890e55b4 111 {
herenvarno 3:4355890e55b4 112 if(mybutton==1 and fbtn==BTN_RELEASED)
herenvarno 3:4355890e55b4 113 {
herenvarno 5:100310ea8fba 114 if(fbtn_counter>0 and fbtn_counter<=20)
herenvarno 3:4355890e55b4 115 {
herenvarno 3:4355890e55b4 116 fbtn=BTN_PRESSED;
herenvarno 3:4355890e55b4 117 }
herenvarno 5:100310ea8fba 118 else if(fbtn_counter>20 and fbtn_counter<=50)
herenvarno 3:4355890e55b4 119 {
herenvarno 3:4355890e55b4 120 fbtn=BTN_PRESSED_LONG;
herenvarno 3:4355890e55b4 121 }
herenvarno 5:100310ea8fba 122 else if(fbtn_counter>50)
herenvarno 3:4355890e55b4 123 {
herenvarno 3:4355890e55b4 124 fbtn=BTN_PRESSED_VERY_LONG;
herenvarno 3:4355890e55b4 125 }
herenvarno 3:4355890e55b4 126 fbtn_counter=0;
herenvarno 3:4355890e55b4 127 }
herenvarno 3:4355890e55b4 128 else
herenvarno 3:4355890e55b4 129 {
herenvarno 3:4355890e55b4 130 fbtn_counter+=1;
herenvarno 3:4355890e55b4 131 }
herenvarno 3:4355890e55b4 132 }
herenvarno 3:4355890e55b4 133 wait(0.1);
herenvarno 3:4355890e55b4 134 }
herenvarno 3:4355890e55b4 135 }
herenvarno 3:4355890e55b4 136
herenvarno 1:1df80fe13928 137
herenvarno 0:99767aa66bce 138 /* Simple main function */
herenvarno 0:99767aa66bce 139 int main() {
herenvarno 0:99767aa66bce 140 myled=0;
herenvarno 0:99767aa66bce 141 uint8_t func=0;
herenvarno 0:99767aa66bce 142 uint8_t button_mem=0;
herenvarno 0:99767aa66bce 143
herenvarno 3:4355890e55b4 144
herenvarno 3:4355890e55b4 145
herenvarno 0:99767aa66bce 146 uint8_t id;
herenvarno 0:99767aa66bce 147 float value1, value2;
herenvarno 3:4355890e55b4 148 char buffer0[16];
herenvarno 0:99767aa66bce 149 char buffer1[32], buffer2[32];
herenvarno 0:99767aa66bce 150 int32_t axes[3];
herenvarno 0:99767aa66bce 151 int16_t axxx[3];
herenvarno 0:99767aa66bce 152
herenvarno 3:4355890e55b4 153 /*
herenvarno 0:99767aa66bce 154
herenvarno 3:4355890e55b4 155 PersistorStorage ps=PersistorStorage();
herenvarno 3:4355890e55b4 156 strcpy(ps.storage, "hello");
herenvarno 3:4355890e55b4 157 ps.writeStorageToFlash();
herenvarno 0:99767aa66bce 158
herenvarno 3:4355890e55b4 159 PersistorStorage ps1=PersistorStorage();
herenvarno 3:4355890e55b4 160 ps1.ReadStorageFromFlash();
herenvarno 3:4355890e55b4 161
herenvarno 3:4355890e55b4 162 printf("%s", ps1.storage);
herenvarno 3:4355890e55b4 163 */
herenvarno 3:4355890e55b4 164 /*HAL_Init();
herenvarno 3:4355890e55b4 165 __HAL_FLASH_CLEAR_FLAG( FLASH_FLAG_EOP | FLASH_FLAG_OPERR |FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
herenvarno 3:4355890e55b4 166 printf("hello\n");
herenvarno 3:4355890e55b4 167 uint64_t a=124;
herenvarno 3:4355890e55b4 168 uint32_t pageerr = 100;
herenvarno 3:4355890e55b4 169 HAL_FLASH_Unlock();
herenvarno 3:4355890e55b4 170 FLASH_EraseInitTypeDef es;
herenvarno 3:4355890e55b4 171 es.TypeErase=FLASH_TYPEERASE_MASSERASE;
herenvarno 3:4355890e55b4 172 es.Banks=FLASH_BANK_2;
herenvarno 3:4355890e55b4 173 es.Page=0;
herenvarno 3:4355890e55b4 174 es.NbPages=1;
herenvarno 3:4355890e55b4 175
herenvarno 3:4355890e55b4 176 if( HAL_OK != (HAL_FLASHEx_Erase_IT( &es))) {
herenvarno 3:4355890e55b4 177 printf("ERROR %d\n", pageerr);
herenvarno 3:4355890e55b4 178 HAL_FLASH_Lock();
herenvarno 3:4355890e55b4 179 }
herenvarno 3:4355890e55b4 180 __HAL_FLASH_CLEAR_FLAG( FLASH_FLAG_EOP | FLASH_FLAG_OPERR |FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
herenvarno 3:4355890e55b4 181 HAL_FLASH_Unlock();
herenvarno 3:4355890e55b4 182 printf("%d\n", HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, 0x08080000, a));
herenvarno 3:4355890e55b4 183 printf("hello\n");
herenvarno 3:4355890e55b4 184 printf("%d\n", HAL_FLASH_GetError());
herenvarno 3:4355890e55b4 185 HAL_FLASH_Lock();
herenvarno 3:4355890e55b4 186
herenvarno 3:4355890e55b4 187 static const int StorageSize = 64;
herenvarno 3:4355890e55b4 188 static unsigned int storage[ StorageSize ] __attribute__((aligned(32)));
herenvarno 3:4355890e55b4 189 HAL_FLASH_Unlock();
herenvarno 3:4355890e55b4 190 memcpy( (uint32_t*)storage, (uint32_t*)(0x08080000), StorageSize);
herenvarno 3:4355890e55b4 191 HAL_FLASH_Lock();
herenvarno 3:4355890e55b4 192
herenvarno 3:4355890e55b4 193 for(int i=0; i<StorageSize; i++)
herenvarno 3:4355890e55b4 194 {
herenvarno 3:4355890e55b4 195 printf("%4x ",storage[i]);
herenvarno 3:4355890e55b4 196 }
herenvarno 3:4355890e55b4 197 printf("\n");
herenvarno 3:4355890e55b4 198 */
herenvarno 0:99767aa66bce 199
herenvarno 3:4355890e55b4 200 /*
herenvarno 0:99767aa66bce 201 printf("\r\n--- Starting new run ---\r\n");
herenvarno 0:99767aa66bce 202
herenvarno 0:99767aa66bce 203 humidity_sensor->ReadID(&id);
herenvarno 0:99767aa66bce 204 printf("HTS221 humidity & temperature = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 205 pressure_sensor->ReadID(&id);
herenvarno 0:99767aa66bce 206 printf("LPS25H pressure & temperature = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 207 magnetometer->ReadID(&id);
herenvarno 0:99767aa66bce 208 printf("LIS3MDL magnetometer = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 209 gyroscope->ReadID(&id);
herenvarno 0:99767aa66bce 210 printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id);
herenvarno 3:4355890e55b4 211 */
herenvarno 5:100310ea8fba 212 float pressure=0;
herenvarno 3:4355890e55b4 213 while(1)
herenvarno 3:4355890e55b4 214 {
herenvarno 3:4355890e55b4 215 // MEASURE AND DISPLAY
herenvarno 3:4355890e55b4 216 if(mode==MODE_NORMAL)
herenvarno 3:4355890e55b4 217 {
herenvarno 3:4355890e55b4 218 myled=0;
herenvarno 3:4355890e55b4 219 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 220 {
herenvarno 3:4355890e55b4 221 myrawdata.__time=time(NULL);
herenvarno 3:4355890e55b4 222 myrawdata.str_date(buffer0);
herenvarno 3:4355890e55b4 223 myrawdata.str_time(buffer1);
herenvarno 3:4355890e55b4 224 }
herenvarno 3:4355890e55b4 225 else if(func==FUNC_TEMPHUMI)
herenvarno 3:4355890e55b4 226 {
herenvarno 3:4355890e55b4 227 temp_sensor1->GetTemperature(&myrawdata.__temp);
herenvarno 3:4355890e55b4 228 humidity_sensor->GetHumidity(&myrawdata.__humi);
herenvarno 3:4355890e55b4 229 myrawdata.str_temperature(buffer0);
herenvarno 3:4355890e55b4 230 myrawdata.str_humidity(buffer1);
herenvarno 3:4355890e55b4 231 }
herenvarno 5:100310ea8fba 232 else if(func==FUNC_ALTICDIR)
herenvarno 3:4355890e55b4 233 {
herenvarno 5:100310ea8fba 234 pressure_sensor->GetPressure(&pressure);
herenvarno 5:100310ea8fba 235 myrawdata.__prss = pressure * 10;
herenvarno 3:4355890e55b4 236 magnetometer->Get_M_Axes(myrawdata.__mag);
herenvarno 3:4355890e55b4 237 accelerometer->Get_X_Axes(myrawdata.__acc);
herenvarno 3:4355890e55b4 238 gyroscope->Get_G_Axes(myrawdata.__gyr);
herenvarno 5:100310ea8fba 239 myrawdata.str_altitude(buffer0);
herenvarno 3:4355890e55b4 240 myrawdata.str_direction(buffer1);
herenvarno 3:4355890e55b4 241 }
herenvarno 3:4355890e55b4 242 mydisplay.show(buffer0, buffer1);
herenvarno 3:4355890e55b4 243 }
herenvarno 5:100310ea8fba 244 else if(mode==MODE_CONFIG)
herenvarno 3:4355890e55b4 245 {
herenvarno 3:4355890e55b4 246 myled=1;
herenvarno 3:4355890e55b4 247 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 248 {
herenvarno 3:4355890e55b4 249 myrawdata.str_date(buffer0);
herenvarno 3:4355890e55b4 250 myrawdata.str_time(buffer1);
herenvarno 4:3fecfc9eeadd 251 if(flag_flash)
herenvarno 4:3fecfc9eeadd 252 {
herenvarno 4:3fecfc9eeadd 253 if(config_index==0)
herenvarno 4:3fecfc9eeadd 254 {
herenvarno 4:3fecfc9eeadd 255 buffer0[0]=0xff;
herenvarno 4:3fecfc9eeadd 256 }
herenvarno 4:3fecfc9eeadd 257 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 258 {
herenvarno 4:3fecfc9eeadd 259 buffer0[1]=0xff;
herenvarno 4:3fecfc9eeadd 260 }
herenvarno 4:3fecfc9eeadd 261 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 262 {
herenvarno 4:3fecfc9eeadd 263 buffer0[3]=0xff;
herenvarno 4:3fecfc9eeadd 264 buffer0[4]=0xff;
herenvarno 4:3fecfc9eeadd 265 }
herenvarno 4:3fecfc9eeadd 266 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 267 {
herenvarno 4:3fecfc9eeadd 268 buffer0[6]=0xff;
herenvarno 4:3fecfc9eeadd 269 buffer0[7]=0xff;
herenvarno 4:3fecfc9eeadd 270 }
herenvarno 4:3fecfc9eeadd 271 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 272 {
herenvarno 4:3fecfc9eeadd 273 buffer1[0]=0xff;
herenvarno 4:3fecfc9eeadd 274 buffer1[1]=0xff;
herenvarno 4:3fecfc9eeadd 275 }
herenvarno 4:3fecfc9eeadd 276 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 277 {
herenvarno 4:3fecfc9eeadd 278 buffer1[3]=0xff;
herenvarno 4:3fecfc9eeadd 279 }
herenvarno 4:3fecfc9eeadd 280 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 281 {
herenvarno 4:3fecfc9eeadd 282 buffer1[4]=0xff;
herenvarno 4:3fecfc9eeadd 283 }
herenvarno 4:3fecfc9eeadd 284 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 285 {
herenvarno 4:3fecfc9eeadd 286 buffer1[6]=0xff;
herenvarno 4:3fecfc9eeadd 287 }
herenvarno 4:3fecfc9eeadd 288 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 289 {
herenvarno 4:3fecfc9eeadd 290 buffer1[7]=0xff;
herenvarno 4:3fecfc9eeadd 291 }
herenvarno 4:3fecfc9eeadd 292 }
herenvarno 4:3fecfc9eeadd 293 }
herenvarno 4:3fecfc9eeadd 294 if(func==FUNC_TEMPHUMI)
herenvarno 4:3fecfc9eeadd 295 {
herenvarno 4:3fecfc9eeadd 296 myrawdata.str_temperature(buffer0);
herenvarno 4:3fecfc9eeadd 297 myrawdata.str_humidity(buffer1);
herenvarno 4:3fecfc9eeadd 298 if(flag_flash)
herenvarno 4:3fecfc9eeadd 299 {
herenvarno 4:3fecfc9eeadd 300 if(config_index==0)
herenvarno 4:3fecfc9eeadd 301 {
herenvarno 4:3fecfc9eeadd 302 buffer0[2]=0xff;
herenvarno 4:3fecfc9eeadd 303 }
herenvarno 4:3fecfc9eeadd 304 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 305 {
herenvarno 4:3fecfc9eeadd 306 buffer0[3]=0xff;
herenvarno 4:3fecfc9eeadd 307 }
herenvarno 4:3fecfc9eeadd 308 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 309 {
herenvarno 4:3fecfc9eeadd 310 buffer0[4]=0xff;
herenvarno 4:3fecfc9eeadd 311 }
herenvarno 4:3fecfc9eeadd 312 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 313 {
herenvarno 4:3fecfc9eeadd 314 buffer0[6]=0xff;
herenvarno 4:3fecfc9eeadd 315 }
herenvarno 4:3fecfc9eeadd 316 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 317 {
herenvarno 5:100310ea8fba 318 buffer1[3]=0xff;
herenvarno 4:3fecfc9eeadd 319 }
herenvarno 4:3fecfc9eeadd 320 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 321 {
herenvarno 5:100310ea8fba 322 buffer1[4]=0xff;
herenvarno 4:3fecfc9eeadd 323 }
herenvarno 4:3fecfc9eeadd 324 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 325 {
herenvarno 4:3fecfc9eeadd 326 buffer1[6]=0xff;
herenvarno 4:3fecfc9eeadd 327 }
herenvarno 4:3fecfc9eeadd 328 }
herenvarno 4:3fecfc9eeadd 329 }
herenvarno 5:100310ea8fba 330 else if(func==FUNC_ALTICDIR)
herenvarno 4:3fecfc9eeadd 331 {
herenvarno 5:100310ea8fba 332 myrawdata.str_altitude(buffer0);
herenvarno 4:3fecfc9eeadd 333 myrawdata.str_direction(buffer1);
herenvarno 5:100310ea8fba 334 if(flag_flash)
herenvarno 5:100310ea8fba 335 {
herenvarno 5:100310ea8fba 336 if(config_index==0)
herenvarno 5:100310ea8fba 337 {
herenvarno 5:100310ea8fba 338 buffer0[3]=0xff;
herenvarno 5:100310ea8fba 339 }
herenvarno 5:100310ea8fba 340 else if(config_index==1)
herenvarno 5:100310ea8fba 341 {
herenvarno 5:100310ea8fba 342 buffer0[4]=0xff;
herenvarno 5:100310ea8fba 343 }
herenvarno 5:100310ea8fba 344 else if(config_index==2)
herenvarno 5:100310ea8fba 345 {
herenvarno 5:100310ea8fba 346 buffer0[5]=0xff;
herenvarno 5:100310ea8fba 347 }
herenvarno 5:100310ea8fba 348 else if(config_index==3)
herenvarno 5:100310ea8fba 349 {
herenvarno 5:100310ea8fba 350 buffer0[6]=0xff;
herenvarno 5:100310ea8fba 351 }
herenvarno 5:100310ea8fba 352 }
herenvarno 4:3fecfc9eeadd 353 }
herenvarno 4:3fecfc9eeadd 354
herenvarno 4:3fecfc9eeadd 355 if(flag_flash)
herenvarno 4:3fecfc9eeadd 356 {
herenvarno 4:3fecfc9eeadd 357 flag_flash=0;
herenvarno 4:3fecfc9eeadd 358 }
herenvarno 4:3fecfc9eeadd 359 else
herenvarno 4:3fecfc9eeadd 360 {
herenvarno 4:3fecfc9eeadd 361 flag_flash=1;
herenvarno 3:4355890e55b4 362 }
herenvarno 3:4355890e55b4 363 mydisplay.show(buffer0, buffer1);
herenvarno 3:4355890e55b4 364 }
herenvarno 5:100310ea8fba 365 else
herenvarno 5:100310ea8fba 366 {
herenvarno 5:100310ea8fba 367 mydisplay.show("CALIBRATION", "START IN 3s ...");
herenvarno 5:100310ea8fba 368 wait(1);
herenvarno 5:100310ea8fba 369 mydisplay.show("CALIBRATION", "START IN 2s ...");
herenvarno 5:100310ea8fba 370 wait(1);
herenvarno 5:100310ea8fba 371 mydisplay.show("CALIBRATION", "START IN 1s ...");
herenvarno 5:100310ea8fba 372 wait(1);
herenvarno 5:100310ea8fba 373 mydisplay.show("CALIBRATION", "PHASE 1 ...");
herenvarno 5:100310ea8fba 374 int32_t acc[3]={0}, gyr[3]={0};
herenvarno 5:100310ea8fba 375 for(int i=0;i<100;i++)
herenvarno 5:100310ea8fba 376 {
herenvarno 5:100310ea8fba 377 int32_t acc_tmp[3]={0}, gyr_tmp[3]={0};
herenvarno 5:100310ea8fba 378 accelerometer->Get_X_Axes(acc_tmp);
herenvarno 5:100310ea8fba 379 gyroscope->Get_G_Axes(gyr_tmp);
herenvarno 5:100310ea8fba 380 acc[0] += acc_tmp[0];
herenvarno 5:100310ea8fba 381 acc[1] += acc_tmp[1];
herenvarno 5:100310ea8fba 382 acc[2] += acc_tmp[2];
herenvarno 5:100310ea8fba 383 gyr[0] += gyr_tmp[0];
herenvarno 5:100310ea8fba 384 gyr[1] += gyr_tmp[1];
herenvarno 5:100310ea8fba 385 gyr[2] += gyr_tmp[2];
herenvarno 5:100310ea8fba 386 wait(0.02);
herenvarno 5:100310ea8fba 387 }
herenvarno 5:100310ea8fba 388 myrawdata.__gyr_offset[0]=-gyr[0]/100;
herenvarno 5:100310ea8fba 389 myrawdata.__gyr_offset[1]=-gyr[1]/100;
herenvarno 5:100310ea8fba 390 myrawdata.__gyr_offset[2]=-gyr[2]/100;
herenvarno 5:100310ea8fba 391 myrawdata.__acc_offset[0]=-acc[0]/100;
herenvarno 5:100310ea8fba 392 myrawdata.__acc_offset[1]=-acc[1]/100;
herenvarno 5:100310ea8fba 393 myrawdata.__acc_offset[2]=1-acc[2]/100; // gravaty
herenvarno 5:100310ea8fba 394
herenvarno 5:100310ea8fba 395 mydisplay.show("CALIBRATION", "PHASE 2 ...");
herenvarno 5:100310ea8fba 396 int32_t mag_max[3]={-10000}, mag_min[3]={10000};
herenvarno 5:100310ea8fba 397 for(int i=0;i<500;i++)
herenvarno 5:100310ea8fba 398 {
herenvarno 5:100310ea8fba 399 int32_t mag_tmp[3]={0};
herenvarno 5:100310ea8fba 400 magnetometer->Get_M_Axes(mag_tmp);
herenvarno 5:100310ea8fba 401 mag_max[0]=mag_tmp[0]>mag_max[0]?mag_tmp[0]:mag_max[0];
herenvarno 5:100310ea8fba 402 mag_max[1]=mag_tmp[1]>mag_max[1]?mag_tmp[1]:mag_max[1];
herenvarno 5:100310ea8fba 403 mag_max[2]=mag_tmp[2]>mag_max[2]?mag_tmp[2]:mag_max[2];
herenvarno 5:100310ea8fba 404 mag_min[0]=mag_tmp[0]<mag_min[0]?mag_tmp[0]:mag_min[0];
herenvarno 5:100310ea8fba 405 mag_min[1]=mag_tmp[1]<mag_min[1]?mag_tmp[1]:mag_min[1];
herenvarno 5:100310ea8fba 406 mag_min[2]=mag_tmp[2]<mag_min[2]?mag_tmp[2]:mag_min[2];
herenvarno 5:100310ea8fba 407 wait(0.02);
herenvarno 5:100310ea8fba 408 }
herenvarno 5:100310ea8fba 409 myrawdata.__mag_offset[0]=-((mag_max[0]+mag_min[0])/2);
herenvarno 5:100310ea8fba 410 myrawdata.__mag_offset[1]=-((mag_max[1]+mag_min[1])/2);
herenvarno 5:100310ea8fba 411 myrawdata.__mag_offset[2]=-((mag_max[2]+mag_min[2])/2);
herenvarno 5:100310ea8fba 412
herenvarno 5:100310ea8fba 413 mode=MODE_NORMAL;
herenvarno 5:100310ea8fba 414 }
herenvarno 3:4355890e55b4 415
herenvarno 3:4355890e55b4 416 // NEXT STATE
herenvarno 3:4355890e55b4 417 if(mode==MODE_NORMAL)
herenvarno 3:4355890e55b4 418 {
herenvarno 5:100310ea8fba 419 if(fbtn==BTN_PRESSED_LONG)
herenvarno 3:4355890e55b4 420 {
herenvarno 3:4355890e55b4 421 mode=MODE_CONFIG;
herenvarno 3:4355890e55b4 422 }
herenvarno 3:4355890e55b4 423 else if(fbtn==BTN_PRESSED)
herenvarno 3:4355890e55b4 424 {
herenvarno 3:4355890e55b4 425 func=func+1;
herenvarno 5:100310ea8fba 426 if(func>FUNC_ALTICDIR)
herenvarno 3:4355890e55b4 427 func=FUNC_DATETIME;
herenvarno 3:4355890e55b4 428 }
herenvarno 5:100310ea8fba 429 else if(fbtn==BTN_PRESSED_VERY_LONG)
herenvarno 5:100310ea8fba 430 {
herenvarno 5:100310ea8fba 431 mode=MODE_CONFIG_AUTO;
herenvarno 5:100310ea8fba 432 }
herenvarno 3:4355890e55b4 433 }
herenvarno 5:100310ea8fba 434 else if(mode==MODE_CONFIG)
herenvarno 3:4355890e55b4 435 {
herenvarno 3:4355890e55b4 436 if(fbtn==BTN_PRESSED_VERY_LONG)
herenvarno 3:4355890e55b4 437 {
herenvarno 3:4355890e55b4 438 config_index=0;
herenvarno 3:4355890e55b4 439 mode=MODE_NORMAL;
herenvarno 3:4355890e55b4 440 }
herenvarno 3:4355890e55b4 441 else if(fbtn==BTN_PRESSED_LONG)
herenvarno 3:4355890e55b4 442 {
herenvarno 3:4355890e55b4 443 config_index+=1;
herenvarno 5:100310ea8fba 444 if(func==FUNC_DATETIME){
herenvarno 5:100310ea8fba 445 if(config_index>8)
herenvarno 5:100310ea8fba 446 {
herenvarno 5:100310ea8fba 447 config_index=0;
herenvarno 5:100310ea8fba 448 }
herenvarno 5:100310ea8fba 449 } else if(func== FUNC_TEMPHUMI){
herenvarno 5:100310ea8fba 450 if(config_index>6)
herenvarno 5:100310ea8fba 451 {
herenvarno 5:100310ea8fba 452 config_index=0;
herenvarno 5:100310ea8fba 453 }
herenvarno 5:100310ea8fba 454 } else if(func==FUNC_ALTICDIR){
herenvarno 5:100310ea8fba 455 if(config_index>3)
herenvarno 5:100310ea8fba 456 {
herenvarno 5:100310ea8fba 457 config_index=0;
herenvarno 5:100310ea8fba 458 }
herenvarno 4:3fecfc9eeadd 459 }
herenvarno 3:4355890e55b4 460 }
herenvarno 3:4355890e55b4 461 else if(fbtn==BTN_PRESSED)
herenvarno 3:4355890e55b4 462 {
herenvarno 3:4355890e55b4 463 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 464 {
herenvarno 3:4355890e55b4 465 if(config_index==0)
herenvarno 3:4355890e55b4 466 {
herenvarno 3:4355890e55b4 467 myrawdata.add_year_10();
herenvarno 3:4355890e55b4 468 }
herenvarno 3:4355890e55b4 469 else if(config_index==1)
herenvarno 3:4355890e55b4 470 {
herenvarno 3:4355890e55b4 471 myrawdata.add_year_1();
herenvarno 3:4355890e55b4 472 }
herenvarno 3:4355890e55b4 473 else if(config_index==2)
herenvarno 3:4355890e55b4 474 {
herenvarno 3:4355890e55b4 475 myrawdata.add_month();
herenvarno 3:4355890e55b4 476 }
herenvarno 3:4355890e55b4 477 else if(config_index==3)
herenvarno 3:4355890e55b4 478 {
herenvarno 3:4355890e55b4 479 myrawdata.add_day();
herenvarno 3:4355890e55b4 480 }
herenvarno 4:3fecfc9eeadd 481 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 482 {
herenvarno 4:3fecfc9eeadd 483 myrawdata.add_hour();
herenvarno 4:3fecfc9eeadd 484 }
herenvarno 4:3fecfc9eeadd 485 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 486 {
herenvarno 4:3fecfc9eeadd 487 myrawdata.add_min_10();
herenvarno 4:3fecfc9eeadd 488 }
herenvarno 4:3fecfc9eeadd 489 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 490 {
herenvarno 4:3fecfc9eeadd 491 myrawdata.add_min_1();
herenvarno 4:3fecfc9eeadd 492 }
herenvarno 4:3fecfc9eeadd 493 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 494 {
herenvarno 4:3fecfc9eeadd 495 myrawdata.add_sec_10();
herenvarno 4:3fecfc9eeadd 496 }
herenvarno 4:3fecfc9eeadd 497 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 498 {
herenvarno 4:3fecfc9eeadd 499 myrawdata.add_sec_1();
herenvarno 4:3fecfc9eeadd 500 }
herenvarno 4:3fecfc9eeadd 501 }
herenvarno 5:100310ea8fba 502 else if(func==FUNC_TEMPHUMI)
herenvarno 4:3fecfc9eeadd 503 {
herenvarno 4:3fecfc9eeadd 504 if(config_index==0)
herenvarno 4:3fecfc9eeadd 505 {
herenvarno 4:3fecfc9eeadd 506 myrawdata.add_temp_sign();
herenvarno 4:3fecfc9eeadd 507 }
herenvarno 4:3fecfc9eeadd 508 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 509 {
herenvarno 4:3fecfc9eeadd 510 myrawdata.add_temp_10();
herenvarno 4:3fecfc9eeadd 511 }
herenvarno 4:3fecfc9eeadd 512 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 513 {
herenvarno 4:3fecfc9eeadd 514 myrawdata.add_temp_1();
herenvarno 4:3fecfc9eeadd 515 }
herenvarno 4:3fecfc9eeadd 516 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 517 {
herenvarno 4:3fecfc9eeadd 518 myrawdata.add_temp_1_10();
herenvarno 4:3fecfc9eeadd 519 }
herenvarno 4:3fecfc9eeadd 520 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 521 {
herenvarno 5:100310ea8fba 522 myrawdata.add_humi_10();
herenvarno 4:3fecfc9eeadd 523 }
herenvarno 4:3fecfc9eeadd 524 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 525 {
herenvarno 5:100310ea8fba 526 myrawdata.add_humi_1();
herenvarno 4:3fecfc9eeadd 527 }
herenvarno 4:3fecfc9eeadd 528 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 529 {
herenvarno 4:3fecfc9eeadd 530 myrawdata.add_humi_1_10();
herenvarno 4:3fecfc9eeadd 531 }
herenvarno 5:100310ea8fba 532 }
herenvarno 5:100310ea8fba 533 else if(func==FUNC_ALTICDIR)
herenvarno 5:100310ea8fba 534 {
herenvarno 5:100310ea8fba 535 if(config_index==0)
herenvarno 5:100310ea8fba 536 {
herenvarno 5:100310ea8fba 537 myrawdata.add_altitude_1000();
herenvarno 5:100310ea8fba 538 }
herenvarno 5:100310ea8fba 539 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 540 {
herenvarno 5:100310ea8fba 541 myrawdata.add_altitude_100();
herenvarno 5:100310ea8fba 542 }
herenvarno 5:100310ea8fba 543 else if(config_index==2)
herenvarno 5:100310ea8fba 544 {
herenvarno 5:100310ea8fba 545 myrawdata.add_altitude_10();
herenvarno 5:100310ea8fba 546 }
herenvarno 5:100310ea8fba 547 else if(config_index==3)
herenvarno 5:100310ea8fba 548 {
herenvarno 5:100310ea8fba 549 myrawdata.add_altitude_1();
herenvarno 4:3fecfc9eeadd 550 }
herenvarno 3:4355890e55b4 551 }
herenvarno 3:4355890e55b4 552 }
herenvarno 3:4355890e55b4 553 }
herenvarno 5:100310ea8fba 554 else
herenvarno 5:100310ea8fba 555 {
herenvarno 5:100310ea8fba 556 ;
herenvarno 5:100310ea8fba 557 }
herenvarno 3:4355890e55b4 558
herenvarno 3:4355890e55b4 559 wait_action();
herenvarno 3:4355890e55b4 560 }
herenvarno 5:100310ea8fba 561
herenvarno 5:100310ea8fba 562 /*
herenvarno 3:4355890e55b4 563 raise_error(ERROR_CONFIG);
herenvarno 3:4355890e55b4 564
herenvarno 1:1df80fe13928 565 printf("START CALIBRATION\n");
herenvarno 1:1df80fe13928 566 int32_t m_max[3]={0};
herenvarno 1:1df80fe13928 567 int32_t m_min[3]={0};
herenvarno 1:1df80fe13928 568 for (int i=0; i<1000; i++)
herenvarno 1:1df80fe13928 569 {
herenvarno 1:1df80fe13928 570
herenvarno 1:1df80fe13928 571 magnetometer->Get_M_Axes(axes);
herenvarno 1:1df80fe13928 572 if(i==0)
herenvarno 1:1df80fe13928 573 {
herenvarno 1:1df80fe13928 574 for(int j=0; j<3; j++)
herenvarno 1:1df80fe13928 575 {
herenvarno 1:1df80fe13928 576 m_max[j]=axes[j];
herenvarno 1:1df80fe13928 577 m_min[j]=axes[j];
herenvarno 1:1df80fe13928 578 }
herenvarno 1:1df80fe13928 579 }
herenvarno 1:1df80fe13928 580 else
herenvarno 1:1df80fe13928 581 {
herenvarno 1:1df80fe13928 582 for(int j=0; j<3; j++)
herenvarno 1:1df80fe13928 583 {
herenvarno 1:1df80fe13928 584 if(axes[j]>m_max[j]) m_max[j]=axes[j];
herenvarno 1:1df80fe13928 585 if(axes[j]<m_min[j]) m_min[j]=axes[j];
herenvarno 1:1df80fe13928 586 }
herenvarno 1:1df80fe13928 587 }
herenvarno 1:1df80fe13928 588 wait(0.05);
herenvarno 1:1df80fe13928 589 }
herenvarno 1:1df80fe13928 590
herenvarno 1:1df80fe13928 591 printf("MAX : %d, %d, %d\n", m_max[0], m_max[1], m_max[2]);
herenvarno 1:1df80fe13928 592 printf("MIN : %d, %d, %d\n", m_min[0], m_min[1], m_min[2]);
herenvarno 1:1df80fe13928 593
herenvarno 0:99767aa66bce 594
herenvarno 0:99767aa66bce 595 while(1) {
herenvarno 0:99767aa66bce 596 if((mybutton!=0) && (button_mem==0))
herenvarno 0:99767aa66bce 597 {
herenvarno 0:99767aa66bce 598 func++;
herenvarno 0:99767aa66bce 599 if(func>=6)
herenvarno 0:99767aa66bce 600 func=0;
herenvarno 0:99767aa66bce 601 }
herenvarno 0:99767aa66bce 602 button_mem=mybutton;
herenvarno 0:99767aa66bce 603 printf("func: %d\r\n", func);
herenvarno 0:99767aa66bce 604 printf("\r\n");
herenvarno 0:99767aa66bce 605
herenvarno 0:99767aa66bce 606 if(func==0)
herenvarno 0:99767aa66bce 607 {
herenvarno 0:99767aa66bce 608 time_t seconds = time(NULL);
herenvarno 0:99767aa66bce 609 printf("Time as a basic string = %s\r\n", ctime(&seconds));
herenvarno 0:99767aa66bce 610 }
herenvarno 0:99767aa66bce 611 else if(func==1)
herenvarno 0:99767aa66bce 612 {
herenvarno 0:99767aa66bce 613 temp_sensor1->GetTemperature(&value1);
herenvarno 0:99767aa66bce 614 humidity_sensor->GetHumidity(&value2);
herenvarno 0:99767aa66bce 615
herenvarno 0:99767aa66bce 616 if(value2 > 70)
herenvarno 0:99767aa66bce 617 myled=1;
herenvarno 0:99767aa66bce 618 else
herenvarno 0:99767aa66bce 619 myled=0;
herenvarno 0:99767aa66bce 620 printf("HTS221: [temp] %7s C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
herenvarno 0:99767aa66bce 621 }
herenvarno 0:99767aa66bce 622 else if(func==2)
herenvarno 0:99767aa66bce 623 {
herenvarno 0:99767aa66bce 624 temp_sensor2->GetFahrenheit(&value1);
herenvarno 0:99767aa66bce 625 pressure_sensor->GetPressure(&value2);
herenvarno 0:99767aa66bce 626 printf("LPS25H: [temp] %7s F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
herenvarno 0:99767aa66bce 627 printf("Altitude: %s m\r\n", printDouble(buffer1, 44300-44300*pow((value2/1013.25), 0.00019)));
herenvarno 0:99767aa66bce 628 }
herenvarno 0:99767aa66bce 629 else if(func==3)
herenvarno 0:99767aa66bce 630 {
herenvarno 0:99767aa66bce 631 magnetometer->Get_M_Axes(axes);
herenvarno 1:1df80fe13928 632 axxx[0]=axes[0]-((m_max[0]+m_min[0])/2);
herenvarno 1:1df80fe13928 633 axxx[1]=axes[1]-((m_max[1]+m_min[1])/2);
herenvarno 1:1df80fe13928 634 axxx[2]=axes[2]-((m_max[2]+m_min[2])/2);
herenvarno 0:99767aa66bce 635 printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axxx[0], axxx[1], axxx[2]);
herenvarno 1:1df80fe13928 636 printf("DIR: %s deg\r\n", printDouble(buffer1, 90-atan(float(axxx[0])/float(axxx[1])/3.1416)));
herenvarno 0:99767aa66bce 637 }
herenvarno 0:99767aa66bce 638 else if(func==4)
herenvarno 0:99767aa66bce 639 {
herenvarno 0:99767aa66bce 640 accelerometer->Get_X_Axes(axes);
herenvarno 0:99767aa66bce 641 printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
herenvarno 0:99767aa66bce 642 }
herenvarno 0:99767aa66bce 643 else if(func==5)
herenvarno 0:99767aa66bce 644 {
herenvarno 0:99767aa66bce 645 gyroscope ->Get_G_Axes(axes);
herenvarno 0:99767aa66bce 646 printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
herenvarno 0:99767aa66bce 647 }
herenvarno 0:99767aa66bce 648 wait(1.5);
herenvarno 5:100310ea8fba 649 }*/
herenvarno 5:100310ea8fba 650
herenvarno 0:99767aa66bce 651 }