Alle subfiles samengevoegd
Dependencies: HIDScope biquadFilter mbed MODSERIAL FastPWM QEI
Diff: main.cpp
- Revision:
- 4:05c5da1c8b08
- Parent:
- 3:c524afedf863
- Child:
- 5:b4a0301ec8cc
--- a/main.cpp Mon Oct 24 09:00:05 2016 +0000 +++ b/main.cpp Mon Oct 24 10:15:56 2016 +0000 @@ -121,20 +121,32 @@ } ///////////////////// functies voor motorhoekberekenen ////////////////////////// -// vorige x berekenen +// vorige x opslaan double Calc_Prev_x () { double Prev_x = x; //pc.printf("prev x = %f\r\n", Prev_x); return Prev_x; } -// vorige y berekenen +// vorige y opslaan double Calc_Prev_y () { double Prev_y = y; //pc.printf("prev y = %f\r\n", Prev_y); return Prev_y; } +// vorige Theta1Gear opslaan +double Calc_Prev_Theta1_Gear () { + double Prev_Theta1_Gear = Theta1Gear; + return Prev_Theta1_Gear; +} + +//vorige Theta2Gear opslaan +double Calc_Prev_Theta2_Gear () { + double Prev_Theta2_Gear = Theta2Gear; + return Prev_Theta2_Gear; +} + void FunctieFlipper(); // declarate function, function discribed below // berekenen van de nieuwe x en y waardes bool CalcXY (bool BicepsLeft, bool BicepsRight, bool Leg, bool Stepper_State) { @@ -201,11 +213,9 @@ } // calculate Theta1 -void CalcTheta1 (double Dia1, double Prev_x, double Prev_y) { +void CalcTheta1 (double Dia1) { double a = 50.0; double Bar = 200.0; // lengte van de armen - double Prev_Theta1_Gear = Theta1Gear; - double MaxThetaGear = 100.0; // de hoek voordat arm het opstakel raakt (max hoek is 107.62 tussen arm en opstakel, maken er 100 van voor veiligheid) // Hoek berekenen van het grote tandwiel (gear) if (x > -a) { @@ -219,25 +229,17 @@ } Theta1Gear = Theta1Gear*180.0/pi; // veranderen van radialen naar graden - // limiten (als de hoek te groot wordt, reset dan de hoek en de x en y waardes) - if (Theta1Gear >= MaxThetaGear) { // is de maximale hoek in radialen - Theta1Gear = Prev_Theta1_Gear; - x = Prev_x; - y = Prev_y; - } - // omrekenen van grote tandwiel naar motortandwiel Theta1 = Theta1Gear*42.0/12.0; // grote tandwiel heeft 42 tanden. Motortandwiel heeft er 12. - pc.printf("thetaMotor = %f, thetaGear = %f, Prev_Gear = %f\r\n", Theta1, Theta1Gear, Prev_Theta1_Gear); + pc.printf("thetaMotor = %f, thetaGear = %f, Prev_Gear = %f\r\n", Theta1, Theta1Gear); } -void CalcTheta2 (double Dia2, double Prev_x, double Prev_y) { +void CalcTheta2 (double Dia2) { double a = 50.0; double Bar = 200.0; // lengte van de armen double Prev_Theta2_Gear = Theta2Gear; - double MaxThetaGear = 100.0; // de hoek voordat arm het opstakel raakt (max hoek is 107.62 tussen arm en opstakel, maken er 100 van voor veiligheid) - + // Hoek berekenen van het grote tandwiel (gear) if (x < a) { Theta2Gear = pi + atan(y/(x-a)) - acos(Dia2/Bar); @@ -250,28 +252,39 @@ } Theta2Gear = Theta2Gear*180/pi; // veranderen van radialen naar graden - // limiten (als de hoek te groot wordt, reset dan de hoek en de x en y waardes) - if (Theta2Gear >= MaxThetaGear) { + // omrekenen van grote tandwiel naar motortandwiel + Theta2 = Theta2Gear*42.0/12.0; // grote tandwiel heeft 42 tanden. Motortandwiel heeft er 12. + + pc.printf("thetaMotor = %f, thetaGear = %f, Prev_Gear = %f\r\n", Theta2, Theta2Gear); +} + +// als een van de hoeken te groot wordt, zet dan alles terug naar de vorige positie +void AngleLimits (double Prev_Theta1_Gear, double Prev_Theta2_Gear, double Prev_x, double Prev_y) { + double MaxThetaGear = 100.0; // de hoek voordat arm het opstakel raakt (max hoek is 107.62 tussen arm en opstakel, maken er 100 van voor veiligheid) + + if (Theta1Gear >= MaxThetaGear || Theta2Gear >= MaxThetaGear) { + Theta1Gear = Prev_Theta1_Gear; Theta2Gear = Prev_Theta2_Gear; x = Prev_x; y = Prev_y; + + Theta1 = Theta1Gear*42.0/12.0; + Theta2 = Theta2Gear*42.0/12.0; } - - // omrekenen van grote tandwiel naar motortandwiel - Theta2 = Theta2Gear*42.0/12.0; // grote tandwiel heeft 42 tanden. Motortandwiel heeft er 12. - - pc.printf("thetaMotor = %f, thetaGear = %f, Prev_Gear = %f\r\n", Theta2, Theta2Gear, Prev_Theta2_Gear); } void CalculationsForTheta () { sample(); double Prev_x = Calc_Prev_x (); double Prev_y = Calc_Prev_y (); + double Calc_Prev_Theta1_Gear (); + double Calc_Prev_Theta2_Gear (); bool Stepper_State = CalcXY (BicepsLeft, BicepsRight, Leg, Stepper_State); double Dia1 = CalcDia1 (x, y); double Dia2 = CalcDia2 (x, y); - CalcTheta1 (Dia1, Prev_x, Prev_y); - CalcTheta2 (Dia2, Prev_x, Prev_y); + CalcTheta1 (Dia1); + CalcTheta2 (Dia2); + AngleLimits (Theta1Gear, Theta2Gear, Prev_x, Prev_y); scope.send(); }