Gerard Essink / Mbed 2 deprecated K9motoraansturing_copy

Dependencies:   BMT-K9-Regelaar Encoder MODSERIAL mbed

Fork of BMT-K9-Regelaar by First Last

Committer:
gerard1993
Date:
Tue Oct 15 14:10:02 2013 +0000
Revision:
3:1241d75b7f49
Parent:
2:3d4a843be2a9
Child:
4:9ecf57487c72
2e motor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:7bc93f851767 1 #include "mbed.h"
vsluiter 0:7bc93f851767 2 #include "encoder.h"
vsluiter 0:7bc93f851767 3 #include "MODSERIAL.h"
vsluiter 0:7bc93f851767 4
vsluiter 1:9d05c0236c7e 5 /** keep_in_range -> float in, and keep_in_range if less than min, or larger than max **/
vsluiter 1:9d05c0236c7e 6 void keep_in_range(float * in, float min, float max);
vsluiter 1:9d05c0236c7e 7
vsluiter 0:7bc93f851767 8 volatile bool looptimerflag;
vsluiter 0:7bc93f851767 9
vsluiter 0:7bc93f851767 10 void setlooptimerflag(void)
vsluiter 0:7bc93f851767 11 {
vsluiter 0:7bc93f851767 12 looptimerflag = true;
vsluiter 0:7bc93f851767 13 }
vsluiter 0:7bc93f851767 14
vsluiter 0:7bc93f851767 15
vsluiter 0:7bc93f851767 16 int main() {
vsluiter 1:9d05c0236c7e 17 //LOCAL VARIABLES
vsluiter 1:9d05c0236c7e 18 AnalogIn potmeter(PTC2);
gerard1993 3:1241d75b7f49 19 Encoder motor1(PTD5,PTC8);//first pin on PTAx or PTDx
vsluiter 0:7bc93f851767 20 MODSERIAL pc(USBTX,USBRX);
gerard1993 3:1241d75b7f49 21 PwmOut pwm_motor(PTA5);
gerard1993 3:1241d75b7f49 22 DigitalOut motordir(PTD1);
vsluiter 0:7bc93f851767 23 float setpoint;
vsluiter 1:9d05c0236c7e 24 float pwm_to_motor;
gerard1993 2:3d4a843be2a9 25 float setspeed;
gerard1993 2:3d4a843be2a9 26 float speed;
gerard1993 2:3d4a843be2a9 27 float position2;
gerard1993 2:3d4a843be2a9 28 float setpoint2;
vsluiter 1:9d05c0236c7e 29 //START OF CODE
vsluiter 1:9d05c0236c7e 30 pc.baud(230400);
vsluiter 0:7bc93f851767 31 Ticker looptimer;
vsluiter 0:7bc93f851767 32 looptimer.attach(setlooptimerflag,0.01);
vsluiter 1:9d05c0236c7e 33 pc.printf("bla");
gerard1993 2:3d4a843be2a9 34 speed = 0;
gerard1993 2:3d4a843be2a9 35 position2 = 0;
gerard1993 2:3d4a843be2a9 36 setpoint2 = 0;
vsluiter 1:9d05c0236c7e 37 //INFINITE LOOP
vsluiter 0:7bc93f851767 38 while(1) {
vsluiter 1:9d05c0236c7e 39 while(looptimerflag != true);
vsluiter 0:7bc93f851767 40 looptimerflag = false;
vsluiter 1:9d05c0236c7e 41 setpoint = (potmeter.read()-0.5)*2000;
gerard1993 2:3d4a843be2a9 42 setspeed =(setpoint - setpoint2)/0.01;
gerard1993 2:3d4a843be2a9 43 speed = (motor1.getPosition() - position2)/0.01;
vsluiter 0:7bc93f851767 44 pc.printf("s: %f, %d \n\r", setpoint, motor1.getPosition());
gerard1993 2:3d4a843be2a9 45 pwm_to_motor = (setpoint - motor1.getPosition())*.0001 + (setspeed - speed)*.00005 ;
vsluiter 1:9d05c0236c7e 46 keep_in_range(&pwm_to_motor, -1,1);
gerard1993 2:3d4a843be2a9 47 setpoint2 = setpoint;
gerard1993 2:3d4a843be2a9 48 position2 = motor1.getPosition();
vsluiter 1:9d05c0236c7e 49 if(pwm_to_motor > 0)
gerard1993 2:3d4a843be2a9 50 motordir = 1;
vsluiter 0:7bc93f851767 51 else
gerard1993 2:3d4a843be2a9 52 motordir = 0;
vsluiter 1:9d05c0236c7e 53 //WRITE VALUE TO MOTOR
vsluiter 1:9d05c0236c7e 54 pwm_motor.write(abs(pwm_to_motor));
vsluiter 0:7bc93f851767 55 }
vsluiter 0:7bc93f851767 56 }
vsluiter 0:7bc93f851767 57
vsluiter 0:7bc93f851767 58
vsluiter 0:7bc93f851767 59 //coerces value 'in' to min or max when exceeding those values
vsluiter 0:7bc93f851767 60 //if you'd like to understand the statement below take a google for
vsluiter 0:7bc93f851767 61 //'ternary operators'.
vsluiter 1:9d05c0236c7e 62 void keep_in_range(float * in, float min, float max)
vsluiter 0:7bc93f851767 63 {
vsluiter 0:7bc93f851767 64 *in > min ? *in < max? : *in = max: *in = min;
vsluiter 0:7bc93f851767 65 }
vsluiter 0:7bc93f851767 66
vsluiter 0:7bc93f851767 67
vsluiter 0:7bc93f851767 68