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

Revision:
25:321b970eb3ff
Parent:
24:24c91a6ae6ba
Child:
26:57c62b925064
--- a/main.cpp	Wed May 11 19:39:46 2016 +0000
+++ b/main.cpp	Mon May 30 08:16:42 2016 +0000
@@ -3,7 +3,18 @@
 #include "PinDetect.h"
 
 Serial pc(USBTX, USBRX); // tx, rx
-PinDetect pb(A5);
+
+//Mid
+PinDetect pb3(A4);
+PinDetect pb4(A5);
+
+//Bottom
+PinDetect pb1(D14);
+PinDetect pb2(D15);
+
+//Top
+PinDetect pb5(D12);
+PinDetect pb6(D13);
 
 //Analog Pins
 //First engine
@@ -12,22 +23,26 @@
 DigitalOut IN3(A2);
 DigitalOut IN4(A3);
 //Second engine
-DigitalOut IN5(D3);
-DigitalOut IN6(D4);
-DigitalOut IN7(D5);
-DigitalOut IN8(D6);
+DigitalOut IN5(D8);
+DigitalOut IN6(D9);
+DigitalOut IN7(D10);
+DigitalOut IN8(D11);
 //Third Engine
-DigitalOut IN9(D8);
-DigitalOut IN10(D9);
-DigitalOut IN11(D10);
-DigitalOut IN12(D11);
+DigitalOut IN9(D3);
+DigitalOut IN10(D4);
+DigitalOut IN11(D5);
+DigitalOut IN12(D6);
 
 
-static int speed = 1500;
+static int speed = 2000;
+static int bootStep1 = 100;
+static int bootStep2 = 100;
+static int bootStep3 = 100;
 static char m_cmd = 'x';
 static bool e1 = true;
 static bool e2 = true;
 static bool e3 = true;
+static bool rest = false;
 
 static int steps1 = 0;
 static int steps2 = 0;
@@ -410,149 +425,226 @@
     }
 }
 
-//SPECIFY WHICH BUTTON IS PRESSED. NEED ONE CALLBACK FOR EACH BUTTON.
-void pb_hit_callback (void) 
+
+//MOTOR 1 LEFT SIDE BUTTON
+void pb1_hit_callback (void) 
 {
-    e1 = false;
-    //m_cmd = 'x';
-    /*
+    if(rest == false)
+    {
+        e1 = false;
+        
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine1Right();
+            stepsToCenter --;
+        }
+            //break;
+        //end if    
+    }
+    
     
     
-    */
+}
+
+
+//MOTOR 1 RIGHT SIDE BUTTON
+void pb2_hit_callback (void) 
+{
+    if(rest == false)
+    {
+        e1 = false;
+        //m_cmd = 'x';
     
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine1Left();
+            stepsToCenter --;
+        }
+    }
+  
+}
+//MOTOR 2 LEFT SIDE BUTTON
+void pb3_hit_callback (void) 
+{
+    if(rest == false)
+    {
+        e2 = false;
+        //m_cmd = 'x';
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine2Left();
+            stepsToCenter --;
+        }
+    }
 
 }
 
+//MOTOR 2 RIGHT SIDE BUTTON
+void pb4_hit_callback (void) 
+{
+    if(rest == false)
+    {
+        e2 = false;
+        //m_cmd = 'x';
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine2Right();
+            stepsToCenter --;
+        }
+    }
+
+
+}
+
+//MOTOR 3 LEFT SIDE BUTTON
+void pb5_hit_callback (void) 
+{
+    if(rest == false)
+    {
+        e3 = false;
+        //m_cmd = 'x';
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine3Left();
+            stepsToCenter --;
+        }
+    }
+
+
+}
+//MOTOR 3 RIGHT SIDE BUTTON
+void pb6_hit_callback (void) 
+{
+    if(rest == false)
+    {
+        e3 = false;
+        //m_cmd = 'x';
+        speed = 2000;
+        Thread::wait(1000);
+        int stepsToCenter = 242;
+                    
+        while (stepsToCenter >= 0)
+        {
+            stepEngine3Right();
+            stepsToCenter --;
+        }
+    }
+}
 
 int main()
 {
 
-        pb.mode(PullUp);
-        pb.attach_deasserted(&pb_hit_callback);
-        pb.setSampleFrequency();
+        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();
 
         //Thread 1 has constant feed from usb
         Thread t1(input);
         //static char global_direction;
         printf("Started");
-
-        
-        /*
-        
-        BOOT UP AND SYNCHRONIZE
-        while (true)
-        {
-            should move one engine at a time. If not, alot of work has to be done in if/else statements as well as new engine methods.. 
-            while(moving bottom part 180 degrees to one side  / steps < 0)
-            {
-                step bottom engine in one direction.
-                callback will fire and stop the engine
-            }
-            while(moving middle part 180 degrees to one side  / steps < 0)
-            {
-                step middle engine in one direction
-                callback fires and stops the engine
-            }  
-            while(moving middle part 180 degrees to one side  / steps < 0)
-            {
-                step middle engine in one direction
-                callback fires and stops the engine
-            }
-            //Break the while loop (FALSE)
-            break;
-            
-            
-        }
-        
-        */
         
         // Move motor in one direction
         while (true)
         {
             speed = 2000;
+
+            while(bootStep1 >= 0)
+            {
+                bootStep1--;
+                stepEngine1Right();   
+            }
             stepEngine1Left();
             if (e1 == false) 
             {
                 Thread::wait(1000);
-                int stepsToCenter = 242;
-                
-                while (stepsToCenter >= 0)
-                {
-                    stepEngine1Right();
-                    stepsToCenter --;
-                }
-                break;
+                break; 
             }//end if
-            
+           
         }//end while
-        /*
+        
+        //Set up buttons 3 and 4
+        pb3.attach_deasserted(&pb3_hit_callback);
+        pb3.setSampleFrequency();
+        pb4.attach_deasserted(&pb4_hit_callback);
+        pb4.setSampleFrequency();
+        
         while (true)
         {
-            stepEngine2Right();
+            
+            speed = 2000;
+            while(bootStep2 >= 0)
+            {
+                bootStep2--;
+                stepEngine2Right();
+                
+            }
+
+            stepEngine2Left();
             if (e2 == false) 
             {
-                Thread::wait(1000);
-                int stepsToCenter = 242;
+                pc.printf("HALLO");
                 
-                while (stepsToCenter >= 0)
-                {
-                    stepEngine2Left();
-                    stepsToCenter --;
-                }
+                Thread::wait(1000);
                 break;
             }//end if
         }
+        
+        pb5.attach_deasserted(&pb5_hit_callback);
+        pb5.setSampleFrequency();
+        pb6.attach_deasserted(&pb6_hit_callback);
+        pb6.setSampleFrequency();
         while (true)
         {
-            stepEngine2Left();
+            speed = 2000;
+            while(bootStep3 >= 0)
+            {
+                bootStep3--;
+                stepEngine3Right();
+                
+            }
+            stepEngine3Left();
             if (e3 == false) 
             {
+                pc.printf("HALLO");
                 Thread::wait(1000);
-                int stepsToCenter = 242;
-                
-                while (stepsToCenter >= 0)
-                {
-                    stepEngine3Right();
-                    stepsToCenter --;
-                }
                 break;
             }//end if
         }
 
-        */
-
         while (true) 
         {   
             speed = 1500;
             
 
-            if(m_cmd == 'a')
-            {
-                stepAllRight();
-            }         
-            
-            else if (m_cmd == 'b')
-            {
-                stepAllLeft();
-
-            }
-            
-   /*
-            else if (m_cmd == 'k')
-            {
-                int steps = 242;
-                
-                
-                //Steps = 242 gives a 60' rotation to the left. 
-                while (steps >= 0)
-                {
-                    stepAllLeft();
-                    steps--;
-                }
-                m_cmd = 'x';
-            } */
-
-            
             //Release all motors / Set all pins to 0
             if (m_cmd == 'z')
             {
@@ -562,79 +654,80 @@
             if (m_cmd == 'x')
             {
             }
+            
+            //Rest mode. Make the engines ignore pushbuttons.
+            /*
+            if(m_cmd == 'r')
+            {
+                rest = true;
+                //Step motors to rest position
+                
+                
+            }
+            */
   
             //Controlling each motor seperately.
-            //ENGINE 1
+            //ENGINE 3
             if(m_cmd == '7' && steps3 > -242)
             {
+                rest = false;
                 
                 steps3 --;
                 stepEngine3Left();
             }
             else if (m_cmd == '9' && steps3 < 242)
             { 
+                rest = false;
                 stepEngine3Right();
                 steps3 ++;
             }
             //ENGINE 2
             else if (m_cmd == '4' && steps2 > -242)
             {
+                rest = false;
                 steps2 --;
                 stepEngine2Left();
             }
             else if (m_cmd == '6' && steps2 < 242)
             {
+                rest = false;
                 steps2 ++;
                 stepEngine2Right();
             }
             //ENGINE 3
             else if (m_cmd == '1' && steps1 > -242)
             {
+                rest = false;
                 steps1--;
                 stepEngine1Left();
             }
             else if (m_cmd == '3' && steps1 < 242)
             {
+                rest = false;
                 steps1++;
                 stepEngine1Right();
             }
             
-            else if (m_cmd == 'y')
-            {
-                int a = 121;
-                int b = 60;
-                int c = 60;
-                
-                while (a >= 0)
-                {
-                    stepEngine1Left();
-                    a--;
-                }
-                while (b >= 0)
-                {
-                    stepEngine2Right();
-                    b--;
-                }
-                while (c >= 0)
-                {
-                    stepEngine3Left();
-                    c--;
-                }
-                
-                m_cmd = 'x';
+
+
 
-            }
-            /*
-            new_pb = pb;
-            if (new_pb == '1')
-            {
-                m_cmd ='x';
-            }
-            */
-        //Thread::wait(100);
-        //pc.printf("%d", steps3);
+        //Thread::wait(10);
+        //pc.printf("%d", steps2);
 
 
         }  //END WHILE TRUE
             
 } //END Main
+
+
+
+
+
+
+
+
+
+
+
+
+