still working in progress

Dependencies:   mbed-STM32F103C8T6 mbed

Fork of STM32F103C8T6_Hello by Zoltan Hudak

main.cpp

Committer:
Zeran
Date:
2017-05-31
Revision:
11:69a364e391dc
Parent:
10:4b88be251088

File content as of revision 11:69a364e391dc:

#include "stm32f103c8t6.h"
#include "mbed.h"
I2C i2c(PB_9, PB_8);
const int address = 0x08 << 1;
Timer t;
int Now = 0 , LastUpdate = 0, deltat = 0;
int main()
{
    confSysClock();     //Configure system clock (72MHz HSE clock, 48MHz USB clock)

    Serial      pc(PA_2, PA_3);
    pc.baud(115200);
    //AnalogIn    nub1(PA_0);
    PwmOut      servo1(PA_6);
    PwmOut      servo2(PA_7);
    PwmOut      servo3(PB_0);
    PwmOut      servo4(PB_1);
    servo1.period_us(20000);
    servo2.period_us(20000);
    servo3.period_us(20000);
    servo4.period_us(20000);

    float pitchrig = 0.0164;//41*8/20000;
    float pitchlft = 0.0276;//69*8/20000;
    float pitchout = 0.0224;//56*8/20000;


    float rollrig = 0.014;//35
    float rolllft = 0.0308;//77
    float rollout = 0.0224;//56

    float Motr_up = 0.0448;//112
    float MotorA  = 0;
    float MotorB  = 0;

    float MotorAi = 0;
//    float MotorBi = 0;

    float diff = 0;

    servo1 = 0.05f + pitchout;
    servo2 = 0.05f + rollout;
    servo3 = 0.05f + MotorA;
    servo4 = 0.05f + MotorB;
    t.start();

    while(1) {
        char data[5];
        i2c.read(address,data,5);
        //pc.printf("%d,%d,%d,%d,%d\r\n", data[0], data[1], data[2], data[3], data[4]);
//        if (pc.readable()) {
//            char channel = pc.getc();
//            if (channel>128) {
//                char control = pc.getc();
//                if (channel == 129 && control<=128) {
                    Now = t.read_us();
                    deltat = Now - LastUpdate; // set integration time by time elapsed since last filter update
                    LastUpdate = Now;
                    
                    pitchout = float(data[0]*4)/20000;

                    if(pitchout>pitchlft) {
                        pitchout = pitchlft;
                    }
                    if(pitchout<pitchrig) {
                        pitchout = pitchrig;
                    }
                    if(deltat > 4000){
                        servo1 = 0.05f + pitchout;
                    }

//                }
//                if (channel == 130 && control<=128) {
                    rollout = float(data[1]*4)/20000;
                    //pc.printf("rollout = %f\n\r", rollout);
                    if(rollout>rolllft) {
                        rollout = rolllft;
                    }
                    if(rollout<rollrig) {
                        rollout = rollrig;
                    }
                    //servo2 = 0.05f + rollout;
                    //servo2 = 0.05f+float(control*8)/20000;

//                }
//                if (channel == 131 && control<=128) {
                    MotorAi = float(data[2]*4)/20000;
                    //pc.printf("MotorAi = %f\n\r", MotorAi);
                    diff = float((int16_t(data[3]/2)-64)*0.0004);
                    pc.printf("%f,%f,%f,%f\n\r", pitchout,rollout,MotorAi,diff);
                    MotorA = MotorAi+diff;
                    if(MotorA>Motr_up) {
                        MotorA = Motr_up;
                    }
                    if(MotorA<0) {
                        MotorA = 0;
                    }

                    MotorB = MotorAi - diff;
                    if(MotorB>Motr_up) {
                        MotorB = Motr_up;
                    }
                    if(MotorB<0) {
                        MotorB = 0;
                    }
                    //servo3 = 0.05f + MotorA;
                    //servo4 = 0.05f + MotorB;
                    //servo2 = 0.05f+float(control*8)/20000;

//                }
/*                if (channel == 132 && control<=128) {
                    diff = float((int16_t(control)-64)*0.0004);
                    //pc.printf("diff = %f\n\r", diff);
                    
                    MotorA = MotorAi+diff;
                    if(MotorA>Motr_up) {
                        MotorA = Motr_up;
                    }
                    if(MotorA<0) {
                        MotorA = 0;
                    }

                    MotorB = MotorAi-diff;
                    if(MotorB>Motr_up) {
                        MotorB = Motr_up;
                    }
                    if(MotorB<0) {
                        MotorB = 0;
                    }
                    servo3 = 0.05f + MotorA;
                    servo4 = 0.05f + MotorB;
                }
            }*/ 
            //servo = float(1000+(c*4))/20000;
        //}
    }
}