publish

Dependencies:   mbed RPCInterface-4

main.cpp

Committer:
rcflyair
Date:
2020-09-14
Revision:
0:910585fe989f

File content as of revision 0:910585fe989f:

#include "mbed.h"
#include "SerialRPCInterface.h"
//#include "MODSERIAL.h"
#define DELAY 250

AnalogIn mtr_pos(PA_0);
PwmOut udp_pwm(PA_4);
PwmOut mp_pwm(PB_7);
PwmOut airspeed_pwm(PB_6);
PwmOut rpm_pwm(PA_8);
PwmOut ff_pwm(PA_1);

DigitalOut myled(LED1);
SerialRPCInterface rpc(PA_9, PA_10, 115200);       // create serial rpc interface on usb virtual com port

float mtr_pos_vout = 0.0f;
float udp_vout = 0.0f;
float mp_vout = 0.0f;
float airspeed_vout = 0.0f;
float ff_f = 0.0f;
float rpm_f = 0.0f;
float temp = 0.25f;
volatile char   c = '\0'; // Initialized to the NULL character

RPCVariable<float>  rpc_mtr_pos_vout(&mtr_pos_vout, "mtr_pos_vout");
RPCVariable<float>  rpc_udp_vout(&udp_vout, "udp_vout");
RPCVariable<float>  rpc_mp_vout(&mp_vout, "mp_vout");
RPCVariable<float>  rpc_airspeed_vout(&airspeed_vout, "airspeed_vout");
RPCVariable<float>  rpc_ff_f(&ff_f, "ff_f");
RPCVariable<float>  rpc_temp(&temp, "temp");

int pwm_v(float x)
{
    return (-4.6206 * x * x * x * x) + (64.395f * x * x * x) - (329.67f * x * x) + (877.84f * x) - 294.19f;
}

float pwm_ff(float x)
{
    return 1/x;
}

int main() {

    udp_pwm.period_us(1000);
    udp_pwm.pulsewidth_us(666);

    mp_pwm.period_us(1000);
    mp_pwm.pulsewidth_us(600);

    airspeed_pwm.period_us(1000);
    airspeed_pwm.pulsewidth_us(500);
    
    ff_f = 300.0f;
    ff_pwm.period(1/ff_f);
    ff_pwm.pulsewidth_us((1/ff_f)/2);

    rpm_f = 400.0f;
    rpm_pwm.period(1/rpm_f);
    rpm_pwm.pulsewidth((1/rpm_f)/2);
    
    //rpc.Disable();

    while(1) {

        myled = !myled; // pulse LED
        
        mtr_pos_vout = mtr_pos.read();
        
        udp_pwm.pulsewidth_us(pwm_v(udp_vout));
        mp_pwm.pulsewidth_us(pwm_v(mp_vout));
        airspeed_pwm.pulsewidth_us(pwm_v(airspeed_vout));

        rpm_pwm.period(1/rpm_f);
        rpm_pwm.pulsewidth((1/rpm_f)/2);
        ff_pwm.period(1/ff_f);
        ff_pwm.pulsewidth((1/ff_f)/2);

        //rpc.Enable();
        wait_ms(DELAY);
        //rpc.Disable();
    }
}