Sweep a servo according to Proximity sensor measure

Dependencies:   Servo X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1 by ST

Revision:
27:2afb9baf718f
Parent:
26:e19e6cb2e6bb
Child:
30:c8efec21544f
--- a/main.cpp	Wed Nov 04 08:22:02 2015 +0000
+++ b/main.cpp	Thu Nov 05 17:34:29 2015 +0100
@@ -29,10 +29,9 @@
 //int start, end; 
 //DigitalOut pin(PA_15); 
 
-DevI2C device_i2c(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
-static X_NUCLEO_6180XA1 *board=X_NUCLEO_6180XA1::Instance(&device_i2c);
-
+static X_NUCLEO_6180XA1 *board=NULL;
 MeasureData_t data_sensor_top;
+OperatingMode operating_mode, prev_operating_mode;
 	
 /* flags that handle interrupt request */
 bool flag_sensor_top=false, flag_stop_measure=false;	
@@ -51,7 +50,7 @@
 }
 
 void DisplayRefresh(OperatingMode op_mode)
-{
+{   
    char str[5];
    
    if(op_mode==range_continuous_interrupt)
@@ -82,33 +81,66 @@
    }    
 }
 
+OperatingMode CheckSlider(int measure)
+{
+   if(measure==RANGE)
+      return range_continuous_interrupt;
+   else if(measure==ALS)
+      return als_continuous_interrupt;
+}
+
+void StartPrintMessage(OperatingMode op_mode)
+{
+   if(op_mode==range_continuous_interrupt)
+      printf("\nStarted range continuous interrupt measure\n\r");
+   else if(prev_operating_mode==als_continuous_interrupt)
+      printf("\nStarted als continuous interrupt measure\n\r");
+}
+
+void StopPrintMessage(OperatingMode op_mode)
+{
+   if(op_mode==range_continuous_interrupt)
+      printf("Stopped range continuous interrupt measure\n\r");
+   else if(prev_operating_mode==als_continuous_interrupt)
+      printf("Stopped als continuous interrupt measure\n\r");
+}
+
+void Bye()
+{
+   int i;
+   char str[5];
+   
+   for(i=0;i<200;i++)
+   {
+      sprintf(str,"%s","BYE");
+      board->display->DisplayString(str, strlen(str));
+   }
+}
+
 int main()
 {   
-   OperatingMode operating_mode, prev_operating_mode;
+   DevI2C device_i2c(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
+   board=X_NUCLEO_6180XA1::Instance(&device_i2c);
    /* user button used to stop measurements in interrupt mode */
    InterruptIn stop_button(USER_BUTTON);
    STMPE1600DigiIn measure_type(device_i2c, GPIO_11);
    int status, measure;
-   char str[5];
  
    //device_i2c.frequency(400000); //change i2c frequncy from 100kHz to 400kHz
    pc.baud(115200); //change the printf baudrate
    
    status=board->InitBoard();
    if(status)
-      printf("Failed to init the board!\n\r");   
+      printf("Failed to init board!\n\r");   
    
    stop_button.rise(&StopMeasureIRQ);
    measure=measure_type;
-   if(measure==RANGE)
-      operating_mode=range_continuous_interrupt;
-   else if(measure==ALS)
-      operating_mode=als_continuous_interrupt;
+   operating_mode=CheckSlider(measure);
    status=board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL);
-   prev_operating_mode=operating_mode;
    if(!status)
    {
-      printf("\nStart measurement\n\r");
+      prev_operating_mode=operating_mode;
+      StartPrintMessage(operating_mode);
       while(1)
       {
          if(flag_sensor_top)
@@ -120,48 +152,29 @@
          if(flag_stop_measure)
          {
             status=board->sensor_top->StopMeasurement(prev_operating_mode);
-            if(status)
-               printf("Failed to stop measurement!\n\r");
-            else
-               printf("Measurement stopped!\n\r");
+            if(!status)
+               StopPrintMessage(prev_operating_mode);
             printf("\nProgram stopped!\n\n\r");
             break;
          }
          measure=measure_type;
-         if(measure==RANGE)
-            operating_mode=range_continuous_interrupt;
-         else if(measure==ALS)
-            operating_mode=als_continuous_interrupt;
+         operating_mode=CheckSlider(measure);
          if(operating_mode!=prev_operating_mode)
          {
             DisplayRefresh(prev_operating_mode);
             status=board->sensor_top->StopMeasurement(prev_operating_mode);
+            if(!status)
+               StopPrintMessage(prev_operating_mode);
             prev_operating_mode=operating_mode;
-            if(status)
-               printf("Failed to stop measurement!\n\r");
-            else
-               printf("Measurement stopped!\n\r");
             status=board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL);
-            if(status)
-            {
-               printf("\nFailed to start measurement!\n\r");
-               break;
-            }
-            else
-               printf("\nStart measurement\n\r");
+            if(!status)
+               StartPrintMessage(operating_mode);
          }
          else
             DisplayRefresh(operating_mode);
       }
    }
-   else
-      printf("\nFailed to start measurement!\n\r");
-   
-   for(status=0;status<200;status++)
-   {
-      sprintf(str,"%s","CIAO");
-      board->display->DisplayString(str, strlen(str));
-   }
+   Bye();
 
    delete board;
 }