tiz

Dependencies:   TextLCD X_NUCLEO_IKS01A1 func mbed-src mbed

Fork of mas by esproj

Committer:
herenvarno
Date:
Mon Dec 14 18:54:42 2015 +0000
Revision:
4:3fecfc9eeadd
Parent:
3:4355890e55b4
Child:
5:100310ea8fba
add altitude;

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 3:4355890e55b4 114 if(fbtn_counter>0 and fbtn_counter<=10)
herenvarno 3:4355890e55b4 115 {
herenvarno 3:4355890e55b4 116 fbtn=BTN_PRESSED;
herenvarno 3:4355890e55b4 117 }
herenvarno 3:4355890e55b4 118 else if(fbtn_counter>10 and fbtn_counter<=30)
herenvarno 3:4355890e55b4 119 {
herenvarno 3:4355890e55b4 120 fbtn=BTN_PRESSED_LONG;
herenvarno 3:4355890e55b4 121 }
herenvarno 3:4355890e55b4 122 else if(fbtn_counter>30)
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 3:4355890e55b4 199
herenvarno 3:4355890e55b4 200
herenvarno 3:4355890e55b4 201
herenvarno 3:4355890e55b4 202
herenvarno 3:4355890e55b4 203
herenvarno 3:4355890e55b4 204
herenvarno 3:4355890e55b4 205
herenvarno 0:99767aa66bce 206
herenvarno 3:4355890e55b4 207 /*
herenvarno 0:99767aa66bce 208 printf("\r\n--- Starting new run ---\r\n");
herenvarno 0:99767aa66bce 209
herenvarno 0:99767aa66bce 210 humidity_sensor->ReadID(&id);
herenvarno 0:99767aa66bce 211 printf("HTS221 humidity & temperature = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 212 pressure_sensor->ReadID(&id);
herenvarno 0:99767aa66bce 213 printf("LPS25H pressure & temperature = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 214 magnetometer->ReadID(&id);
herenvarno 0:99767aa66bce 215 printf("LIS3MDL magnetometer = 0x%X\r\n", id);
herenvarno 0:99767aa66bce 216 gyroscope->ReadID(&id);
herenvarno 0:99767aa66bce 217 printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id);
herenvarno 3:4355890e55b4 218 */
herenvarno 3:4355890e55b4 219
herenvarno 3:4355890e55b4 220 while(1)
herenvarno 3:4355890e55b4 221 {
herenvarno 3:4355890e55b4 222 // MEASURE AND DISPLAY
herenvarno 3:4355890e55b4 223 if(mode==MODE_NORMAL)
herenvarno 3:4355890e55b4 224 {
herenvarno 3:4355890e55b4 225 myled=0;
herenvarno 3:4355890e55b4 226 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 227 {
herenvarno 3:4355890e55b4 228 myrawdata.__time=time(NULL);
herenvarno 3:4355890e55b4 229 myrawdata.str_date(buffer0);
herenvarno 3:4355890e55b4 230 myrawdata.str_time(buffer1);
herenvarno 3:4355890e55b4 231 }
herenvarno 3:4355890e55b4 232 else if(func==FUNC_TEMPHUMI)
herenvarno 3:4355890e55b4 233 {
herenvarno 3:4355890e55b4 234 temp_sensor1->GetTemperature(&myrawdata.__temp);
herenvarno 3:4355890e55b4 235 humidity_sensor->GetHumidity(&myrawdata.__humi);
herenvarno 3:4355890e55b4 236 myrawdata.str_temperature(buffer0);
herenvarno 3:4355890e55b4 237 myrawdata.str_humidity(buffer1);
herenvarno 3:4355890e55b4 238 }
herenvarno 3:4355890e55b4 239 else if(func==FUNC_PRESSURE)
herenvarno 3:4355890e55b4 240 {
herenvarno 3:4355890e55b4 241 pressure_sensor->GetPressure(&myrawdata.__pressure);
herenvarno 3:4355890e55b4 242 myrawdata.str_pressure(buffer0);
herenvarno 3:4355890e55b4 243 myrawdata.str_altitude(buffer1);
herenvarno 3:4355890e55b4 244 }
herenvarno 3:4355890e55b4 245 else if(func==FUNC_CPASSDIR)
herenvarno 3:4355890e55b4 246 {
herenvarno 3:4355890e55b4 247 magnetometer->Get_M_Axes(myrawdata.__mag);
herenvarno 3:4355890e55b4 248 accelerometer->Get_X_Axes(myrawdata.__acc);
herenvarno 3:4355890e55b4 249 gyroscope->Get_G_Axes(myrawdata.__gyr);
herenvarno 3:4355890e55b4 250 myrawdata.str_magnetic(buffer0);
herenvarno 3:4355890e55b4 251 myrawdata.str_direction(buffer1);
herenvarno 3:4355890e55b4 252 }
herenvarno 3:4355890e55b4 253 mydisplay.show(buffer0, buffer1);
herenvarno 3:4355890e55b4 254 }
herenvarno 3:4355890e55b4 255 else
herenvarno 3:4355890e55b4 256 {
herenvarno 3:4355890e55b4 257 myled=1;
herenvarno 3:4355890e55b4 258 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 259 {
herenvarno 3:4355890e55b4 260 myrawdata.str_date(buffer0);
herenvarno 3:4355890e55b4 261 myrawdata.str_time(buffer1);
herenvarno 4:3fecfc9eeadd 262 if(flag_flash)
herenvarno 4:3fecfc9eeadd 263 {
herenvarno 4:3fecfc9eeadd 264 if(config_index==0)
herenvarno 4:3fecfc9eeadd 265 {
herenvarno 4:3fecfc9eeadd 266 buffer0[0]=0xff;
herenvarno 4:3fecfc9eeadd 267 }
herenvarno 4:3fecfc9eeadd 268 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 269 {
herenvarno 4:3fecfc9eeadd 270 buffer0[1]=0xff;
herenvarno 4:3fecfc9eeadd 271 }
herenvarno 4:3fecfc9eeadd 272 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 273 {
herenvarno 4:3fecfc9eeadd 274 buffer0[3]=0xff;
herenvarno 4:3fecfc9eeadd 275 buffer0[4]=0xff;
herenvarno 4:3fecfc9eeadd 276 }
herenvarno 4:3fecfc9eeadd 277 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 278 {
herenvarno 4:3fecfc9eeadd 279 buffer0[6]=0xff;
herenvarno 4:3fecfc9eeadd 280 buffer0[7]=0xff;
herenvarno 4:3fecfc9eeadd 281 }
herenvarno 4:3fecfc9eeadd 282 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 283 {
herenvarno 4:3fecfc9eeadd 284 buffer1[0]=0xff;
herenvarno 4:3fecfc9eeadd 285 buffer1[1]=0xff;
herenvarno 4:3fecfc9eeadd 286 }
herenvarno 4:3fecfc9eeadd 287 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 288 {
herenvarno 4:3fecfc9eeadd 289 buffer1[3]=0xff;
herenvarno 4:3fecfc9eeadd 290 }
herenvarno 4:3fecfc9eeadd 291 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 292 {
herenvarno 4:3fecfc9eeadd 293 buffer1[4]=0xff;
herenvarno 4:3fecfc9eeadd 294 }
herenvarno 4:3fecfc9eeadd 295 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 296 {
herenvarno 4:3fecfc9eeadd 297 buffer1[6]=0xff;
herenvarno 4:3fecfc9eeadd 298 }
herenvarno 4:3fecfc9eeadd 299 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 300 {
herenvarno 4:3fecfc9eeadd 301 buffer1[7]=0xff;
herenvarno 4:3fecfc9eeadd 302 }
herenvarno 4:3fecfc9eeadd 303 }
herenvarno 4:3fecfc9eeadd 304 }
herenvarno 4:3fecfc9eeadd 305 if(func==FUNC_TEMPHUMI)
herenvarno 4:3fecfc9eeadd 306 {
herenvarno 4:3fecfc9eeadd 307 myrawdata.str_temperature(buffer0);
herenvarno 4:3fecfc9eeadd 308 myrawdata.str_humidity(buffer1);
herenvarno 4:3fecfc9eeadd 309 if(flag_flash)
herenvarno 4:3fecfc9eeadd 310 {
herenvarno 4:3fecfc9eeadd 311 if(config_index==0)
herenvarno 4:3fecfc9eeadd 312 {
herenvarno 4:3fecfc9eeadd 313 buffer0[2]=0xff;
herenvarno 4:3fecfc9eeadd 314 }
herenvarno 4:3fecfc9eeadd 315 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 316 {
herenvarno 4:3fecfc9eeadd 317 buffer0[3]=0xff;
herenvarno 4:3fecfc9eeadd 318 }
herenvarno 4:3fecfc9eeadd 319 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 320 {
herenvarno 4:3fecfc9eeadd 321 buffer0[4]=0xff;
herenvarno 4:3fecfc9eeadd 322 }
herenvarno 4:3fecfc9eeadd 323 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 324 {
herenvarno 4:3fecfc9eeadd 325 buffer0[6]=0xff;
herenvarno 4:3fecfc9eeadd 326 }
herenvarno 4:3fecfc9eeadd 327 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 328 {
herenvarno 4:3fecfc9eeadd 329 buffer0[7]=0xff;
herenvarno 4:3fecfc9eeadd 330 }
herenvarno 4:3fecfc9eeadd 331 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 332 {
herenvarno 4:3fecfc9eeadd 333 buffer1[3]=0xff;
herenvarno 4:3fecfc9eeadd 334 }
herenvarno 4:3fecfc9eeadd 335 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 336 {
herenvarno 4:3fecfc9eeadd 337 buffer1[4]=0xff;
herenvarno 4:3fecfc9eeadd 338 }
herenvarno 4:3fecfc9eeadd 339 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 340 {
herenvarno 4:3fecfc9eeadd 341 buffer1[6]=0xff;
herenvarno 4:3fecfc9eeadd 342 }
herenvarno 4:3fecfc9eeadd 343 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 344 {
herenvarno 4:3fecfc9eeadd 345 buffer1[7]=0xff;
herenvarno 4:3fecfc9eeadd 346 }
herenvarno 4:3fecfc9eeadd 347 }
herenvarno 4:3fecfc9eeadd 348 }
herenvarno 4:3fecfc9eeadd 349 else if(func==FUNC_CPASSDIR)
herenvarno 4:3fecfc9eeadd 350 {
herenvarno 4:3fecfc9eeadd 351 mydisplay.show("CALIBRATION", "START IN 3s ...");
herenvarno 4:3fecfc9eeadd 352 wait(1);
herenvarno 4:3fecfc9eeadd 353 mydisplay.show("CALIBRATION", "START IN 3s ...");
herenvarno 4:3fecfc9eeadd 354 wait(1);
herenvarno 4:3fecfc9eeadd 355 mydisplay.show("CALIBRATION", "START IN 3s ...");
herenvarno 4:3fecfc9eeadd 356 wait(1);
herenvarno 4:3fecfc9eeadd 357 mydisplay.show("CALIBRATION", "PHASE 1 ...");
herenvarno 4:3fecfc9eeadd 358 wait(3);
herenvarno 4:3fecfc9eeadd 359 mydisplay.show("CALIBRATION", "PHASE 2 ...");
herenvarno 4:3fecfc9eeadd 360 wait(3);
herenvarno 4:3fecfc9eeadd 361
herenvarno 4:3fecfc9eeadd 362 mode=MODE_NORMAL;
herenvarno 4:3fecfc9eeadd 363 myrawdata.str_magnetic(buffer0);
herenvarno 4:3fecfc9eeadd 364 myrawdata.str_direction(buffer1);
herenvarno 4:3fecfc9eeadd 365 }
herenvarno 4:3fecfc9eeadd 366
herenvarno 4:3fecfc9eeadd 367 if(flag_flash)
herenvarno 4:3fecfc9eeadd 368 {
herenvarno 4:3fecfc9eeadd 369 flag_flash=0;
herenvarno 4:3fecfc9eeadd 370 }
herenvarno 4:3fecfc9eeadd 371 else
herenvarno 4:3fecfc9eeadd 372 {
herenvarno 4:3fecfc9eeadd 373 flag_flash=1;
herenvarno 3:4355890e55b4 374 }
herenvarno 3:4355890e55b4 375 mydisplay.show(buffer0, buffer1);
herenvarno 3:4355890e55b4 376 }
herenvarno 3:4355890e55b4 377
herenvarno 3:4355890e55b4 378 // NEXT STATE
herenvarno 3:4355890e55b4 379 if(mode==MODE_NORMAL)
herenvarno 3:4355890e55b4 380 {
herenvarno 3:4355890e55b4 381 if(fbtn==BTN_PRESSED_LONG || fbtn==BTN_PRESSED_VERY_LONG)
herenvarno 3:4355890e55b4 382 {
herenvarno 3:4355890e55b4 383 mode=MODE_CONFIG;
herenvarno 3:4355890e55b4 384 }
herenvarno 3:4355890e55b4 385 else if(fbtn==BTN_PRESSED)
herenvarno 3:4355890e55b4 386 {
herenvarno 3:4355890e55b4 387 func=func+1;
herenvarno 3:4355890e55b4 388 if(func>FUNC_CPASSDIR)
herenvarno 3:4355890e55b4 389 func=FUNC_DATETIME;
herenvarno 3:4355890e55b4 390 }
herenvarno 3:4355890e55b4 391 }
herenvarno 3:4355890e55b4 392 else
herenvarno 3:4355890e55b4 393 {
herenvarno 3:4355890e55b4 394 if(fbtn==BTN_PRESSED_VERY_LONG)
herenvarno 3:4355890e55b4 395 {
herenvarno 3:4355890e55b4 396 config_index=0;
herenvarno 3:4355890e55b4 397 mode=MODE_NORMAL;
herenvarno 3:4355890e55b4 398 }
herenvarno 3:4355890e55b4 399 else if(fbtn==BTN_PRESSED_LONG)
herenvarno 3:4355890e55b4 400 {
herenvarno 3:4355890e55b4 401 config_index+=1;
herenvarno 4:3fecfc9eeadd 402 if(config_index>8)
herenvarno 4:3fecfc9eeadd 403 {
herenvarno 4:3fecfc9eeadd 404 config_index=0;
herenvarno 4:3fecfc9eeadd 405 }
herenvarno 3:4355890e55b4 406 }
herenvarno 3:4355890e55b4 407 else if(fbtn==BTN_PRESSED)
herenvarno 3:4355890e55b4 408 {
herenvarno 3:4355890e55b4 409 if(func==FUNC_DATETIME)
herenvarno 3:4355890e55b4 410 {
herenvarno 3:4355890e55b4 411 if(config_index==0)
herenvarno 3:4355890e55b4 412 {
herenvarno 3:4355890e55b4 413 myrawdata.add_year_10();
herenvarno 3:4355890e55b4 414 }
herenvarno 3:4355890e55b4 415 else if(config_index==1)
herenvarno 3:4355890e55b4 416 {
herenvarno 3:4355890e55b4 417 myrawdata.add_year_1();
herenvarno 3:4355890e55b4 418 }
herenvarno 3:4355890e55b4 419 else if(config_index==2)
herenvarno 3:4355890e55b4 420 {
herenvarno 3:4355890e55b4 421 myrawdata.add_month();
herenvarno 3:4355890e55b4 422 }
herenvarno 3:4355890e55b4 423 else if(config_index==3)
herenvarno 3:4355890e55b4 424 {
herenvarno 3:4355890e55b4 425 myrawdata.add_day();
herenvarno 3:4355890e55b4 426 }
herenvarno 4:3fecfc9eeadd 427 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 428 {
herenvarno 4:3fecfc9eeadd 429 myrawdata.add_hour();
herenvarno 4:3fecfc9eeadd 430 }
herenvarno 4:3fecfc9eeadd 431 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 432 {
herenvarno 4:3fecfc9eeadd 433 myrawdata.add_min_10();
herenvarno 4:3fecfc9eeadd 434 }
herenvarno 4:3fecfc9eeadd 435 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 436 {
herenvarno 4:3fecfc9eeadd 437 myrawdata.add_min_1();
herenvarno 4:3fecfc9eeadd 438 }
herenvarno 4:3fecfc9eeadd 439 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 440 {
herenvarno 4:3fecfc9eeadd 441 myrawdata.add_sec_10();
herenvarno 4:3fecfc9eeadd 442 }
herenvarno 4:3fecfc9eeadd 443 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 444 {
herenvarno 4:3fecfc9eeadd 445 myrawdata.add_sec_1();
herenvarno 4:3fecfc9eeadd 446 }
herenvarno 4:3fecfc9eeadd 447 }
herenvarno 4:3fecfc9eeadd 448 if(func==FUNC_TEMPHUMI)
herenvarno 4:3fecfc9eeadd 449 {
herenvarno 4:3fecfc9eeadd 450 if(config_index==0)
herenvarno 4:3fecfc9eeadd 451 {
herenvarno 4:3fecfc9eeadd 452 myrawdata.add_temp_sign();
herenvarno 4:3fecfc9eeadd 453 }
herenvarno 4:3fecfc9eeadd 454 else if(config_index==1)
herenvarno 4:3fecfc9eeadd 455 {
herenvarno 4:3fecfc9eeadd 456 myrawdata.add_temp_10();
herenvarno 4:3fecfc9eeadd 457 }
herenvarno 4:3fecfc9eeadd 458 else if(config_index==2)
herenvarno 4:3fecfc9eeadd 459 {
herenvarno 4:3fecfc9eeadd 460 myrawdata.add_temp_1();
herenvarno 4:3fecfc9eeadd 461 }
herenvarno 4:3fecfc9eeadd 462 else if(config_index==3)
herenvarno 4:3fecfc9eeadd 463 {
herenvarno 4:3fecfc9eeadd 464 myrawdata.add_temp_1_10();
herenvarno 4:3fecfc9eeadd 465 }
herenvarno 4:3fecfc9eeadd 466 else if(config_index==4)
herenvarno 4:3fecfc9eeadd 467 {
herenvarno 4:3fecfc9eeadd 468 myrawdata.add_temp_1_100();
herenvarno 4:3fecfc9eeadd 469 }
herenvarno 4:3fecfc9eeadd 470 else if(config_index==5)
herenvarno 4:3fecfc9eeadd 471 {
herenvarno 4:3fecfc9eeadd 472 myrawdata.add_humi_10();
herenvarno 4:3fecfc9eeadd 473 }
herenvarno 4:3fecfc9eeadd 474 else if(config_index==6)
herenvarno 4:3fecfc9eeadd 475 {
herenvarno 4:3fecfc9eeadd 476 myrawdata.add_humi_1();
herenvarno 4:3fecfc9eeadd 477 }
herenvarno 4:3fecfc9eeadd 478 else if(config_index==7)
herenvarno 4:3fecfc9eeadd 479 {
herenvarno 4:3fecfc9eeadd 480 myrawdata.add_humi_1_10();
herenvarno 4:3fecfc9eeadd 481 }
herenvarno 4:3fecfc9eeadd 482 else if(config_index==8)
herenvarno 4:3fecfc9eeadd 483 {
herenvarno 4:3fecfc9eeadd 484 myrawdata.add_humi_1_100();
herenvarno 4:3fecfc9eeadd 485 }
herenvarno 3:4355890e55b4 486 }
herenvarno 3:4355890e55b4 487 }
herenvarno 3:4355890e55b4 488 }
herenvarno 3:4355890e55b4 489
herenvarno 3:4355890e55b4 490 wait_action();
herenvarno 3:4355890e55b4 491 }
herenvarno 3:4355890e55b4 492
herenvarno 3:4355890e55b4 493 raise_error(ERROR_CONFIG);
herenvarno 3:4355890e55b4 494
herenvarno 1:1df80fe13928 495 printf("START CALIBRATION\n");
herenvarno 1:1df80fe13928 496 int32_t m_max[3]={0};
herenvarno 1:1df80fe13928 497 int32_t m_min[3]={0};
herenvarno 1:1df80fe13928 498 for (int i=0; i<1000; i++)
herenvarno 1:1df80fe13928 499 {
herenvarno 1:1df80fe13928 500
herenvarno 1:1df80fe13928 501 magnetometer->Get_M_Axes(axes);
herenvarno 1:1df80fe13928 502 if(i==0)
herenvarno 1:1df80fe13928 503 {
herenvarno 1:1df80fe13928 504 for(int j=0; j<3; j++)
herenvarno 1:1df80fe13928 505 {
herenvarno 1:1df80fe13928 506 m_max[j]=axes[j];
herenvarno 1:1df80fe13928 507 m_min[j]=axes[j];
herenvarno 1:1df80fe13928 508 }
herenvarno 1:1df80fe13928 509 }
herenvarno 1:1df80fe13928 510 else
herenvarno 1:1df80fe13928 511 {
herenvarno 1:1df80fe13928 512 for(int j=0; j<3; j++)
herenvarno 1:1df80fe13928 513 {
herenvarno 1:1df80fe13928 514 if(axes[j]>m_max[j]) m_max[j]=axes[j];
herenvarno 1:1df80fe13928 515 if(axes[j]<m_min[j]) m_min[j]=axes[j];
herenvarno 1:1df80fe13928 516 }
herenvarno 1:1df80fe13928 517 }
herenvarno 1:1df80fe13928 518 wait(0.05);
herenvarno 1:1df80fe13928 519 }
herenvarno 1:1df80fe13928 520
herenvarno 1:1df80fe13928 521 printf("MAX : %d, %d, %d\n", m_max[0], m_max[1], m_max[2]);
herenvarno 1:1df80fe13928 522 printf("MIN : %d, %d, %d\n", m_min[0], m_min[1], m_min[2]);
herenvarno 1:1df80fe13928 523
herenvarno 0:99767aa66bce 524
herenvarno 0:99767aa66bce 525 while(1) {
herenvarno 0:99767aa66bce 526 if((mybutton!=0) && (button_mem==0))
herenvarno 0:99767aa66bce 527 {
herenvarno 0:99767aa66bce 528 func++;
herenvarno 0:99767aa66bce 529 if(func>=6)
herenvarno 0:99767aa66bce 530 func=0;
herenvarno 0:99767aa66bce 531 }
herenvarno 0:99767aa66bce 532 button_mem=mybutton;
herenvarno 0:99767aa66bce 533 printf("func: %d\r\n", func);
herenvarno 0:99767aa66bce 534 printf("\r\n");
herenvarno 0:99767aa66bce 535
herenvarno 0:99767aa66bce 536 if(func==0)
herenvarno 0:99767aa66bce 537 {
herenvarno 0:99767aa66bce 538 time_t seconds = time(NULL);
herenvarno 0:99767aa66bce 539 printf("Time as a basic string = %s\r\n", ctime(&seconds));
herenvarno 0:99767aa66bce 540 }
herenvarno 0:99767aa66bce 541 else if(func==1)
herenvarno 0:99767aa66bce 542 {
herenvarno 0:99767aa66bce 543 temp_sensor1->GetTemperature(&value1);
herenvarno 0:99767aa66bce 544 humidity_sensor->GetHumidity(&value2);
herenvarno 0:99767aa66bce 545
herenvarno 0:99767aa66bce 546 if(value2 > 70)
herenvarno 0:99767aa66bce 547 myled=1;
herenvarno 0:99767aa66bce 548 else
herenvarno 0:99767aa66bce 549 myled=0;
herenvarno 0:99767aa66bce 550 printf("HTS221: [temp] %7s C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
herenvarno 0:99767aa66bce 551 }
herenvarno 0:99767aa66bce 552 else if(func==2)
herenvarno 0:99767aa66bce 553 {
herenvarno 0:99767aa66bce 554 temp_sensor2->GetFahrenheit(&value1);
herenvarno 0:99767aa66bce 555 pressure_sensor->GetPressure(&value2);
herenvarno 0:99767aa66bce 556 printf("LPS25H: [temp] %7s F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
herenvarno 0:99767aa66bce 557 printf("Altitude: %s m\r\n", printDouble(buffer1, 44300-44300*pow((value2/1013.25), 0.00019)));
herenvarno 0:99767aa66bce 558 }
herenvarno 0:99767aa66bce 559 else if(func==3)
herenvarno 0:99767aa66bce 560 {
herenvarno 0:99767aa66bce 561 magnetometer->Get_M_Axes(axes);
herenvarno 1:1df80fe13928 562 axxx[0]=axes[0]-((m_max[0]+m_min[0])/2);
herenvarno 1:1df80fe13928 563 axxx[1]=axes[1]-((m_max[1]+m_min[1])/2);
herenvarno 1:1df80fe13928 564 axxx[2]=axes[2]-((m_max[2]+m_min[2])/2);
herenvarno 0:99767aa66bce 565 printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axxx[0], axxx[1], axxx[2]);
herenvarno 1:1df80fe13928 566 printf("DIR: %s deg\r\n", printDouble(buffer1, 90-atan(float(axxx[0])/float(axxx[1])/3.1416)));
herenvarno 0:99767aa66bce 567 }
herenvarno 0:99767aa66bce 568 else if(func==4)
herenvarno 0:99767aa66bce 569 {
herenvarno 0:99767aa66bce 570 accelerometer->Get_X_Axes(axes);
herenvarno 0:99767aa66bce 571 printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
herenvarno 0:99767aa66bce 572 }
herenvarno 0:99767aa66bce 573 else if(func==5)
herenvarno 0:99767aa66bce 574 {
herenvarno 0:99767aa66bce 575 gyroscope ->Get_G_Axes(axes);
herenvarno 0:99767aa66bce 576 printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
herenvarno 0:99767aa66bce 577 }
herenvarno 0:99767aa66bce 578 wait(1.5);
herenvarno 0:99767aa66bce 579 }
herenvarno 0:99767aa66bce 580 }