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:
- 17:ff0021c4dcdc
- Parent:
- 16:a3555918c025
- Child:
- 18:ef02a9014491
diff -r a3555918c025 -r ff0021c4dcdc main.cpp --- a/main.cpp Tue Apr 26 14:13:34 2016 +0000 +++ b/main.cpp Tue Apr 26 14:25:29 2016 +0000 @@ -26,7 +26,7 @@ -void step4Right() +void stepAllRight() { //engine 1 IN1=0; @@ -38,6 +38,11 @@ IN6=1; IN7=0; IN8=1; + //engine 3 + IN9=0; + IN10=1; + IN11=0; + IN12=1; wait_us(fart); //legg som global variabel "fart" //engine 1 IN1=0; @@ -49,6 +54,11 @@ IN6=1; IN7=1; IN8=0; + //engine 3 + IN9=0; + IN10=1; + IN11=1; + IN12=0; wait_us(fart); //engine 1 IN1=1; @@ -60,6 +70,11 @@ IN6=0; IN7=1; IN8=0; + //engine 3 + IN9=1; + IN10=0; + IN11=1; + IN12=0; wait_us(fart); //engine 1 IN1=1; @@ -71,9 +86,14 @@ IN6=0; IN7=0; IN8=1; + //engine 3 + IN9=1; + IN10=0; + IN11=0; + IN12=1; wait_us(fart); } -void step4Left() +void stepAllLeft() { //engine 1 IN1=1; @@ -85,6 +105,11 @@ IN6=0; IN7=0; IN8=1; + //engine 3 + IN9=1; + IN10=0; + IN11=0; + IN12=1; wait_us(fart); //engine 1 IN1=1; @@ -96,6 +121,11 @@ IN6=0; IN7=1; IN8=0; + //engine 3 + IN9=1; + IN10=0; + IN11=1; + IN12=0; wait_us(fart); //engine 1 IN1=0; @@ -107,6 +137,11 @@ IN6=1; IN7=1; IN8=0; + //engine 3 + IN9=0; + IN10=1; + IN11=1; + IN12=0; wait_us(fart); //engine 1 IN1=0; @@ -118,10 +153,116 @@ IN6=1; IN7=0; IN8=1; + //engine 3 + IN9=0; + IN10=1; + IN11=0; + IN12=1; + wait_us(fart); +} + +void stepEngine1Left() +{ + //engine 1 + IN1=1; + IN2=0; + IN3=0; + IN4=1; + wait_us(fart); + IN1=1; + IN2=0; + IN3=1; + IN4=0; + wait_us(fart); + IN1=0; + IN2=1; + IN3=1; + IN4=0; + wait_us(fart); + IN1=0; + IN2=1; + IN3=0; + IN4=1; wait_us(fart); } - +void stepEngine1Right() +{ + //engine 1 + IN1=0; + IN2=1; + IN3=0; + IN4=1; + wait_us(fart); + IN1=0; + IN2=1; + IN3=1; + IN4=0; + wait_us(fart); + IN1=1; + IN2=0; + IN3=1; + IN4=0; + wait_us(fart); + IN1=1; + IN2=0; + IN3=0; + IN4=1; + wait_us(fart); +} + +void stepEngine2Right() +{ + //engine 1 + IN5=0; + IN6=1; + IN7=0; + IN8=1; + wait_us(fart); + IN5=0; + IN6=1; + IN7=1; + IN8=0; + wait_us(fart); + IN5=1; + IN6=0; + IN7=1; + IN8=0; + wait_us(fart); + IN5=1; + IN6=0; + IN7=0; + IN8=1; + wait_us(fart); +} + +void stepEngine2Left() +{ + //engine 1 + IN5=1; + IN6=0; + IN7=0; + IN8=1; + wait_us(fart); + IN5=1; + IN6=0; + IN7=1; + IN8=0; + wait_us(fart); + IN5=0; + IN6=1; + IN7=1; + IN8=0; + wait_us(fart); + IN5=0; + IN6=1; + IN7=0; + IN8=1; + wait_us(fart); +} + + + void input(void const *args) { while(true) @@ -130,8 +271,8 @@ if(pc.readable()) { m_cmd=pc.getc(); - } - + } + Thread::wait(10); //pc.printf("%d", steps); } @@ -149,12 +290,25 @@ { //Thread::wait(5); + + if(m_cmd == 't') + { + stepAllLeft(); + + } + if(m_cmd == 'y') + { + stepAllRight(); + + } + + //0 STEPS LEFT AT MAX SPEED if (m_cmd == '0') { fart = 1000; //global_direction = '0'; - step4Left(); + stepAllLeft(); //steps = steps + step; @@ -166,7 +320,7 @@ { fart = 1000; //global_direction = '1'; - step4Right(); + stepAllRight(); } else { @@ -177,7 +331,7 @@ { fart = 2000; //global_direction = '1'; - step4Right(); + stepAllRight(); //steps = steps + step; // printf("%i", &steps); @@ -187,7 +341,7 @@ { fart = 2000; //global_direction = '0'; - step4Left(); + stepAllLeft(); //steps = steps + step; // printf("%i", &steps); @@ -200,7 +354,7 @@ //Steps = 242 gives a 60' rotation to the left. while (steps >= 0) { - step4Left(); + stepAllLeft(); steps--; } m_cmd = 'x'; @@ -211,7 +365,7 @@ //Steps = 242 gives a 60' rotation to the right. while (steps >= 0) { - step4Right(); + stepAllRight(); steps--; } m_cmd = 'x';