Quadcopter control software

Dependencies:   Pulse USBDevice mbed

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?

UserRevisionLine numberNew 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 }