Quadcopter control software
Dependencies: Pulse USBDevice mbed
main.cpp@1:447dfa0477e9, 2016-06-15 (annotated)
- Committer:
- DanO21050
- Date:
- Wed Jun 15 16:19:33 2016 +0000
- Revision:
- 1:447dfa0477e9
- Parent:
- 0:28d8de532ed1
1 motor working, serial to pc working, I2C not working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DanO21050 | 0:28d8de532ed1 | 1 | #include "mbed.h" |
DanO21050 | 0:28d8de532ed1 | 2 | #include "Pulse.h" |
DanO21050 | 0:28d8de532ed1 | 3 | #include "USBSerial.h" |
DanO21050 | 0:28d8de532ed1 | 4 | //#include "Servo.h" |
DanO21050 | 0:28d8de532ed1 | 5 | |
DanO21050 | 1:447dfa0477e9 | 6 | #define Motor1_Pin PTA12 //D3 PWM port |
DanO21050 | 1:447dfa0477e9 | 7 | #define AnalogIn_Pin PTD1 //A0 Port |
DanO21050 | 0:28d8de532ed1 | 8 | |
DanO21050 | 1:447dfa0477e9 | 9 | #define I2C_SDA_Pin PTB3 |
DanO21050 | 1:447dfa0477e9 | 10 | #define I2C_SCL_Pin PTB2 |
DanO21050 | 1:447dfa0477e9 | 11 | #define accelerometerAddress 0x6B |
DanO21050 | 1:447dfa0477e9 | 12 | |
DanO21050 | 1:447dfa0477e9 | 13 | |
DanO21050 | 1:447dfa0477e9 | 14 | |
DanO21050 | 0:28d8de532ed1 | 15 | DigitalOut Motor1(Motor1_Pin); |
DanO21050 | 0:28d8de532ed1 | 16 | AnalogIn MotorPowerLevel(AnalogIn_Pin); |
DanO21050 | 0:28d8de532ed1 | 17 | |
DanO21050 | 1:447dfa0477e9 | 18 | |
DanO21050 | 1:447dfa0477e9 | 19 | USBSerial serial; //Virtual serial port over USB |
DanO21050 | 1:447dfa0477e9 | 20 | |
DanO21050 | 1:447dfa0477e9 | 21 | I2C i2c(I2C_SDA_Pin,I2C_SCL_Pin); |
DanO21050 | 0:28d8de532ed1 | 22 | |
DanO21050 | 0:28d8de532ed1 | 23 | Ticker ticker1; |
DanO21050 | 0:28d8de532ed1 | 24 | |
DanO21050 | 0:28d8de532ed1 | 25 | int motor1Status = 0; |
DanO21050 | 0:28d8de532ed1 | 26 | |
DanO21050 | 0:28d8de532ed1 | 27 | int frequency = 250; |
DanO21050 | 0:28d8de532ed1 | 28 | float period = 1.0/frequency; |
DanO21050 | 0:28d8de532ed1 | 29 | |
DanO21050 | 0:28d8de532ed1 | 30 | |
DanO21050 | 0:28d8de532ed1 | 31 | float currentPowerLevel = 0; |
DanO21050 | 0:28d8de532ed1 | 32 | |
DanO21050 | 0:28d8de532ed1 | 33 | void motor1Pulse(){ |
DanO21050 | 0:28d8de532ed1 | 34 | ticker1.detach(); |
DanO21050 | 0:28d8de532ed1 | 35 | if(motor1Status == 0){ |
DanO21050 | 0:28d8de532ed1 | 36 | Motor1.write(1); |
DanO21050 | 0:28d8de532ed1 | 37 | motor1Status = 1; |
DanO21050 | 0:28d8de532ed1 | 38 | ticker1.attach(&motor1Pulse, (currentPowerLevel+1.0)/1000.0); |
DanO21050 | 0:28d8de532ed1 | 39 | } |
DanO21050 | 0:28d8de532ed1 | 40 | else{ |
DanO21050 | 0:28d8de532ed1 | 41 | Motor1.write(0); |
DanO21050 | 0:28d8de532ed1 | 42 | motor1Status = 0; |
DanO21050 | 0:28d8de532ed1 | 43 | ticker1.attach(&motor1Pulse, period-(currentPowerLevel+1.0)/1000.0); |
DanO21050 | 0:28d8de532ed1 | 44 | } |
DanO21050 | 0:28d8de532ed1 | 45 | |
DanO21050 | 0:28d8de532ed1 | 46 | } |
DanO21050 | 0:28d8de532ed1 | 47 | /*void motor1Pulse(){ |
DanO21050 | 0:28d8de532ed1 | 48 | ticker1.detach(); |
DanO21050 | 0:28d8de532ed1 | 49 | Motor1.write(0); |
DanO21050 | 0:28d8de532ed1 | 50 | ticker1.attach(&motor1OnPulse, currentPowerLevel/1000.0); |
DanO21050 | 0:28d8de532ed1 | 51 | }*/ |
DanO21050 | 0:28d8de532ed1 | 52 | |
DanO21050 | 0:28d8de532ed1 | 53 | |
DanO21050 | 0:28d8de532ed1 | 54 | int main() |
DanO21050 | 0:28d8de532ed1 | 55 | { |
DanO21050 | 0:28d8de532ed1 | 56 | //PWM_Motor1.period(.004); //set motor PWM frequency to 250 Hz |
DanO21050 | 0:28d8de532ed1 | 57 | //PWM_Motor1.period(.01); //set motor PWM frequency to 100 Hz |
DanO21050 | 0:28d8de532ed1 | 58 | //PWM_Motor1 = .5; //any value from 0 to 1 |
DanO21050 | 0:28d8de532ed1 | 59 | //PWM_Motor1.pulsewidth_ms(2.0); |
DanO21050 | 0:28d8de532ed1 | 60 | //wait(4); |
DanO21050 | 0:28d8de532ed1 | 61 | //PWM_Motor1.pulsewidth_ms(1.0); |
DanO21050 | 0:28d8de532ed1 | 62 | |
DanO21050 | 0:28d8de532ed1 | 63 | motor1Status = 1; |
DanO21050 | 0:28d8de532ed1 | 64 | ticker1.attach(&motor1Pulse, (currentPowerLevel+1.0)/1000.0); |
DanO21050 | 0:28d8de532ed1 | 65 | |
DanO21050 | 0:28d8de532ed1 | 66 | |
DanO21050 | 0:28d8de532ed1 | 67 | while(1){ |
DanO21050 | 0:28d8de532ed1 | 68 | currentPowerLevel = MotorPowerLevel.read(); |
DanO21050 | 0:28d8de532ed1 | 69 | |
DanO21050 | 1:447dfa0477e9 | 70 | i2c.read |
DanO21050 | 0:28d8de532ed1 | 71 | serial.printf("I am a virtual serial port\r\n"); |
DanO21050 | 0:28d8de532ed1 | 72 | wait(1); |
DanO21050 | 0:28d8de532ed1 | 73 | //PWM_Motor1.pulsewidth(((1.0+currentPowerLevel)/1000.0)); |
DanO21050 | 0:28d8de532ed1 | 74 | |
DanO21050 | 0:28d8de532ed1 | 75 | } |
DanO21050 | 0:28d8de532ed1 | 76 | } |