Start van regelaar

Dependencies:   Encoder MODSERIAL mbed

Dependents:   K9motoraansturing_copy lichtpoortjes

Committer:
vsluiter
Date:
Wed Oct 09 09:41:56 2013 +0000
Revision:
2:3d39bce54dfe
Parent:
1:9d05c0236c7e
Child:
3:c9c1c0ebf89d
Einde van college

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);
vsluiter 1:9d05c0236c7e 19 Encoder motor1(PTD0,PTC9);//first pin on PTAx or PTDx
vsluiter 0:7bc93f851767 20 MODSERIAL pc(USBTX,USBRX);
vsluiter 0:7bc93f851767 21 PwmOut pwm_motor(PTA12);
vsluiter 0:7bc93f851767 22 DigitalOut motordir(PTD3);
vsluiter 0:7bc93f851767 23 float setpoint;
vsluiter 1:9d05c0236c7e 24 float pwm_to_motor;
vsluiter 1:9d05c0236c7e 25 //START OF CODE
vsluiter 1:9d05c0236c7e 26 pc.baud(230400);
vsluiter 0:7bc93f851767 27 Ticker looptimer;
vsluiter 0:7bc93f851767 28 looptimer.attach(setlooptimerflag,0.01);
vsluiter 1:9d05c0236c7e 29 pc.printf("bla");
vsluiter 1:9d05c0236c7e 30 //INFINITE LOOP
vsluiter 0:7bc93f851767 31 while(1) {
vsluiter 1:9d05c0236c7e 32 while(looptimerflag != true);
vsluiter 0:7bc93f851767 33 looptimerflag = false;
vsluiter 1:9d05c0236c7e 34 setpoint = (potmeter.read()-0.5)*2000;
vsluiter 0:7bc93f851767 35 pc.printf("s: %f, %d \n\r", setpoint, motor1.getPosition());
vsluiter 1:9d05c0236c7e 36 pwm_to_motor = (setpoint - motor1.getPosition())*.001;
vsluiter 1:9d05c0236c7e 37 keep_in_range(&pwm_to_motor, -1,1);
vsluiter 1:9d05c0236c7e 38 if(pwm_to_motor > 0)
vsluiter 2:3d39bce54dfe 39 motordir = 1;
vsluiter 0:7bc93f851767 40 else
vsluiter 2:3d39bce54dfe 41 motordir = 0;
vsluiter 1:9d05c0236c7e 42 //WRITE VALUE TO MOTOR
vsluiter 1:9d05c0236c7e 43 pwm_motor.write(abs(pwm_to_motor));
vsluiter 0:7bc93f851767 44 }
vsluiter 0:7bc93f851767 45 }
vsluiter 0:7bc93f851767 46
vsluiter 0:7bc93f851767 47
vsluiter 0:7bc93f851767 48 //coerces value 'in' to min or max when exceeding those values
vsluiter 0:7bc93f851767 49 //if you'd like to understand the statement below take a google for
vsluiter 0:7bc93f851767 50 //'ternary operators'.
vsluiter 1:9d05c0236c7e 51 void keep_in_range(float * in, float min, float max)
vsluiter 0:7bc93f851767 52 {
vsluiter 0:7bc93f851767 53 *in > min ? *in < max? : *in = max: *in = min;
vsluiter 0:7bc93f851767 54 }
vsluiter 0:7bc93f851767 55
vsluiter 0:7bc93f851767 56
vsluiter 0:7bc93f851767 57