21/02/18 definitivo

Dependencies:   X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1 by ST

Committer:
gallonm
Date:
Wed Oct 28 13:23:58 2015 +0100
Revision:
15:b94bc967fecd
Parent:
14:946e62f44f4f
Child:
16:fbf61b7c65ba
Removed Serial pc.
Introduced an interrupt, handled by user button, to stop measurement in interrupt operating mode.
Introduced als polling measurement in hand gesture test application.
Updated main.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gallonm 0:83c628a58feb 1 #include "mbed.h"
gallonm 8:4c05f7a5bb60 2 #include "x_nucleo_6180xa1.h"
gallonm 14:946e62f44f4f 3 #include "HmiBBGesture.h"
gallonm 4:ccd62fd7e137 4 #include <string.h>
gallonm 4:ccd62fd7e137 5 #include <stdlib.h>
gallonm 4:ccd62fd7e137 6 #include <stdio.h>
gallonm 8:4c05f7a5bb60 7 #include <assert.h>
gallonm 8:4c05f7a5bb60 8
gallonm 14:946e62f44f4f 9 /* Polling operating modes don`t require callback function that handles IRQ
gallonm 14:946e62f44f4f 10 Callback functions are used only for measure that require interrupt */
gallonm 14:946e62f44f4f 11
gallonm 5:fa65d931bd96 12 #define VL6180X_I2C_SDA I2C_SDA
gallonm 5:fa65d931bd96 13 #define VL6180X_I2C_SCL I2C_SCL
gallonm 5:fa65d931bd96 14
gallonm 10:5319abadb31e 15 //#define RANGE_SINGLE_SHOT_POLLING
gallonm 10:5319abadb31e 16 //#define ALS_SINGLE_SHOT_POLLING
gallonm 10:5319abadb31e 17 //#define RANGE_CONTINUOUS_POLLING
gallonm 10:5319abadb31e 18 //#define ALS_CONTINUOUS_POLLING
gallonm 10:5319abadb31e 19 //#define RANGE_CONTINUOUS_INTERRUPT
gallonm 14:946e62f44f4f 20 //#define ALS_CONTINUOUS_INTERRUPT
gallonm 11:657dbe7bf245 21 //#define INTERLEAVED_MODE_INTERRUPT
gallonm 10:5319abadb31e 22 //#define RANGE_CONTINUOUS_POLLING_LOW_THRESHOLD
gallonm 10:5319abadb31e 23 //#define RANGE_CONTINUOUS_POLLING_HIGH_THRESHOLD
gallonm 10:5319abadb31e 24 //#define RANGE_CONTINUOUS_POLLING_OUT_OF_WINDOW
gallonm 10:5319abadb31e 25 //#define ALS_CONTINUOUS_POLLING_LOW_THRESHOLD
gallonm 10:5319abadb31e 26 //#define ALS_CONTINUOUS_POLLING_HIGH_THRESHOLD
gallonm 10:5319abadb31e 27 //#define ALS_CONTINUOUS_POLLING_OUT_OF_WINDOW
gallonm 10:5319abadb31e 28 //#define RANGE_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
gallonm 10:5319abadb31e 29 //#define RANGE_CONTINUOUS_INTERRUPT_HIGH_THRESHOLD
gallonm 10:5319abadb31e 30 //#define RANGE_CONTINUOUS_INTERRUPT_OUT_OF_WINDOW
gallonm 10:5319abadb31e 31 //#define ALS_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
gallonm 10:5319abadb31e 32 //#define ALS_CONTINUOUS_INTERRUPT_HIGH_THRESHOLD
gallonm 10:5319abadb31e 33 //#define ALS_CONTINUOUS_INTERRUPT_OUT_OF_WINDOW
gallonm 14:946e62f44f4f 34 #define HAND_GESTURE
gallonm 10:5319abadb31e 35
gallonm 14:946e62f44f4f 36 /* timer and digital out pin used for debugging */
gallonm 14:946e62f44f4f 37 //Timer timer;
gallonm 14:946e62f44f4f 38 //int start, end;
gallonm 14:946e62f44f4f 39 //DigitalOut pin(PA_15);
gallonm 5:fa65d931bd96 40
gallonm 8:4c05f7a5bb60 41 DevI2C device_i2c(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
gallonm 9:1d0e839edee8 42 static X_NUCLEO_6180XA1 *board=X_NUCLEO_6180XA1::Instance(&device_i2c);
gallonm 9:1d0e839edee8 43
gallonm 14:946e62f44f4f 44 HmiBBGesture gesture_reco;
gallonm 9:1d0e839edee8 45
gallonm 14:946e62f44f4f 46 MeasureData_t data_sensor_top, data_sensor_bottom, data_sensor_left, data_sensor_right;
gallonm 11:657dbe7bf245 47
gallonm 15:b94bc967fecd 48 /* flags that handle interrupt request */
gallonm 15:b94bc967fecd 49 bool flag_sensor_top=false, flag_sensor_bottom=false, flag_sensor_left=false, flag_sensor_right=false, flag_stop_measure=false;
gallonm 15:b94bc967fecd 50
gallonm 15:b94bc967fecd 51 /* user button used to stop measurements in interrupt mode */
gallonm 15:b94bc967fecd 52 InterruptIn stop_button(USER_BUTTON);
gallonm 9:1d0e839edee8 53
gallonm 9:1d0e839edee8 54 /* callback functions of the sensors */
gallonm 15:b94bc967fecd 55 void SensorTopIRQ(void)
gallonm 9:1d0e839edee8 56 {
gallonm 11:657dbe7bf245 57 flag_sensor_top=true;
gallonm 14:946e62f44f4f 58 board->sensor_top->DisableInterruptMeasureDetectionIRQ();
gallonm 9:1d0e839edee8 59 }
gallonm 9:1d0e839edee8 60
gallonm 15:b94bc967fecd 61 void SensorBottomIRQ(void)
gallonm 11:657dbe7bf245 62 {
gallonm 11:657dbe7bf245 63 flag_sensor_bottom=true;
gallonm 14:946e62f44f4f 64 board->sensor_bottom->DisableInterruptMeasureDetectionIRQ();
gallonm 11:657dbe7bf245 65 }
gallonm 11:657dbe7bf245 66
gallonm 15:b94bc967fecd 67 void SensorLeftIRQ(void)
gallonm 11:657dbe7bf245 68 {
gallonm 11:657dbe7bf245 69 flag_sensor_left=true;
gallonm 14:946e62f44f4f 70 board->sensor_left->DisableInterruptMeasureDetectionIRQ();
gallonm 11:657dbe7bf245 71 }
gallonm 11:657dbe7bf245 72
gallonm 15:b94bc967fecd 73 void SensorRightIRQ(void)
gallonm 11:657dbe7bf245 74 {
gallonm 11:657dbe7bf245 75 flag_sensor_right=true;
gallonm 14:946e62f44f4f 76 board->sensor_right->DisableInterruptMeasureDetectionIRQ();
gallonm 11:657dbe7bf245 77 }
gallonm 9:1d0e839edee8 78
gallonm 15:b94bc967fecd 79 void StopMeasureIRQ(void)
gallonm 15:b94bc967fecd 80 {
gallonm 15:b94bc967fecd 81 flag_stop_measure=true;
gallonm 15:b94bc967fecd 82 }
gallonm 14:946e62f44f4f 83
gallonm 4:ccd62fd7e137 84 int main()
gallonm 5:fa65d931bd96 85 {
gallonm 14:946e62f44f4f 86 int status, status_t, status_b, status_l, status_r;
gallonm 14:946e62f44f4f 87
gallonm 15:b94bc967fecd 88 //device_i2c.frequency(400000); //change i2c frequncy from 100kHz to 400kHz
gallonm 14:946e62f44f4f 89 pc.baud(115200); //change baudrate of the printf
gallonm 14:946e62f44f4f 90
gallonm 10:5319abadb31e 91 status=board->InitBoard();
gallonm 14:946e62f44f4f 92 if(status)
gallonm 15:b94bc967fecd 93 printf("Failed to init the board!\n\r");
gallonm 10:5319abadb31e 94
gallonm 10:5319abadb31e 95 #ifdef RANGE_SINGLE_SHOT_POLLING
gallonm 14:946e62f44f4f 96 status_t=board->sensor_top->StartMeasurement(range_single_shot_polling, NULL, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 97 if(!status_t)
gallonm 14:946e62f44f4f 98 printf("Top Range: %dmm\n\r",data_sensor_top.range_mm);
gallonm 14:946e62f44f4f 99 else if(status==INVALID_PARAMS)
gallonm 14:946e62f44f4f 100 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 101 else
gallonm 14:946e62f44f4f 102 printf("Invalid range value!\n\r");
gallonm 14:946e62f44f4f 103 status_t=board->sensor_top->StopMeasurement(range_single_shot_polling);
gallonm 14:946e62f44f4f 104 if(status_t)
gallonm 14:946e62f44f4f 105 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 106 #endif
gallonm 9:1d0e839edee8 107
gallonm 10:5319abadb31e 108 #ifdef ALS_SINGLE_SHOT_POLLING
gallonm 14:946e62f44f4f 109 status_t=board->sensor_top->StartMeasurement(als_single_shot_polling, NULL, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 110 if(!status_t)
gallonm 15:b94bc967fecd 111 printf("Top Light: %d lux\n\r",data_sensor_top.lux);
gallonm 14:946e62f44f4f 112 else if(status==INVALID_PARAMS)
gallonm 14:946e62f44f4f 113 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 114 else
gallonm 14:946e62f44f4f 115 printf("Invalid light value!\n\r");
gallonm 14:946e62f44f4f 116 status_t=board->sensor_top->StopMeasurement(als_single_shot_polling);
gallonm 14:946e62f44f4f 117 if(status_t)
gallonm 14:946e62f44f4f 118 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 119 #endif
gallonm 10:5319abadb31e 120
gallonm 10:5319abadb31e 121 #ifdef RANGE_CONTINUOUS_POLLING
gallonm 14:946e62f44f4f 122 status_t=board->sensor_top->StartMeasurement(range_continuous_polling, NULL, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 123 if(!status_t)
gallonm 14:946e62f44f4f 124 {
gallonm 14:946e62f44f4f 125 int i;
gallonm 14:946e62f44f4f 126 for(i=0;i<10;i++)
gallonm 14:946e62f44f4f 127 {
gallonm 14:946e62f44f4f 128 status_t=board->sensor_top->GetMeasurement(range_continuous_polling, &data_sensor_top);
gallonm 11:657dbe7bf245 129 if(!status_t)
gallonm 14:946e62f44f4f 130 printf("Top Range measure %d: %dmm\n\r",i+1,data_sensor_top.range_mm);
gallonm 14:946e62f44f4f 131 else
gallonm 14:946e62f44f4f 132 printf("Invalid range value!\n\r");
gallonm 14:946e62f44f4f 133 }
gallonm 10:5319abadb31e 134 }
gallonm 14:946e62f44f4f 135 else
gallonm 14:946e62f44f4f 136 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 137 status_t=board->sensor_top->StopMeasurement(range_continuous_polling);
gallonm 14:946e62f44f4f 138 if(status_t)
gallonm 14:946e62f44f4f 139 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 140 #endif
gallonm 10:5319abadb31e 141
gallonm 10:5319abadb31e 142 #ifdef ALS_CONTINUOUS_POLLING
gallonm 14:946e62f44f4f 143 status_t=board->sensor_top->StartMeasurement(als_continuous_polling, NULL, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 144 if(!status_t)
gallonm 14:946e62f44f4f 145 {
gallonm 14:946e62f44f4f 146 int i;
gallonm 14:946e62f44f4f 147 for(i=0;i<10;i++)
gallonm 14:946e62f44f4f 148 {
gallonm 14:946e62f44f4f 149 status=board->sensor_top->GetMeasurement(als_continuous_polling, &data_sensor_top);
gallonm 11:657dbe7bf245 150 if(!status_t)
gallonm 15:b94bc967fecd 151 printf("Top Light measure %d: %d lux\n\r",i,data_sensor_top.lux);
gallonm 14:946e62f44f4f 152 else
gallonm 14:946e62f44f4f 153 printf("Invalid light value!\n\r");
gallonm 14:946e62f44f4f 154 }
gallonm 9:1d0e839edee8 155 }
gallonm 14:946e62f44f4f 156 else
gallonm 14:946e62f44f4f 157 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 158 status_t=board->sensor_top->StopMeasurement(als_continuous_polling);
gallonm 14:946e62f44f4f 159 if(status_t)
gallonm 14:946e62f44f4f 160 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 161 #endif
gallonm 11:657dbe7bf245 162
gallonm 11:657dbe7bf245 163 #ifdef RANGE_CONTINUOUS_INTERRUPT
gallonm 15:b94bc967fecd 164 stop_button.rise(&StopMeasureIRQ);
gallonm 14:946e62f44f4f 165 status=board->sensor_top->StartMeasurement(range_continuous_interrupt, SensorTopIRQ, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 166 if(!status)
gallonm 14:946e62f44f4f 167 {
gallonm 14:946e62f44f4f 168 while(1)
gallonm 14:946e62f44f4f 169 {
gallonm 14:946e62f44f4f 170 if(flag_sensor_top)
gallonm 14:946e62f44f4f 171 {
gallonm 14:946e62f44f4f 172 flag_sensor_top=false;
gallonm 14:946e62f44f4f 173 status=board->sensor_top->HandleIRQ(range_continuous_interrupt, &data_sensor_top);
gallonm 14:946e62f44f4f 174 if(!status)
gallonm 14:946e62f44f4f 175 printf("Range: %dmm\n\r",data_sensor_top.range_mm);
gallonm 14:946e62f44f4f 176 else
gallonm 14:946e62f44f4f 177 printf("Invalid range value!\n\r");
gallonm 14:946e62f44f4f 178 }
gallonm 15:b94bc967fecd 179 if(flag_stop_measure)
gallonm 15:b94bc967fecd 180 break;
gallonm 14:946e62f44f4f 181 }
gallonm 14:946e62f44f4f 182 }
gallonm 14:946e62f44f4f 183 else
gallonm 14:946e62f44f4f 184 printf("Failed to start measurement!\n\r");
gallonm 15:b94bc967fecd 185 status=board->sensor_top->StopMeasurement(range_continuous_interrupt);
gallonm 14:946e62f44f4f 186 if(status)
gallonm 14:946e62f44f4f 187 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 188 #endif
gallonm 10:5319abadb31e 189
gallonm 10:5319abadb31e 190 #ifdef ALS_CONTINUOUS_INTERRUPT
gallonm 15:b94bc967fecd 191 stop_button.rise(&StopMeasureIRQ);
gallonm 14:946e62f44f4f 192 status_t=board->sensor_top->StartMeasurement(als_continuous_interrupt, SensorTopIRQ, &data_sensor_top, NULL, NULL);
gallonm 11:657dbe7bf245 193 if(!status_t)
gallonm 14:946e62f44f4f 194 {
gallonm 14:946e62f44f4f 195 while(1)
gallonm 14:946e62f44f4f 196 {
gallonm 14:946e62f44f4f 197 if(flag_sensor_top)
gallonm 14:946e62f44f4f 198 {
gallonm 14:946e62f44f4f 199 flag_sensor_top=false;
gallonm 14:946e62f44f4f 200 status_t=board->sensor_top->HandleIRQ(als_continuous_interrupt, &data_sensor_top);
gallonm 14:946e62f44f4f 201 if(!status_t)
gallonm 15:b94bc967fecd 202 printf("Top Light: %d lux\n\r",data_sensor_top.lux);
gallonm 14:946e62f44f4f 203 else
gallonm 14:946e62f44f4f 204 printf("Invalid light value!\n\r");
gallonm 10:5319abadb31e 205 }
gallonm 15:b94bc967fecd 206 if(flag_stop_measure)
gallonm 15:b94bc967fecd 207 break;
gallonm 14:946e62f44f4f 208 }
gallonm 14:946e62f44f4f 209 }
gallonm 14:946e62f44f4f 210 else
gallonm 14:946e62f44f4f 211 printf("Failed to stop measurement!\n\r");
gallonm 14:946e62f44f4f 212 status_t=board->sensor_top->StopMeasurement(als_continuous_interrupt);
gallonm 14:946e62f44f4f 213 if(status_t)
gallonm 14:946e62f44f4f 214 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 215 #endif
gallonm 9:1d0e839edee8 216
gallonm 15:b94bc967fecd 217 #ifdef INTERLEAVED_MODE_INTERRUPT
gallonm 15:b94bc967fecd 218 stop_button.rise(&StopMeasureIRQ);
gallonm 14:946e62f44f4f 219 status_t=board->sensor_top->StartMeasurement(interleaved_mode_interrupt, SensorTopIRQ, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 220 if(!status_t)
gallonm 14:946e62f44f4f 221 {
gallonm 14:946e62f44f4f 222 while(1)
gallonm 14:946e62f44f4f 223 {
gallonm 14:946e62f44f4f 224 if(flag_sensor_top)
gallonm 14:946e62f44f4f 225 {
gallonm 14:946e62f44f4f 226 flag_sensor_top=false;
gallonm 14:946e62f44f4f 227 status_t=board->sensor_top->HandleIRQ(interleaved_mode_interrupt, &data_sensor_top);
gallonm 14:946e62f44f4f 228 if(!status_t)
gallonm 15:b94bc967fecd 229 printf("Top Range: %dmm\tTop Light: %d lux\n\r",data_sensor_top.range_mm, data_sensor_top.lux);
gallonm 14:946e62f44f4f 230 else
gallonm 14:946e62f44f4f 231 printf("Invalid range or light value!\n\r");
gallonm 9:1d0e839edee8 232 }
gallonm 15:b94bc967fecd 233 if(flag_stop_measure)
gallonm 15:b94bc967fecd 234 break;
gallonm 14:946e62f44f4f 235 }
gallonm 14:946e62f44f4f 236 }
gallonm 14:946e62f44f4f 237 else
gallonm 14:946e62f44f4f 238 printf("Failed to stop measurement!\n\r");
gallonm 14:946e62f44f4f 239 status_t=board->sensor_top->StopMeasurement(interleaved_mode_interrupt);
gallonm 14:946e62f44f4f 240 if(status_t)
gallonm 14:946e62f44f4f 241 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 242 #endif
gallonm 10:5319abadb31e 243
gallonm 10:5319abadb31e 244 #ifdef RANGE_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
gallonm 15:b94bc967fecd 245 stop_button.rise(&StopMeasureIRQ);
gallonm 14:946e62f44f4f 246 status_t=board->sensor_top->StartMeasurement(range_continuous_interrupt_low_threshold, SensorTopIRQ, &data_sensor_top, 80, NULL);
gallonm 14:946e62f44f4f 247 if(!status_t)
gallonm 14:946e62f44f4f 248 {
gallonm 14:946e62f44f4f 249 while(1)
gallonm 14:946e62f44f4f 250 {
gallonm 14:946e62f44f4f 251 if(flag_sensor_top)
gallonm 14:946e62f44f4f 252 {
gallonm 14:946e62f44f4f 253 flag_sensor_top=false;
gallonm 14:946e62f44f4f 254 status_t=board->sensor_top->HandleIRQ(range_continuous_interrupt_low_threshold, &data_sensor_top);
gallonm 14:946e62f44f4f 255 if(!status_t)
gallonm 14:946e62f44f4f 256 printf("Range int low threshold: %dmm\n\r",data_sensor_top.range_mm);
gallonm 14:946e62f44f4f 257 else
gallonm 14:946e62f44f4f 258 printf("Invalid range value!\n\r");
gallonm 14:946e62f44f4f 259 }
gallonm 15:b94bc967fecd 260 if(flag_stop_measure)
gallonm 15:b94bc967fecd 261 break;
gallonm 14:946e62f44f4f 262 }
gallonm 14:946e62f44f4f 263 }
gallonm 14:946e62f44f4f 264 else
gallonm 14:946e62f44f4f 265 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 266 status_t=board->sensor_top->StopMeasurement(range_continuous_interrupt_low_threshold);
gallonm 14:946e62f44f4f 267 if(status_t)
gallonm 14:946e62f44f4f 268 printf("Failed to stop measurement!\n\r");
gallonm 10:5319abadb31e 269 #endif
gallonm 5:fa65d931bd96 270
gallonm 15:b94bc967fecd 271 /* Hand Gesture test application */
gallonm 14:946e62f44f4f 272 #ifdef HAND_GESTURE
gallonm 15:b94bc967fecd 273 #define ALS_DELAY 5000
gallonm 14:946e62f44f4f 274 int gest_code, prev_gest_code, gest_duration;
gallonm 14:946e62f44f4f 275 char str[5];
gallonm 14:946e62f44f4f 276 char valLeft[] = {'E'};
gallonm 14:946e62f44f4f 277 char valRight[] = {'3'};
gallonm 15:b94bc967fecd 278 char valTap[] = {'0'};
gallonm 15:b94bc967fecd 279 unsigned int timeout = 10000;
gallonm 15:b94bc967fecd 280
gallonm 14:946e62f44f4f 281 status_l=board->sensor_left->StartMeasurement(range_continuous_interrupt, SensorLeftIRQ, &data_sensor_left, NULL, NULL);
gallonm 14:946e62f44f4f 282 status_r=board->sensor_right->StartMeasurement(range_continuous_interrupt, SensorRightIRQ, &data_sensor_right, NULL, NULL);
gallonm 15:b94bc967fecd 283 status_t=board->sensor_top->StartMeasurement(als_continuous_polling, NULL, &data_sensor_top, NULL, NULL);
gallonm 14:946e62f44f4f 284 gesture_reco.Init(150, 100, 200, 60, 500);
gallonm 14:946e62f44f4f 285 if((!status_l)&&(!status_r))
gallonm 14:946e62f44f4f 286 {
gallonm 14:946e62f44f4f 287 while(1)
gallonm 14:946e62f44f4f 288 {
gallonm 14:946e62f44f4f 289 if(flag_sensor_left)
gallonm 14:946e62f44f4f 290 {
gallonm 14:946e62f44f4f 291 flag_sensor_left=false;
gallonm 14:946e62f44f4f 292 status_l=board->sensor_left->HandleIRQ(range_continuous_interrupt, &data_sensor_left);
gallonm 14:946e62f44f4f 293 }
gallonm 14:946e62f44f4f 294 if(flag_sensor_right)
gallonm 14:946e62f44f4f 295 {
gallonm 14:946e62f44f4f 296 flag_sensor_right=false;
gallonm 14:946e62f44f4f 297 status_r=board->sensor_right->HandleIRQ(range_continuous_interrupt, &data_sensor_right);
gallonm 14:946e62f44f4f 298 }
gallonm 14:946e62f44f4f 299 if(data_sensor_left.range_mm>400)
gallonm 14:946e62f44f4f 300 data_sensor_left.range_mm=400;
gallonm 14:946e62f44f4f 301 if(data_sensor_right.range_mm>400)
gallonm 14:946e62f44f4f 302 data_sensor_right.range_mm=400;
gallonm 14:946e62f44f4f 303 gest_code=gesture_reco.Update(data_sensor_right.range_mm, data_sensor_left.range_mm, &gest_duration);
gallonm 15:b94bc967fecd 304 if(timeout==ALS_DELAY && gest_code==-1)
gallonm 15:b94bc967fecd 305 {
gallonm 15:b94bc967fecd 306 status=board->sensor_top->GetMeasurement(als_continuous_polling, &data_sensor_top);
gallonm 15:b94bc967fecd 307 if(!status_t)
gallonm 15:b94bc967fecd 308 printf("Light measure: %d lux\n\r",data_sensor_top.lux);
gallonm 15:b94bc967fecd 309 else
gallonm 15:b94bc967fecd 310 printf("Invalid light value!\n\r");
gallonm 15:b94bc967fecd 311 }
gallonm 14:946e62f44f4f 312 switch(gest_code)
gallonm 14:946e62f44f4f 313 {
gallonm 14:946e62f44f4f 314 case -1:
gallonm 15:b94bc967fecd 315 timeout++;
gallonm 15:b94bc967fecd 316 if(timeout>=ALS_DELAY)
gallonm 15:b94bc967fecd 317 timeout=ALS_DELAY;
gallonm 14:946e62f44f4f 318 break;
gallonm 14:946e62f44f4f 319 case 0: //tap and start timer
gallonm 14:946e62f44f4f 320 if(gest_code!=prev_gest_code)
gallonm 14:946e62f44f4f 321 {
gallonm 14:946e62f44f4f 322 prev_gest_code=gest_code;
gallonm 14:946e62f44f4f 323 sprintf(str,"%s","0-");
gallonm 14:946e62f44f4f 324 board->display->DisplayDigit(valTap, 1);
gallonm 14:946e62f44f4f 325 }
gallonm 14:946e62f44f4f 326 else
gallonm 14:946e62f44f4f 327 {
gallonm 14:946e62f44f4f 328 if(strcmp(str,"0-")==0)
gallonm 14:946e62f44f4f 329 {
gallonm 14:946e62f44f4f 330 sprintf(str,"-0");
gallonm 14:946e62f44f4f 331 board->display->DisplayDigit(valTap, 2);
gallonm 14:946e62f44f4f 332 }
gallonm 14:946e62f44f4f 333 else
gallonm 14:946e62f44f4f 334 {
gallonm 14:946e62f44f4f 335 sprintf(str,"0-");
gallonm 14:946e62f44f4f 336 board->display->DisplayDigit(valTap, 1);
gallonm 14:946e62f44f4f 337 }
gallonm 14:946e62f44f4f 338 }
gallonm 15:b94bc967fecd 339 timeout=0;
gallonm 14:946e62f44f4f 340 break;
gallonm 14:946e62f44f4f 341 case 1: //left to right
gallonm 15:b94bc967fecd 342 board->display->DisplayDigit(valRight, 3);
gallonm 15:b94bc967fecd 343 timeout=0;
gallonm 14:946e62f44f4f 344 break;
gallonm 14:946e62f44f4f 345 case 2: //right to left
gallonm 14:946e62f44f4f 346 board->display->DisplayDigit(valLeft, 0);
gallonm 15:b94bc967fecd 347 timeout=0;
gallonm 14:946e62f44f4f 348 break;
gallonm 14:946e62f44f4f 349 default:
gallonm 14:946e62f44f4f 350 printf("Errore!\n\r");
gallonm 14:946e62f44f4f 351 }
gallonm 14:946e62f44f4f 352 }
gallonm 14:946e62f44f4f 353 }
gallonm 14:946e62f44f4f 354 else
gallonm 14:946e62f44f4f 355 printf("Failed to start measurement!\n\r");
gallonm 14:946e62f44f4f 356 status_t=board->sensor_top->StopMeasurement(range_continuous_interrupt_low_threshold);
gallonm 14:946e62f44f4f 357 if(status_t)
gallonm 14:946e62f44f4f 358 printf("Failed to stop measurement!\n\r");
gallonm 14:946e62f44f4f 359 status_t=board->sensor_top->StopMeasurement(als_continuous_interrupt);
gallonm 14:946e62f44f4f 360 if(status_t)
gallonm 14:946e62f44f4f 361 printf("Failed to stop measurement!\n\r");
gallonm 14:946e62f44f4f 362 #endif
gallonm 11:657dbe7bf245 363
gallonm 15:b94bc967fecd 364 delete board;
gallonm 15:b94bc967fecd 365
gallonm 4:ccd62fd7e137 366 }
gallonm 5:fa65d931bd96 367
gallonm 5:fa65d931bd96 368