Werkt dit?
Dependencies: mbed QEI HIDScope biquadFilter MODSERIAL FastPWM
Diff: main.cpp
- Revision:
- 11:1166af209e55
- Parent:
- 10:b8c60fd468f1
--- a/main.cpp Sun Oct 06 13:14:40 2019 +0000 +++ b/main.cpp Mon Oct 07 08:45:03 2019 +0000 @@ -25,11 +25,11 @@ class motor_state { // Een emmer met variabelen die je hierna motor gaat noemen. public: //variabelen kunnen worden gebruikt door externe functies - float pwm1; //pwm of 1st motor - float pwm2; //pwm of 2nd motor + float dutycycle1; //pwm of 1st motor + float dutycycle2; //pwm of 2nd motor int dir1; //direction of 1st motor int dir2; //direction of 2nd motor -}; +} ; motor_state motor; //Een emmer met variabelen met motor.iets als naam bijv. motor.speed1 bool state_changed = false; // wordt gebruikt in de state functies, om te kijken of de state net begint @@ -44,7 +44,7 @@ float x_movement = 0; float y_movement = 0; float angle = 0; -float extention = 0; +float extension = 0; void calibration() { //kalibratie van de sensoren (de nulstand invoeren) letter = pc.getc() // krijg de letter vanuit de keyboard @@ -60,7 +60,9 @@ while (letter == d) { x_movement = 1; } - robot_kinematics() // hoe dat dit precies moet geen idee. Dit lijkt me een goed begin of iig een begin + while (int pc.getc() != 'p') { + robot_kinematics() // hoe dat dit precies moet geen idee. Dit lijkt me een goed begin of iig een begin + } x_movement = 0; y_movement = 0; @@ -68,7 +70,7 @@ } void robot_kinematics() { //hoe de motoren moeten draaien als er een x of y richting als input is. - [motor.dir1, motor.dir2; motor.speed1, motor.speed2] = H^-1 *[x_movement, y_movement; angle] // Zoiets + [motor.dir1, motor.dir2; motor.speed1, motor.speed2] = H^-1 *[x_movement, y_movement; angle, extension] // Zoiets } @@ -76,10 +78,13 @@ // the funtions needed to run the program void measure_signals() { + /* x_input = joystick_x.read(); + pc.printf("X reading is %f" x_input); y_input = joystick_y.read(); + pc.printf("Y reading is %f", y_input); - /* + letter = pc.getc() // krijg de letter vanuit de keyboard if (letter == w){ y_movement = 1; @@ -95,24 +100,22 @@ } angle = (encoder1.getPulses()-angle_0)/8400*360; //kijkt op welke stand encoder 1 nu staat (dat hoort dus de basis motor te zijn!) /8400 signalen per rotatie * 360 graden - extention = encoder2.getPulses()-extention_0/8400*8*5.05; //kijkt hoever de arm is uitgeschoven (/8400 per rotatie *8mm per rotatie aan verschuiving * 5.05 de gear ratio) + extension = encoder2.getPulses()-extention_0/8400*8*5.05; //kijkt hoever de arm is uitgeschoven (/8400 per rotatie *8mm per rotatie aan verschuiving * 5.05 de gear ratio) */ pot_1 = Pot1.read(); - pc.printf("pot_1 = %f",pot_1); // Dit doet hij niet, waarom niet? Er scheelt niet veel aan, maar toch - motor.speed1 = pot_1*0.75; //pod_read * 0.75 (dus max 75%) + motor.dutycycle1 = pot_1*0.75; //pod_read * 0.75 (dus max 75%) pot_2 = Pot2.read(); - pc.printf("pot_2 = %f",pot_2); // Dit doet hij niet, waarom niet? Er scheelt niet veel aan, maar toch - motor.speed2 = pot_2*0.75; //pod_read * 0.75 (dus max 75%) + motor.dutycycle2 = pot_2*0.75; //pod_read * 0.75 (dus max 75%) return; } void do_nothing() { - motor.speed1 = 0; - motor.speed2 = 0; + motor.dutycycle1 = 0; + motor.dutycycle2 = 0; //state guard @@ -134,8 +137,9 @@ motor.dir1 = 1; //todo: check if this is actually clockwise motor.dir2 = 1; //todo: check if this is actually clockwise - motor.pwm1 = x_input; //nog niet echt de x, maar de rotatie, moet later met kinematics gefixt worden - motor.pwm2 = y_input; // ook nog niet echt de y dus + /// motor.dutycycle1 = x_input; //nog niet echt de x, maar de rotatie, moet later met kinematics gefixt worden + /// motor.dutycycle2 = y_input; // ook nog niet echt de y dus + //state guard if (!state_changed && but1_pressed) { //state wasnt just changed, button 1 has been pressed -> change state current_state = ccw; @@ -154,8 +158,8 @@ motor.dir1 = 0; motor.dir2 = 0; - motor.pwm1 = x_input; //nog niet echt de x - motor.pwm2 = y_input; //nog niet echt de y + /// motor.dutycycle1 = x_input; //nog niet echt de x + /// motor.dutycycle2 = y_input; //nog niet echt de y //state guard if (!state_changed && but1_pressed) { //state niet veranderd, button 1 gepressd -> state verandert @@ -168,11 +172,11 @@ void motor_controller() { motor1_direction = motor.dir1; // Zet de richting goed - motor1_pwm.write(motor.pwm1); // Zet het op de snelheid van motor.speed1 - + motor1_pwm.write(motor.dutycycle1); // Zet het op de snelheid van motor.speed1 + motor2_direction = motor.dir2; - motor2_pwm.write(motor.pwm2); + motor2_pwm.write(motor.dutycycle2); return; }