Sweep a servo according to Proximity sensor measure

Dependencies:   Servo X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1 by ST

Revision:
35:8b4a5cc0fb1f
Parent:
33:b903a0ec8803
Child:
36:0d4aa5b3234d
--- a/main.cpp	Thu Nov 19 14:53:46 2015 +0000
+++ b/main.cpp	Tue Nov 24 16:06:03 2015 +0000
@@ -14,7 +14,7 @@
    Reset button is used to restart the program. */
 
 /* Polling operating modes don`t require callback function that handles IRQ 
-   Callback functions are used only for measure that require interrupt */
+   Callback IRQ functions are used only for measure that require interrupt */
 
 /* GetMeasurement is asynchronous! It returns NOT_READY if the measurement value 
    is not ready to be read from the corresponding register. So you need to wait
@@ -125,7 +125,7 @@
       printf("Stopped als continuous interrupt measure\n\r");
 }
 
-/* Print on board 4 Digit display the app exiting BYE message */
+/* Print on board 4 Digit display the indicated message <= 4 char */
 #define DELAY 2000  // 2Sec
 void DisplayMsg(const char * msg)
 {
@@ -143,21 +143,17 @@
 
 
 void IntContinousALSorRangeMeasure (DevI2C device_i2c) {
-	 // onboard red slider to switch Range/ALS measures 
-   STMPE1600DigiIn measure_type(device_i2c, GPIO_11);
-   int status; 
-   //device_i2c.frequency(400000); //change i2c frequncy from 100kHz to 400kHz
-   //pc.baud(115200); //change the printf baudrate if faster printf is needed
-	
-	 board=X_NUCLEO_6180XA1::Instance(&device_i2c);
+   int status; 	 
+   /* creates the 6180XA1 expansion board singleton obj */
+   board=X_NUCLEO_6180XA1::Instance(&device_i2c, PB_0, PA_4, PA_5, PA_10);
    DisplayMsg  ("INT");
-	
+   /* init the 6180XA1 expansion board with default values */
    status=board->InitBoard();
    if(status)
       printf("Failed to init board!\n\r");   
-   
-
+   /* check the red slider position for ALS/Range measure */
    operating_mode=CheckSlider(IntMeasure);   
+   /* start the measure on sensor top */
    status=board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL);
    if(!status)
    {
@@ -165,105 +161,51 @@
       PrintStartMessage(operating_mode);
       while(1)
       {
-         if(int_sensor_top)
+         if(int_sensor_top)  /* 6180 isr was triggered */
          {
             int_sensor_top=false;
-            status=board->sensor_top->HandleIRQ(operating_mode, &data_sensor_top);
+            status=board->sensor_top->HandleIRQ(operating_mode, &data_sensor_top); /* handle the isr and read the meaure */
             DisplayRefresh(operating_mode);
          }
-         if(int_stop_measure)
+         if(int_stop_measure) /* Blue Button isr was triggered */
          {
-            status=board->sensor_top->StopMeasurement(prev_operating_mode);
+            status=board->sensor_top->StopMeasurement(prev_operating_mode); /* stop the measure and exit */
             if(!status)
                PrintStopMessage(prev_operating_mode);
-						int_stop_measure = false;
+			int_stop_measure = false;
             printf("\nProgram stopped!\n\n\r");
             break;
          }
-         operating_mode=CheckSlider(IntMeasure);
+         operating_mode=CheckSlider(IntMeasure); /* check if red slider was moved */
          if(operating_mode!=prev_operating_mode)
          {
             DisplayRefresh(prev_operating_mode);
-            status=board->sensor_top->StopMeasurement(prev_operating_mode);
+            status=board->sensor_top->StopMeasurement(prev_operating_mode); /* stop the running measure */
             if(!status)
                PrintStopMessage(prev_operating_mode);
             prev_operating_mode=operating_mode;
-            status=board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL);
+            status=board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL); /* start the new measure */
             if(!status)
                PrintStartMessage(operating_mode);
          } else
             DisplayRefresh(operating_mode);           
       }
    }
-   delete board;	 
+   DisplayMsg("BYE");
+   delete board;	    
 }	 
 
-
-void PollContinousALSorRangeMeasure (DevI2C device_i2c) {
-	 // onboard red slider to switch Range/ALS measures 
-   STMPE1600DigiIn measure_type(device_i2c, GPIO_11);  
-   int status; 
-
-   board=X_NUCLEO_6180XA1::Instance(&device_i2c);
-   DisplayMsg  ("poll");	 
-   status=board->InitBoard();
-   if(status)
-      printf("Failed to init board!\n\r");      
-   operating_mode=CheckSlider(PollMeasure);   
-   status=board->sensor_top->StartMeasurement(operating_mode, NULL, NULL, NULL);
-   if(!status)
-   {
-      prev_operating_mode=operating_mode;
-      PrintStartMessage(operating_mode);
-      while(1)
-      {         
-//	       do   // the loop waiting for the result could be avoided (if is acceptable to get not updated measures) 
-//    	   {
-        	  status=board->sensor_top->GetMeasurement(operating_mode, &data_sensor_top);
-						DisplayRefresh(operating_mode);					 
-//         }while(status);
-
-         if(int_stop_measure)
-         {
-            status=board->sensor_top->StopMeasurement(prev_operating_mode);
-            if(!status)
-               PrintStopMessage(prev_operating_mode);
-						int_stop_measure = false;						
-            printf("\nProgram stopped!\n\n\r");
-            break;
-         }
- 
-         operating_mode=CheckSlider(PollMeasure);
-         if(operating_mode!=prev_operating_mode)
-         {
-            DisplayRefresh(prev_operating_mode);
-            status=board->sensor_top->StopMeasurement(prev_operating_mode);
-            if(!status)
-               PrintStopMessage(prev_operating_mode);
-            prev_operating_mode=operating_mode;
-            status=board->sensor_top->StartMeasurement(operating_mode, NULL, NULL, NULL);
-            if(!status)
-               PrintStartMessage(operating_mode);
-         }
-         else
-            DisplayRefresh(operating_mode);
-      }      
-   }
-   DisplayMsg("BYE");
-   delete board;	 
+/*=================================== Main ==================================
+ Move the VL6180X Expansion board red slider to switch between ALS or Range
+ measures.
+ Press the blue user button to stop the measurements in progress 	
+=============================================================================*/
+int main()
+{   
+   InterruptIn stop_button (USER_BUTTON);
+   stop_button.rise (&StopMeasureIRQ);	
+   DevI2C device_i2c (VL6180X_I2C_SDA, VL6180X_I2C_SCL);     
+		
+   IntContinousALSorRangeMeasure (device_i2c);  // start continous measures Interrupt based
 }
 
-
-int main()
-{   
-   /* user button to stop measurements in progress */	
-   InterruptIn stop_button (USER_BUTTON);
-   stop_button.rise (&StopMeasureIRQ);	
-   DevI2C device_i2c (VL6180X_I2C_SDA, VL6180X_I2C_SCL);
-		
-   IntContinousALSorRangeMeasure (device_i2c);  // start Interrupt continous measures
-   
-   PollContinousALSorRangeMeasure (device_i2c); // start Polling continous measures
-
-}
-