![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Quadcopter working with accelerômeter and accelerometer, and bluetooth radio for communication
Hardware/Motor.cpp@0:56b8c86181b1, 2013-05-21 (annotated)
- Committer:
- jose_claudiojr
- Date:
- Tue May 21 14:12:13 2013 +0000
- Revision:
- 0:56b8c86181b1
Quadcopter code with accelerometer and gyroscope.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jose_claudiojr | 0:56b8c86181b1 | 1 | #include "Motor.h" |
jose_claudiojr | 0:56b8c86181b1 | 2 | |
jose_claudiojr | 0:56b8c86181b1 | 3 | Motor::Motor(PinName pwm, float _period/*, float* linCoef, float lowerSat, float upperSat*/) : PwmOut(pwm) |
jose_claudiojr | 0:56b8c86181b1 | 4 | { |
jose_claudiojr | 0:56b8c86181b1 | 5 | //period(_period); |
jose_claudiojr | 0:56b8c86181b1 | 6 | period_us(_period); |
jose_claudiojr | 0:56b8c86181b1 | 7 | |
jose_claudiojr | 0:56b8c86181b1 | 8 | currentPower = 0; |
jose_claudiojr | 0:56b8c86181b1 | 9 | |
jose_claudiojr | 0:56b8c86181b1 | 10 | //setPower(currentPower); |
jose_claudiojr | 0:56b8c86181b1 | 11 | |
jose_claudiojr | 0:56b8c86181b1 | 12 | //this->linCoef = linCoef; |
jose_claudiojr | 0:56b8c86181b1 | 13 | |
jose_claudiojr | 0:56b8c86181b1 | 14 | //this->lowerSat = lowerSat; |
jose_claudiojr | 0:56b8c86181b1 | 15 | //this->upperSat = upperSat; |
jose_claudiojr | 0:56b8c86181b1 | 16 | } |
jose_claudiojr | 0:56b8c86181b1 | 17 | |
jose_claudiojr | 0:56b8c86181b1 | 18 | /*Motor::Motor(PinName pwm, float periodms) : PwmOut(pwm) |
jose_claudiojr | 0:56b8c86181b1 | 19 | { |
jose_claudiojr | 0:56b8c86181b1 | 20 | //Motor(pwm, (periodms*1000), new float[1], 0, 100); |
jose_claudiojr | 0:56b8c86181b1 | 21 | period_ms(periodms); |
jose_claudiojr | 0:56b8c86181b1 | 22 | |
jose_claudiojr | 0:56b8c86181b1 | 23 | //currentPower = 0; |
jose_claudiojr | 0:56b8c86181b1 | 24 | |
jose_claudiojr | 0:56b8c86181b1 | 25 | //this->linCoef = new float[1]; |
jose_claudiojr | 0:56b8c86181b1 | 26 | |
jose_claudiojr | 0:56b8c86181b1 | 27 | //this->lowerSat = 0; |
jose_claudiojr | 0:56b8c86181b1 | 28 | //this->upperSat = 100; |
jose_claudiojr | 0:56b8c86181b1 | 29 | }*/ |
jose_claudiojr | 0:56b8c86181b1 | 30 | |
jose_claudiojr | 0:56b8c86181b1 | 31 | void Motor::setPower(float power) |
jose_claudiojr | 0:56b8c86181b1 | 32 | { |
jose_claudiojr | 0:56b8c86181b1 | 33 | power = clampFloat(power, 0.0, 100.0); |
jose_claudiojr | 0:56b8c86181b1 | 34 | |
jose_claudiojr | 0:56b8c86181b1 | 35 | //pulsewidth(PWM_MIN + (power / 100.0) * PWM_DT); |
jose_claudiojr | 0:56b8c86181b1 | 36 | write( (100-(PWM_MIN + power))/100); |
jose_claudiojr | 0:56b8c86181b1 | 37 | currentPower = power; |
jose_claudiojr | 0:56b8c86181b1 | 38 | } |
jose_claudiojr | 0:56b8c86181b1 | 39 | |
jose_claudiojr | 0:56b8c86181b1 | 40 | void Motor::setPowerLin(float power) |
jose_claudiojr | 0:56b8c86181b1 | 41 | { |
jose_claudiojr | 0:56b8c86181b1 | 42 | setPower(power); |
jose_claudiojr | 0:56b8c86181b1 | 43 | /* |
jose_claudiojr | 0:56b8c86181b1 | 44 | float pwm = 0; |
jose_claudiojr | 0:56b8c86181b1 | 45 | |
jose_claudiojr | 0:56b8c86181b1 | 46 | power = clampFloat(power, 0.0, 100.0); |
jose_claudiojr | 0:56b8c86181b1 | 47 | |
jose_claudiojr | 0:56b8c86181b1 | 48 | for (int i = 0; i < 5; i++) |
jose_claudiojr | 0:56b8c86181b1 | 49 | { |
jose_claudiojr | 0:56b8c86181b1 | 50 | pwm += linCoef[4-i] * pow(power/100.0, i); |
jose_claudiojr | 0:56b8c86181b1 | 51 | } |
jose_claudiojr | 0:56b8c86181b1 | 52 | |
jose_claudiojr | 0:56b8c86181b1 | 53 | setPower(lowerSat + pwm*(upperSat - lowerSat)); |
jose_claudiojr | 0:56b8c86181b1 | 54 | */ |
jose_claudiojr | 0:56b8c86181b1 | 55 | } |
jose_claudiojr | 0:56b8c86181b1 | 56 | void Motor::arm(int pwm_ms) |
jose_claudiojr | 0:56b8c86181b1 | 57 | { |
jose_claudiojr | 0:56b8c86181b1 | 58 | pulsewidth_ms(pwm_ms); |
jose_claudiojr | 0:56b8c86181b1 | 59 | //write( (power)/100 ); |
jose_claudiojr | 0:56b8c86181b1 | 60 | } |
jose_claudiojr | 0:56b8c86181b1 | 61 | void Motor::accumulatePower(float accPower) |
jose_claudiojr | 0:56b8c86181b1 | 62 | { |
jose_claudiojr | 0:56b8c86181b1 | 63 | setPower(currentPower + accPower); |
jose_claudiojr | 0:56b8c86181b1 | 64 | } |
jose_claudiojr | 0:56b8c86181b1 | 65 | |
jose_claudiojr | 0:56b8c86181b1 | 66 | float Motor::getPower() |
jose_claudiojr | 0:56b8c86181b1 | 67 | { |
jose_claudiojr | 0:56b8c86181b1 | 68 | return currentPower; |
jose_claudiojr | 0:56b8c86181b1 | 69 | } |