Use IQS62X sensor and move motor by detected angle

Dependencies:   DRV8830 IQS62x IQSDisplayTerminal UIT_ACM1602NI mbed

Fork of Nucleo_ACM1602_I2C_DC by Thinkbed

Revision:
4:83f7df775d46
Parent:
3:6474ab60854e
Child:
5:2b9614aa1171
--- a/main.cpp	Mon Sep 04 15:28:40 2017 +0000
+++ b/main.cpp	Tue Sep 05 15:05:38 2017 +0000
@@ -8,13 +8,17 @@
 #include "DRV8830.h"
 
 //Cycle 
-#define ON_DURATION    5    //On time   [*100ms]
-#define SWITCH_PERIOD 30   //Cycle time[*100ms]
-#define WAIT_DELAY 5      //Delay time [*100ms]
+#define ON_DURATION    8*2   //On time   [*100ms]
+#define SWITCH_PERIOD 30*2  //Cycle time[*100ms]
+#define WAIT_DELAY 5*2      //Delay time [*100ms]
 #define TOTAL_TIMES 30000  //total times n
+#define ACCEL_SIZE 6
+#define DECEL_SIZE 8
 
 
 const float spd_table[] = {1.0,0.7,0.5};
+const float vol_accel[ACCEL_SIZE] = {0,0.3,0.6,0.8,0.95,1};
+const float vol_decel[DECEL_SIZE] = {1,0.9,0.75,0.55,0.4,0.25,0.15,0};
 static int sp_index=0;
 
 
@@ -60,33 +64,66 @@
     
     
     //Motor activation
-    
+    static int mode = 1;
     
-    if(d_Cycle.rem ==WAIT_DELAY)
+    if(WAIT_DELAY <= d_Cycle.rem && d_Cycle.rem < (WAIT_DELAY+ON_DURATION) )
+        {
+          int accel_index = d_Cycle.rem -  WAIT_DELAY;
+          if (accel_index < ACCEL_SIZE)
+            {
+              motor_speed=vol_accel[accel_index] * spd_table[sp_index];
+            }
+            else
+            {
+              motor_speed=spd_table[sp_index];
+            }
+          strcpy(ctext," CW");
+         //ctext="CW";
+         
+        }
+        
+    else if ( (WAIT_DELAY+ON_DURATION)<= d_Cycle.rem && d_Cycle.rem <(2*WAIT_DELAY+ON_DURATION)   )
         {
-          motor_speed=spd_table[sp_index];
+          //wait_ms(20);
+          int accel_index = d_Cycle.rem - (WAIT_DELAY+ON_DURATION);
+          if (accel_index< DECEL_SIZE)
+            {
+              motor_speed=vol_decel[accel_index] * spd_table[sp_index];
+            }
+            else
+            {
+              motor_speed=0;
+            }
+          strcpy(ctext,"OFF");
+        }
+        
+    else if ( (2*WAIT_DELAY+ON_DURATION) <= d_Cycle.rem && d_Cycle.rem <(2*WAIT_DELAY+2* ON_DURATION)  )
+        {
+          int accel_index = d_Cycle.rem -  (2*WAIT_DELAY+ON_DURATION);
+          if (accel_index < ACCEL_SIZE)
+            {
+              motor_speed= - vol_accel[accel_index] * spd_table[sp_index];
+            }
+            else
+            {
+              motor_speed= -spd_table[sp_index];
+            }
           strcpy(ctext," CW");
          //ctext="CW";
         }
         
-    else if (d_Cycle.rem == (WAIT_DELAY+ON_DURATION) )
+    else if ( (2*WAIT_DELAY+2* ON_DURATION) <= d_Cycle.rem  )
         {
           //wait_ms(20);
-          motor_speed=0;
-          strcpy(ctext,"OFF");
-        }
-        
-    else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION) )
-        {
-          //wait_ms(20);
-          motor_speed=-spd_table[sp_index];
-          strcpy(ctext,"CCW");
-        }
-        
-    else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION*2) )
-        {
-          //wait_ms(20);
-          motor_speed=0;
+          int accel_index = d_Cycle.rem - ((2*WAIT_DELAY+2* ON_DURATION));
+          if (accel_index< DECEL_SIZE)
+            {
+              motor_speed= -vol_decel[accel_index] * spd_table[sp_index];
+            }
+            else
+            {
+              motor_speed=0;
+            }
           strcpy(ctext,"OFF");
         }
         
@@ -107,10 +144,10 @@
     //1 Row
     //lcd_.WriteStringXY("#",0,0);
     
-    lcd_.WriteValueXY("%s", ctext, 0,0);
-    lcd_.WriteValue("% 5d/", d_Cycle.quot);
+    lcd_.WriteValueXY("%1.1f", motor_speed, 0,0);
+    lcd_.WriteValue("%5d/", d_Cycle.quot);
     lcd_.WriteValue("%0d",TOTAL_TIMES);
-    lcd_.WriteValue("V%0d",sp_index);
+    lcd_.WriteValue("V%0d",motor_speed);
     
     
     //2 Row
@@ -128,12 +165,10 @@
 
 void flip() {
     static bool b = false;
-    
-    
-    
+     
     if(b==false)
     {
-        timer_.attach(&TimerIsr, 0.1);
+        timer_.attach(&TimerIsr, 0.05);
     }
     
     else