Sweep a servo according to Proximity sensor measure
Dependencies: Servo X_NUCLEO_6180XA1 mbed
Fork of HelloWorld_6180XA1 by
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(); }