brushless motor control library with l293d

Dependents:   brushless_L293D

Revision:
2:ac825be76379
Parent:
1:f7babaac1149
Child:
3:d6e8fbc04a43
diff -r f7babaac1149 -r ac825be76379 brushlessController_L293D.cpp
--- a/brushlessController_L293D.cpp	Tue Jul 14 07:35:41 2015 +0000
+++ b/brushlessController_L293D.cpp	Tue Jul 14 08:43:10 2015 +0000
@@ -47,21 +47,28 @@
     /* Enable the outputs initially */
     en1 = 1; en2 = 1; en3 = 1; 
     
-      /* Magical data_array to drive the brushless motor */ 
+    /* Magical data_array to drive the brushless motor */ 
     // HIGH:1, LOW:0, HIGH-Z:2
     char data_array[]={1,2,0, 1,0,2, 2,0,1, 0,2,1, 0,1,2, 2,1,0};
-    char data_arrayInv[]={0,1,2, 0,2,1, 2,0,1, 1,0,2, 1,2,0, 2,1,0};
-    
-    if(dir==1)      // if dir = 1, reverse the motor direction
-        for(int k=0; k<18; k++)
-            data_array[k] = data_arrayInv[k];
-    
+      
+    if(dir==1)
+        *prevStep = *prevStep + 1;    // Increase prevStep for next step || WARNING: *prevStep++ did not work
+    else 
+        *prevStep = *prevStep - 1; 
+        
     int i = *prevStep;
-    i%=6;                         // Steps will be repeated at mod6
-    *prevStep = *prevStep + 1;    // Increase prevStep for next step || WARNING: *prevStep++ did not work
+        
+    if (i<0) // Mod operation for the negative number
+    {
+        i*=(-1); i%=6; i=6-i; 
+        i%=6;  // if i=6, it should be zero.   
+    }   
+    else 
+        i%=6;   // Steps will be repeated at mod6
     
     out1 = data_array[3*i];    (data_array[3*i]   == 2)?(en1 = 0):(en1 = 1);   
     out2 = data_array[3*i+1];  (data_array[3*i+1] == 2)?(en2 = 0):(en2 = 1); 
     out3 = data_array[3*i+2];  (data_array[3*i+2] == 2)?(en3 = 0):(en3 = 1);   
     wait_ms(delay_time);  
 }
+