Successful acro and level mode now! Relying on MPU9250 as base sensor. I'm working continuously on tuning and features :) NEWEST VERSION ON: https://github.com/MaEtUgR/FlyBed (CODE 100% compatible/copyable)

Dependencies:   mbed

Committer:
maetugr
Date:
Thu Nov 19 18:47:27 2015 +0000
Revision:
8:609a2ad4c30e
Parent:
0:37f0c1e8fa66
made I2C-Sensors working in parallel, added rolling buffer for PID derivative, played with the PID and frequency parameters in main

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 0:37f0c1e8fa66 1 #include "Servo.h"
maetugr 0:37f0c1e8fa66 2 #include "mbed.h"
maetugr 0:37f0c1e8fa66 3
maetugr 0:37f0c1e8fa66 4 Servo::Servo(PinName Pin, int frequency) : ServoPin(Pin) {
maetugr 0:37f0c1e8fa66 5 Enable(1000,1000000/frequency); // low throttle 50Hz TODO: Frequency modify
maetugr 0:37f0c1e8fa66 6 }
maetugr 0:37f0c1e8fa66 7
maetugr 0:37f0c1e8fa66 8 void Servo::SetFrequency(int frequency) {
maetugr 0:37f0c1e8fa66 9 Pulse.detach();
maetugr 0:37f0c1e8fa66 10 Pulse.attach_us(this, &Servo::StartPulse, 1/frequency);
maetugr 0:37f0c1e8fa66 11 }
maetugr 0:37f0c1e8fa66 12
maetugr 0:37f0c1e8fa66 13 void Servo::SetPosition(int Pos) {
maetugr 0:37f0c1e8fa66 14 if (Pos > 1000)
maetugr 0:37f0c1e8fa66 15 Pos = 1000;
maetugr 0:37f0c1e8fa66 16 if (Pos < 0)
maetugr 0:37f0c1e8fa66 17 Pos = 0;
maetugr 0:37f0c1e8fa66 18 Position = Pos+1000;
maetugr 0:37f0c1e8fa66 19 }
maetugr 0:37f0c1e8fa66 20
maetugr 0:37f0c1e8fa66 21 void Servo::StartPulse() {
maetugr 0:37f0c1e8fa66 22 ServoPin = 1;
maetugr 0:37f0c1e8fa66 23 PulseStop.attach_us(this, &Servo::EndPulse, Position);
maetugr 0:37f0c1e8fa66 24 }
maetugr 0:37f0c1e8fa66 25
maetugr 0:37f0c1e8fa66 26 void Servo::EndPulse() {
maetugr 0:37f0c1e8fa66 27 // my change
maetugr 0:37f0c1e8fa66 28 PulseStop.detach();
maetugr 0:37f0c1e8fa66 29 // my change
maetugr 0:37f0c1e8fa66 30 ServoPin = 0;
maetugr 0:37f0c1e8fa66 31 }
maetugr 0:37f0c1e8fa66 32
maetugr 0:37f0c1e8fa66 33 void Servo::Enable(int StartPos, int Period) {
maetugr 0:37f0c1e8fa66 34 Position = StartPos;
maetugr 0:37f0c1e8fa66 35 Pulse.attach_us(this, &Servo::StartPulse, Period);
maetugr 0:37f0c1e8fa66 36 }
maetugr 0:37f0c1e8fa66 37
maetugr 0:37f0c1e8fa66 38 void Servo::Disable() {
maetugr 0:37f0c1e8fa66 39 Pulse.detach();
maetugr 0:37f0c1e8fa66 40 }
maetugr 0:37f0c1e8fa66 41
maetugr 0:37f0c1e8fa66 42 void Servo::operator=(int position) {
maetugr 0:37f0c1e8fa66 43 SetPosition(position);
maetugr 0:37f0c1e8fa66 44 }