Programm mit Ablauf
Dependencies: EPOS2 mbed-rtos mbed
Fork of Projekt_Kugelbahn by
Diff: main.cpp
- Revision:
- 14:bee23de5dff0
- Parent:
- 13:cc43e546f310
- Child:
- 15:c31c862632c0
- Child:
- 16:e5343d6c9fb2
--- a/main.cpp Wed Oct 19 10:02:02 2016 +0000 +++ b/main.cpp Thu Nov 03 10:36:46 2016 +0000 @@ -27,8 +27,8 @@ bool node3_homed = false; bool node4_homed = false; bool node5_homed = false; -bool node6_homed = true; -bool node7_homed = true; +bool node6_homed = false; +bool node7_homed = false; bool Power_ein = true; bool node5_grundposition = false; @@ -47,7 +47,7 @@ int ErrorState5; int ErrorState6; int ErrorState7; -float speed = 1.2; +float speed = 1.5; void interrupt_usv(){ //Funktion, wird aufgeruffen durch den interrupt des USV's current_step = 5; @@ -106,6 +106,12 @@ if(MyEpos1.GetError() != 0 or MyEpos2.GetError() != 0 or MyEpos3.GetError() != 0 or MyEpos4.GetError() != 0 or MyEpos5.GetError() != 0 /*or MyEpos6.GetError() != 0 or MyEpos7.GetError() != 0*/){ current_step = 7; //FEHLER + MyEpos1.MoveVelocity(0, 500, 500); + MyEpos2.MoveVelocity(0, 500, 500); + MyEpos3.MoveVelocity(0, 500, 500); + MyEpos4.MoveVelocity(0, 500, 500); + MyEpos5.MoveVelocity(0, 500, 500); + wait(0.1); ErrorState1 = MyEpos1.GetError(); ErrorState2 = MyEpos2.GetError(); ErrorState3 = MyEpos3.GetError(); @@ -115,15 +121,19 @@ pc.printf("ErrorState Panels/Kopf: Panel Aussen Linkss=%d, Panel Innen Links=%d, Panel Aussen Rechts=%d, Panel Innen Rechts=%d, Kopf=%d\r\n", ErrorState1, ErrorState2, ErrorState3, ErrorState4, ErrorState5); } -/* if(MyEpos6.GetError() != 0 or MyEpos7.GetError() != 0){ - current_step = 76; //FEHLER + if(MyEpos6.GetError() != 0 or MyEpos7.GetError() != 0){ + current_step = 6; //FEHLER + MyEpos1.MoveVelocity(0, 500, 500); + MyEpos2.MoveVelocity(0, 500, 500); + MyEpos3.MoveVelocity(0, 500, 500); + wait(0.1); ErrorState6 = MyEpos6.GetError(); ErrorState7 = MyEpos7.GetError(); wait(0.1); pc.printf("Bohrgestell/Bohrer ErrorState: Bohrgestell=%d, Bohrer=%d\r\n", ErrorState6, ErrorState7); } -*/ switch (current_step){ + switch (current_step){ case 1://HOMING: led1 = 1; @@ -140,33 +150,12 @@ /***********************HOMING*************************/ - - if (node5_homed == false){ - pc.printf("Homing5\n"); - MyEpos5.Homing(); //Kopf - //wait(5); - MyEpos5.MoveAbsolute(-60000,800,100,100); //Kopf - pc.printf("Fahren auf -60000\n"); - while(MyEpos5.TargetReached()!=1){ - if(MyEpos5.GetError() == 1){ - break; - } - } - pc.printf("Target reached\n"); - node5_homed = true; - break; - } - if (node1_homed == false){ if(epos1_homing == false){ MyEpos1.MoveVelocity(-400, 100, 100); //Fährt auf Endschalter vor Beginn mit Stromhoming epos1_homing = true; } -/* if(MyEpos1.GetError() != 0){ - current_step = 7; - break; - } -*/ if(MyEpos1.GetDigIn(4) == 1){ + if(MyEpos1.GetDigIn(4) == 1){ pc.printf("Homing1\n"); MyEpos1.Homing(); //Solarpanel_Aussen_Links node1_homed = true; @@ -181,19 +170,29 @@ MyEpos3.MoveVelocity(400, 100, 100); //Fährt auf Endschalter vor Beginn mit Stromhoming epos3_homing = true; } -/* if(MyEpos3.GetError() != 0){ - current_step = 7; - break; - } -*/ if(MyEpos3.GetDigIn(4) == 1){ + if(MyEpos3.GetDigIn(4) == 1){ pc.printf("Homing3\n"); MyEpos3.Homing(); //Solarpanel_Aussen_Rechts node3_homed = true; } break; } - + if (node5_homed == false){ + pc.printf("Homing5\n"); + MyEpos5.Homing(); //Kopf + MyEpos5.MoveAbsolute(-60000,800,100,100); //Kopf + pc.printf("Fahren auf -60000\n"); + while(MyEpos5.TargetReached()!=1){ + if(MyEpos5.GetError() == 1){ + break; + } + } + pc.printf("Target reached\n"); + node5_homed = true; + break; + } + if (node7_homed == false){ pc.printf("Homing7\n"); MyEpos7.Homing(); //Bohrer @@ -215,6 +214,7 @@ pc.printf("Homing4\n"); MyEpos4.Homing(); //Solarpanel_Innen_Rechts node4_homed = true; + MyEpos5.MoveAbsolute(500,800*speed,100,100); //Kopf wait(0.1); break; } @@ -229,7 +229,7 @@ } if (node2_homed == true and node4_homed == true and node5_grundposition == false){ - MyEpos5.MoveAbsolute(500,800*speed,100,100); //Kopf + //MyEpos5.MoveAbsolute(500,800*speed,100,100); //Kopf wait(0.1); while(MyEpos5.TargetReached() != 1){ if(MyEpos5.GetError() == 1){ @@ -260,7 +260,6 @@ case 2://BEREIT: - //pc.printf("Bereit\n"); led2 = 1; MyEpos5.SetDigOut(4,0); if (MyEpos5.GetDigIn(3) == 1){ @@ -271,12 +270,28 @@ MyEpos3.Power(1); MyEpos4.Power(1); MyEpos5.Power(1); + MyEpos6.Power(1); + MyEpos7.Power(1); einfahren = false; ausfahren_step = 1; current_step = 3; wait(0.5); } + wait(0.1); + /********TEST********/ /* + MyEpos5.SetDigOut(4,1); wait_ms(10); + MyEpos1.Power(1); + MyEpos2.Power(1); + MyEpos3.Power(1); + MyEpos4.Power(1); + MyEpos5.Power(1); + MyEpos6.Power(1); + MyEpos7.Power(1); + einfahren = false; + ausfahren_step = 1; + current_step = 3; + */ /********TEST*******/ led2 = 0; break; @@ -300,6 +315,7 @@ ausfahren_step = 3; wait(1); } + wait(0.1); break; case 3: @@ -310,15 +326,50 @@ ausfahren_step = 4; wait(1); } + wait(0.1); break; case 4: if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ + MyEpos6.MoveAbsolute(-76000,500*speed,100*speed,100*speed); //Bohrgestell + ausfahren_step = 5; + wait(1); + } + wait(0.1); + break; + + + case 5: + if (MyEpos6.TargetReached()==1){ + MyEpos7.MoveAbsolute(700000,2000*speed,500*speed,500*speed); //Bohrer + ausfahren_step = 6; + wait(1); + } + wait(0.1); + break; + + + case 6: + if (MyEpos7.TargetReached()==1){ einfahren = true; einfahren_step = 1; wait(1); } + wait(0.1); +// while(buffering == 0){//für Fotograf +// } break; + + /* + case 4: + if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ + einfahren = true; + einfahren_step = 3; + wait(1); + } + wait(0.1); + break; + */ @@ -328,43 +379,65 @@ if (einfahren == true){ ausfahren_step = 1; switch (einfahren_step){ + case 1: - MyEpos1.MoveAbsolute(4000,500*speed,100*speed,100*speed); //Panel Aussen Links - MyEpos3.MoveAbsolute(-4000,500*speed,100*speed,100*speed); //Panel Aussen Rechts + MyEpos7.MoveAbsolute(0,2000*speed,500*speed,500*speed); //Bohrer einfahren_step = 2; wait(0.1); break; + + case 2: + if (MyEpos7.TargetReached()==1){ + MyEpos6.MoveAbsolute(0,500*speed,100*speed,100*speed); //Bohrgestell + einfahren_step = 3; + wait(1); + } + wait(0.1); + break; - case 2: + case 3: +// if (MyEpos7.TargetReached()==1){ + MyEpos1.MoveAbsolute(10000,500*speed,100*speed,100*speed); //Panel Aussen Links + MyEpos3.MoveAbsolute(-10000,500*speed,100*speed,100*speed); //Panel Aussen Rechts + einfahren_step = 4; +// wait(1); +// } + wait(0.1); + break; + + case 4: if (MyEpos1.GetActualPos() < 20000 and MyEpos3.GetActualPos() > -20000){ MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts MyEpos2.MoveAbsolute(0,500*speed,100*speed,100*speed); //Panel Innen Links MyEpos4.MoveAbsolute(0,500*speed,100*speed,100*speed); //Panel Innen Rechts - einfahren_step = 3; + einfahren_step = 5; wait(0.1); } + wait(0.1); break; - case 3: + case 5: if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1){ MyEpos5.MoveAbsolute(1000,500*speed,100*speed,100*speed); //Kopf MyEpos1.Power(0); MyEpos2.Power(0); MyEpos3.Power(0); MyEpos4.Power(0); - einfahren_step = 4; + einfahren_step = 6; wait(0.1); } + wait(0.1); break; - case 4: + case 6: if (MyEpos5.TargetReached()==1){ einfahren = false; current_step = 2; wait(1); MyEpos5.Power(0); } + wait(0.1); break; }//switch(einfahren_step) @@ -378,6 +451,8 @@ MyEpos5.SetDigOut(4,1); switch (usv_step){ case 0: + pc.printf("USV 0\n"); + wait(0.1); MyEpos1.Power(1); MyEpos2.Power(1); MyEpos3.Power(1); @@ -386,26 +461,31 @@ MyEpos6.Power(1); MyEpos7.Power(1); usv_step = 1; + wait(0.1); break; case 1: + pc.printf("USV 1\n"); MyEpos1.MoveAbsolute(2000,500,500,500); //Panel_Aussen_Links MyEpos3.MoveAbsolute(-2000,500,500,500); //Panel_Aussen_Rechts + MyEpos7.MoveAbsolute(0,2000,500,500); //Bohrer wait(0.1); - if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ + if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1 and MyEpos7.TargetReached()==1){ usv_step = 2; wait(0.1); } break; case 2: - + pc.printf("USV 2\n"); MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Links MyEpos2.MoveAbsolute(0,500,500,500); //Panel_Innen_Links MyEpos4.MoveAbsolute(0,500,500,500); //Panel_Innen_Links + + MyEpos6.MoveAbsolute(0,500,100,100); //Bohrgestell wait(0.1); if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1 /*and MyEpos6.TargetReached()==1*/){ @@ -415,15 +495,17 @@ break; case 3: - MyEpos5.MoveAbsolute(0,800,500,500); //Kopf + pc.printf("USV 3\n"); + MyEpos5.MoveAbsolute(0,800,500,500); //Kopf + wait(0.1); + if (MyEpos5.TargetReached()==1){ + usv_step = 4; wait(0.1); - if (MyEpos5.TargetReached()==1){ - usv_step = 4; - wait(0.1); - } + } break; case 4: + pc.printf("USV 4\n"); MyEpos1.Power(0); MyEpos2.Power(0); MyEpos3.Power(0); @@ -436,6 +518,7 @@ break; case 5: + pc.printf("USV 5\n"); if(buffering == 1){ led3 = 1; } else { @@ -445,6 +528,8 @@ usv_step=0; ausfahren_step=1; einfahren_step=1; + wait(0.1); + break; } wait(1); break; @@ -452,18 +537,22 @@ led4 = 0; break; - case 6: + case 6: //Fehler Bohrer/Bohrgestell pc.printf("Fehler RESET Bohrer\n"); - MyEpos5.MoveVelocity(0, 500, 500); - MyEpos6.MoveVelocity(0, 500, 500); - wait(3); - MyEpos5.Reset(); - MyEpos5.Power(1); - MyEpos6.Reset(); - MyEpos6.Power(1); + MyEpos7.MoveVelocity(0, 500, 500); + if (MyEpos7.TargetReached() == 1){ + MyEpos6.MoveVelocity(0, 500, 500); + if(MyEpos6.TargetReached() == 1){ + MyEpos5.Reset(); + MyEpos5.Power(1); + MyEpos6.Reset(); + MyEpos6.Power(1); + current_step = 1; + } + } //node1_homed = false; //node2_homed = false; - current_step = 3; + //current_step = 1; break; case 7: @@ -473,7 +562,7 @@ MyEpos3.MoveVelocity(0, 500, 500); MyEpos4.MoveVelocity(0, 500, 500); MyEpos5.MoveVelocity(0, 500, 500); - wait(3); + wait(1); MyEpos1.Reset(); MyEpos1.Power(1); MyEpos2.Reset(); @@ -493,17 +582,21 @@ node5_homed = false; Power_ein = true; if(MyEpos2.GetActualPos() < 100000 or MyEpos4.GetActualPos() > -100000){ - MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links - MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts + MyEpos1.Homing(); + MyEpos3.Homing(); + MyEpos1.MoveAbsolute(0,500,100,100); + MyEpos3.MoveAbsolute(0,500,100,100); MyEpos2.MoveAbsolute(0,500,100,100); //Panel Innen Links MyEpos4.MoveAbsolute(0,500,100,100); //Panel Innen Rechts while (MyEpos2.TargetReached() != 1 or MyEpos4.TargetReached() != 1){ if(MyEpos2.GetError() == 1 or MyEpos4.GetError() == 1){ + //wait(0.1); break; } + //wait(0.1); } } - current_step = 1; + current_step = 6; wait(0.1); break;