Engine control program with 3 engines Needs to make a case for each simultaneous engine setting, because of the WAIT after each number of bits have been sent.

Dependencies:   mbed-rtos mbed PinDetect

Fork of FinalMotorControl by Robot Bachelor

Files at this revision

API Documentation at this revision

Comitter:
mjhaugsdal
Date:
Thu Jul 07 11:13:35 2016 +0000
Parent:
29:00f839aad30e
Commit message:
07072016

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Jul 07 08:53:21 2016 +0000
+++ b/main.cpp	Thu Jul 07 11:13:35 2016 +0000
@@ -37,17 +37,16 @@
 DigitalIn  SW(USER_BUTTON);
 
 
-static int speed = 1750;
-static int bootStep1 = 100;
-static int bootStep2 = 100;
-static int bootStep3 = 100;
+static int speed = 1000;
+
 static char m_cmd = 'x';
 static char cmd;
 static bool e1 = true;
 static bool e2 = true;
 static bool e3 = true;
-static bool rest = false;
-static int i = 0;
+static int i1 = 0;
+static int i2 = 0;
+static int i3 = 0;
 
 static int steps1 = 0;
 static int steps2 = 0;
@@ -455,36 +454,20 @@
         }        
         Thread::wait(100);
         //pc.printf("%d", steps);
-       /* 
-         if (m_cmd == 'x')
-         {    
-            while(speed < 7000)
-            {
-                //Thread::wait(1);
-                speed ++;
-            }
-            speed = 2000;
-            cmd = 'x';
-            break;
-        }
-        */
-        
-        
-        
+        pc.printf("%c", m_cmd);    
     }
 }
 
-
 //MOTOR 1 LEFT SIDE BUTTON
 void pb1_hit_callback (void) 
 {
-    if(rest == false)
-    {
+
         e1 = false;
         
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+
+        wait(2);
+        int stepsToCenter = i1/2;
                     
         while (stepsToCenter >= 0)
         {
@@ -495,20 +478,20 @@
             //break;
         //end if
         m_cmd = 'x';  
-    }
+    
 }
 
 //MOTOR 1 RIGHT SIDE BUTTON
 void pb2_hit_callback (void) 
 {
-    if(rest == false)
-    {
+
         e1 = false;
         //m_cmd = 'x';
     
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+
+        wait(2);
+        int stepsToCenter = i1/2;
                     
         while (stepsToCenter >= 0)
         {
@@ -517,18 +500,20 @@
         }
         steps1 = 0;
         m_cmd = 'x';
-    }
 }
+
+
+
 //MOTOR 2 LEFT SIDE BUTTON
 void pb3_hit_callback (void) 
 {
-    if(rest == false)
+
     {
         e2 = false;
         //m_cmd = 'x';
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+        wait(1);
+        int stepsToCenter = i2/2;
                     
         while (stepsToCenter >= 0)
         {
@@ -536,7 +521,8 @@
             stepsToCenter --;
         }
         steps2 = 0;
-        m_cmd = 'x';
+        //m_cmd = 'x';
+        stopE2();
     }
 
 }
@@ -544,13 +530,13 @@
 //MOTOR 2 RIGHT SIDE BUTTON
 void pb4_hit_callback (void) 
 {
-    if(rest == false)
+
     {
         e2 = false;
         //m_cmd = 'x';
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+        wait(1);
+        int stepsToCenter = i2/2;
                     
         while (stepsToCenter >= 0)
         {
@@ -558,98 +544,97 @@
             stepsToCenter --;
         }
         steps2 = 0;
-        m_cmd = 'x';
+        //m_cmd = 'x';
+        stopE2();
     }
 
 
 }
 
+
 //MOTOR 3 LEFT SIDE BUTTON
 void pb5_hit_callback (void) 
 {
-    if(rest == false)
-    {
+
         e3 = false;
         //m_cmd = 'x';
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+        wait(1);
+        int stepsToCenter = i3/2;
                     
         while (stepsToCenter >= 0)
         {
+            if(stepsToCenter < i3/10)
+            speed = 1500;
+            
             stepEngine3Left();
             stepsToCenter --;
         }
         steps3 = 0;
         m_cmd = 'x';
-    }
-
 
 }
 //MOTOR 3 RIGHT SIDE BUTTON
 void pb6_hit_callback (void) 
 {
     
-    if(rest == false)
-    {
+
         e3 = false;
         //m_cmd = 'x';
         speed = 1000;
-        Thread::wait(1000);
-        int stepsToCenter = i/2;
+        wait(1);
+        int stepsToCenter = i3/2;
                     
         while (stepsToCenter >= 0)
         {
+            if(stepsToCenter < i3/10)
+            speed = 1500;
+            
             stepEngine3Right();
             stepsToCenter --;
         }
         //reset steps and stop engine
         steps3 = 0;
         m_cmd = 'x';
-    }
+
 }
 
 int main()
 {
-        int slowDown;
-
         pb1.mode(PullUp);
         pb2.mode(PullUp);
         pb3.mode(PullUp);
         pb4.mode(PullUp);
         pb5.mode(PullUp);
         pb6.mode(PullUp);
-        
+
         //Set up buttons 1 and 2
         pb1.attach_deasserted(&pb1_hit_callback);
         pb1.setSampleFrequency();
         pb2.attach_deasserted(&pb2_hit_callback);
-        pb2.setSampleFrequency();
+        pb2.setSampleFrequency();        
+  
 
         //Thread 1 has constant feed from usb
         Thread t1(input);
         //static char global_direction;
         printf("Started");
         
-        // Move motor in one direction
+  
         while (true)
         {
 
-/*
-            while(bootStep1 >= 0)
-            {
-                bootStep1--;
-                stepEngine1Right();   
-            } */
+
             stepEngine1Left();
             if (e1 == false) 
             {
+                Thread::wait(2000);
                 e1 = true;
                 while(true)
                 {
                     
                     stepEngine1Right(); 
-                    i++;
+                    i1++;
                     if(e1 == false)
                     break;
     
@@ -659,7 +644,9 @@
                 break; 
             }//end if
            
-        }//end while
+        }//end while      
+        
+        
         
         //Set up buttons 3 and 4
         pb3.attach_deasserted(&pb3_hit_callback);
@@ -686,7 +673,7 @@
                 {
                     
                     stepEngine2Right(); 
-                    i++;
+                    i2++;
                     if(e2 == false)
                     break;
     
@@ -697,19 +684,14 @@
             }//end if
         }
         
+ 
+        
         pb5.attach_deasserted(&pb5_hit_callback);
         pb5.setSampleFrequency();
         pb6.attach_deasserted(&pb6_hit_callback);
         pb6.setSampleFrequency();
         while (true)
         {
-            //speed = 2000;
-      /*      while(bootStep3 >= 0)
-            {
-                bootStep3--;
-                stepEngine3Right();
-                
-            } */
             stepEngine3Left();
             if (e3 == false) 
             {
@@ -718,13 +700,13 @@
                 {
                     
                     stepEngine3Right(); 
-                    i++;
+                    i3++;
                     if(e3 == false)
                     break;
     
                 }
                 //pc.printf("HALLO");
-                m_cmd = 'z';
+                //m_cmd = 'z';
                 Thread::wait(1000);
                 break;
             }//end if
@@ -735,7 +717,7 @@
         {   
         
             //user button to turn off engines
-            if(SW==1)
+            if(SW==0)
             {
                 //put engines to sleep
                 m_cmd ='z';
@@ -845,11 +827,12 @@
             }
             */
   
+  /*
             //Controlling each motor seperately.
             //ENGINE 3
             if(cmd == '7' && steps3 > -200)
             {
-                rest = false;
+
                 
                 steps3 --;
                 stepEngine3Left();
@@ -857,38 +840,80 @@
             }
             else if (cmd == '9' && steps3 < 280)
             { 
-                rest = false;
+
                 stepEngine3Right();
                 steps3 ++;
             }
             //ENGINE 2
             else if (cmd == '4' && steps2 > -242)
             {
-                rest = false;
+
                 steps2 --;
                 stepEngine2Left();
             }
             else if (cmd == '6' && steps2 < 242)
             {
-                rest = false;
+
                 steps2 ++;
                 stepEngine2Right();
             }
             //ENGINE 3
             else if (cmd == '1' && steps1 > -242)
             {
-                rest = false;
+
                 steps1--;
                 stepEngine1Left();
             }
             else if (cmd == '3' && steps1 < 242)
             {
-                rest = false;
+
+                steps1++;
+                stepEngine1Right();
+            }
+            */
+            
+            if(cmd == '7')
+            {
+
+                
+                steps3 --;
+                stepEngine3Left();
+                
+            }
+            else if (cmd == '9')
+            { 
+
+                stepEngine3Right();
+                steps3 ++;
+            }
+            //ENGINE 2
+            else if (cmd == '4')
+            {
+
+                steps2 --;
+                stepEngine2Left();
+            }
+            else if (cmd == '6')
+            {
+
+                steps2 ++;
+                stepEngine2Right();
+            }
+            //ENGINE 3
+            else if (cmd == '1')
+            {
+
+                steps1--;
+                stepEngine1Left();
+            }
+            else if (cmd == '3')
+            {
+
                 steps1++;
                 stepEngine1Right();
             }
             
-            if (m_cmd == 'y')
+            if (cmd == 'y')
             {
                 int step = 100;
                 while (step >= 0)
@@ -900,7 +925,7 @@
                 
             }
             
-            if (m_cmd == 't')
+            if (cmd == 't')
             {
                 int step1, step2, step3;
                 step1 = 100;