Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_6180XA1 mbed
Fork of HelloWorld_6180XA1 by
Revision 10:5319abadb31e, committed 2015-10-19
- Comitter:
- gallonm
- Date:
- Mon Oct 19 13:57:36 2015 +0200
- Parent:
- 9:1d0e839edee8
- Child:
- 11:657dbe7bf245
- Commit message:
- Fixed the main function introducing #ifdef to test the different operating modes
Test of the all operating modes without threshold and test range interrupt with
low threshold
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Oct 13 14:26:18 2015 +0200
+++ b/main.cpp Mon Oct 19 13:57:36 2015 +0200
@@ -6,10 +6,29 @@
#include <stdio.h>
#include <assert.h>
-
#define VL6180X_I2C_SDA I2C_SDA
#define VL6180X_I2C_SCL I2C_SCL
+//#define RANGE_SINGLE_SHOT_POLLING
+//#define ALS_SINGLE_SHOT_POLLING
+//#define RANGE_CONTINUOUS_POLLING
+//#define ALS_CONTINUOUS_POLLING
+//#define RANGE_CONTINUOUS_INTERRUPT
+//#define ALS_CONTINUOUS_INTERRUPT
+#define INTERLEAVED_MODE_INTERRUPT
+//#define RANGE_CONTINUOUS_POLLING_LOW_THRESHOLD
+//#define RANGE_CONTINUOUS_POLLING_HIGH_THRESHOLD
+//#define RANGE_CONTINUOUS_POLLING_OUT_OF_WINDOW
+//#define ALS_CONTINUOUS_POLLING_LOW_THRESHOLD
+//#define ALS_CONTINUOUS_POLLING_HIGH_THRESHOLD
+//#define ALS_CONTINUOUS_POLLING_OUT_OF_WINDOW
+//#define RANGE_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
+//#define RANGE_CONTINUOUS_INTERRUPT_HIGH_THRESHOLD
+//#define RANGE_CONTINUOUS_INTERRUPT_OUT_OF_WINDOW
+//#define ALS_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
+//#define ALS_CONTINUOUS_INTERRUPT_HIGH_THRESHOLD
+//#define ALS_CONTINUOUS_INTERRUPT_OUT_OF_WINDOW
+
/* Polling operating modes (1,2,3 and 4) don`t require callback function that handles IRQ
Callback functions are used only for measure that require interrupt */
@@ -24,10 +43,13 @@
/* flags that handle the call to HandleIRQ function */
bool flag_sensor_top=false, flag_sensor_bottom=false, flag_sensor_left=false, flag_sensor_right=false;
+//Timer timer;
+//int start, end;
+
/* callback functions of the sensors */
void SensorTopIRQ(void)
{
- flag_sensor_top=true;
+ flag_sensor_top=true;
board->sensor_top->DisableInterruptMeasureDetectionIRQ();
}
@@ -37,119 +59,177 @@
{
int status;
- status=board->InitBoard();
+ status=board->InitBoard();
if(status)
printf("Failed to init the board!\n\r");
-
- /*
- status=board->sensor_top->StartMeasurement(range_single_shot_polling, NULL, &Data);
+
+#ifdef RANGE_SINGLE_SHOT_POLLING
+ status=board->sensor_top->StartMeasurement(range_single_shot_polling, NULL, &Data, NULL, NULL);
if(!status)
- printf("Range single shot: %d\n\r",Data.range_mm);
- else
+ printf("Range single shot: %dmm\n\r",Data.range_mm);
+ else if(status==INVALID_PARAMS)
printf("Failed to start measurement!\n\r");
- status=board->sensor_top->StartMeasurement(als_single_shot_polling, NULL, &Data);
- if(!status)
- printf("Light single shot: %d\n\r",Data.lux);
else
- printf("Failed to start measurement!\n\r");
+ printf("Invalid range value!\n\r");
+ status=board->sensor_top->StopMeasurement(range_single_shot_polling);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
- status=board->sensor_top->StartMeasurement(range_continuous_polling, NULL, &Data);
+#ifdef ALS_SINGLE_SHOT_POLLING
+ status=board->sensor_top->StartMeasurement(als_single_shot_polling, NULL, &Data, NULL, NULL);
+ if(!status)
+ printf("Light single shot: %dlux\n\r",Data.lux);
+ else if(status==INVALID_PARAMS)
+ printf("Failed to start measurement!\n\r");
+ else
+ printf("Invalid light value!\n\r");
+ status=board->sensor_top->StopMeasurement(als_single_shot_polling);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
+
+#ifdef RANGE_CONTINUOUS_POLLING
+ status=board->sensor_top->StartMeasurement(range_continuous_polling, NULL, &Data, NULL, NULL);
if(!status)
{
- status=board->sensor_top->GetRangeMeasContinuousMode(&Data);
- if(!status)
- printf("1a Range: %d\n\r",Data.range_mm);
- else
- printf("Invalid range value!\n\r");
- status=board->sensor_top->GetRangeMeasContinuousMode(&Data);
- if(!status)
- printf("2a Range: %d\n\r",Data.range_mm);
- else
- printf("Invalid range value!\n\r");
- status=board->sensor_top->GetRangeMeasContinuousMode(&Data);
- if(!status)
- printf("3a Range: %d\n\r",Data.range_mm);
- else
- printf("Invalid range value!\n\r");
+ int i;
+ for(i=0;i<10;i++)
+ {
+ status=board->sensor_top->GetMeasurement(range_continuous_polling, &Data);
+ if(!status)
+ printf("Range measure %d: %dmm\n\r",i+1,Data.range_mm);
+ else
+ printf("Invalid range value!\n\r");
+ }
+ }
+ else
+ printf("Failed to start measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(range_continuous_polling);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
+
+#ifdef ALS_CONTINUOUS_POLLING
+ status=board->sensor_top->StartMeasurement(als_continuous_polling, NULL, &Data, NULL, NULL);
+ if(!status)
+ {
+ int i;
+ for(i=0;i<10;i++)
+ {
+ status=board->sensor_top->GetMeasurement(als_continuous_polling, &Data);
+ if(!status)
+ printf("Light measure %d: %dlux\n\r",i,Data.lux);
+ else
+ printf("Invalid light value!\n\r");
+ }
}
else
printf("Failed to start measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(als_continuous_polling);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
- status=board->sensor_top->StartMeasurement(als_continuous_polling, NULL, &Data);
+#ifdef RANGE_CONTINUOUS_INTERRUPT
+ status=board->sensor_top->StartMeasurement(range_continuous_interrupt, SensorTopIRQ, &Data, NULL, NULL);
if(!status)
{
- status=board->sensor_top->GetAlsMeasContinuousMode(&Data);
- if(!status)
- printf("1a Light: %d\n\r",Data.lux);
- else
- printf("Invalid light value!\n\r");
- status=board->sensor_top->GetAlsMeasContinuousMode(&Data);
- if(!status)
- printf("2a Light: %d\n\r",Data.lux);
- else
- printf("Invalid light value!\n\r");
- status=board->sensor_top->GetAlsMeasContinuousMode(&Data);
- if(!status)
- printf("3a Light: %d\n\r",Data.lux);
- else
- printf("Invalid light value!\n\r");
- }
+ while(1)
+ {
+ if(flag_sensor_top)
+ {
+ flag_sensor_top=false;
+ status=board->sensor_top->HandleIRQ(range_continuous_interrupt, &Data);
+ if(!status)
+ printf("Range int: %dmm\n\r",Data.range_mm);
+ else
+ printf("Invalid range value!\n\r");
+ }
+ }
+ }
+ else
+ printf("Failed to start measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(range_continuous_interrupt);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
+
+#ifdef ALS_CONTINUOUS_INTERRUPT
+ status=board->sensor_top->StartMeasurement(als_continuous_interrupt, SensorTopIRQ, &Data, NULL, NULL);
+ if(!status)
+ {
+ while(1)
+ {
+ if(flag_sensor_top)
+ {
+ flag_sensor_top=false;
+ status=board->sensor_top->HandleIRQ(als_continuous_interrupt, &Data);
+ if(!status)
+ printf("Light int: %dlux\n\r",Data.lux);
+ else
+ printf("Invalid light value!\n\r");
+ }
+ }
+ }
else
- printf("Failed to start measurement!\n\r");
- */
-
- /*board->sensor_top->StartMeasurement(range_continuous_interrupt, SensorTopIRQ, &Data);
- while(1)
- {
- if(flag_sensor_top)
- {
- flag_sensor_top=false;
- board->sensor_top->HandleIRQ(range_measure, &Data);
- if((Data.range_error==0)&&(Data.int_error==0))
- printf("Range int: %d\n\r",Data.range_mm);
- else
- printf("Invalid range value!\n\r");
- }
- }*/
+ printf("Failed to stop measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(als_continuous_interrupt);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
- /*board->sensor_top->StartMeasurement(als_continuous_interrupt, SensorTopIRQ, &Data);
- while(1)
- {
- if(flag_sensor_top)
- {
- flag_sensor_top=false;
- board->sensor_top->HandleIRQ(light_measure, &Data);
- if((Data.als_error==0)&&(Data.int_error==0))
- printf("Light int: %d\n\r",Data.lux);
- else
- printf("Invalid light value!\n\r");
- }
- }*/
-
-
- board->sensor_top->StartMeasurement(interleaved_mode, SensorTopIRQ, &Data);
- while(1)
+#ifdef INTERLEAVED_MODE_INTERRUPT
+ status=board->sensor_top->StartMeasurement(interleaved_mode_interrupt, SensorTopIRQ, &Data, NULL, NULL);
+ if(!status)
{
- if(flag_sensor_top)
- {
- flag_sensor_top=false;
- board->sensor_top->HandleIRQ(light_range_measure, &Data);
- if((Data.range_error==0)&&(Data.int_error==0))
- printf("Interleaved_mode->Range: %d\n\r",Data.range_mm);
- else
- printf("Invalid range value!\n\r");
- if((Data.als_error==0)&&(Data.int_error==0))
- printf("Interleaved_mode->Light: %d\n\r",Data.lux);
- else
- printf("Invalid light value!\n\r");
- }
+ while(1)
+ {
+ if(flag_sensor_top)
+ {
+ flag_sensor_top=false;
+ status=board->sensor_top->HandleIRQ(interleaved_mode_interrupt, &Data);
+ if(!status)
+ {
+ printf("Interleaved_mode->Range: %dmm\n\r",Data.range_mm);
+ printf("Interleaved_mode->Light: %dlux\n\r",Data.lux);
+ }
+ else
+ printf("Invalid range or light value!\n\r");
+ }
+ }
}
-
-
-
- //board->~X_NUCLEO_6180XA1();
+ else
+ printf("Failed to stop measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(interleaved_mode_interrupt);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
+
+#ifdef RANGE_CONTINUOUS_INTERRUPT_LOW_THRESHOLD
+ status=board->sensor_top->StartMeasurement(range_continuous_interrupt_low_threshold, SensorTopIRQ, &Data, 80, NULL);
+ if(!status)
+ {
+ while(1)
+ {
+ if(flag_sensor_top)
+ {
+ flag_sensor_top=false;
+ status=board->sensor_top->HandleIRQ(range_continuous_interrupt_low_threshold, &Data);
+ if(!status)
+ printf("Range int low threshold: %dmm\n\r",Data.range_mm);
+ else
+ printf("Invalid range value!\n\r");
+ }
+ }
+ }
+ else
+ printf("Failed to start measurement!\n\r");
+ status=board->sensor_top->StopMeasurement(range_continuous_interrupt_low_threshold);
+ if(status)
+ printf("Failed to stop measurement!\n\r");
+#endif
}
-
