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
X-Nucleo-6180XA1 Hello World Application
This application provides a simple example of usage of X_NUCLEO_6180XA1 library. It provides a measurement of:
- Ambient Light (Lux),
 - Distance (millimeters) of an object in front of the on-board sensor.
 
The values are displayed on the Hyperterminal connected through COM port over USB.
main.cpp
- Committer:
 - gallonm
 - Date:
 - 2015-10-13
 - Revision:
 - 9:1d0e839edee8
 - Parent:
 - 8:4c05f7a5bb60
 - Child:
 - 10:5319abadb31e
 
File content as of revision 9:1d0e839edee8:
#include "mbed.h"
#include "x_nucleo_6180xa1.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#define VL6180X_I2C_SDA I2C_SDA
#define VL6180X_I2C_SCL I2C_SCL
/* 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 */
void OnErrLog(void){};
void DISP_ExecLoopBody(void){};
DevI2C device_i2c(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
static X_NUCLEO_6180XA1 *board=X_NUCLEO_6180XA1::Instance(&device_i2c);
MeasureData_t Data;
/* 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;	
/* callback functions of the sensors */ 
void SensorTopIRQ(void)
{
   flag_sensor_top=true;
	 board->sensor_top->DisableInterruptMeasureDetectionIRQ();
}	
//inserire le callback per gli altri sensori
int main()
{   
	 int status;
	 
	 status=board->InitBoard();
	 if(status)
		  printf("Failed to init the board!\n\r");
	 
	 /*	 
	 status=board->sensor_top->StartMeasurement(range_single_shot_polling, NULL, &Data);
	 if(!status)
	    printf("Range single shot: %d\n\r",Data.range_mm);
	 else
		  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");
	 
	 status=board->sensor_top->StartMeasurement(range_continuous_polling, NULL, &Data);
	 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");
   }
	 else
	    printf("Failed to start measurement!\n\r");
	 
	 status=board->sensor_top->StartMeasurement(als_continuous_polling, NULL, &Data);
	 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");
   }
	 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");
	   }
	 }*/
	 
	 /*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)
	 {
	   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");
	   }
	 }
	 
	 
	 
	 //board->~X_NUCLEO_6180XA1();
}
            
    
            X-NUCLEO-6180XA1   Proximity and Ambient Light Sensor