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
Diff: main.cpp
- Revision:
- 30:fac5b5624fe3
- Parent:
- 29:00f839aad30e
diff -r 00f839aad30e -r fac5b5624fe3 main.cpp --- 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;