Codigo do aldebaran com headers e dip switch

aldebaran_rc.cpp

Committer:
pedro_velozo
Date:
2021-03-19
Revision:
0:2228de67a3ef

File content as of revision 0:2228de67a3ef:

#include "aldebaran_rc.h"
#include "mbed.h"
#define OFFSET 2

Serial bt(p9, p10);

Timer timer;

DigitalOut st_led(LED1);
DigitalOut th_led(LED2);
DigitalOut mid_led(LED3);

InterruptIn ST(p15);
InterruptIn TH(p14);

PwmOut Right(p21);
PwmOut Left(p22);

int max_st = 1500, max_th = 1500, min_st = 1500, min_th = 1500, mid_st, mid_th;

int RC_value[2];
int RC_start[2];

void ST_High() { RC_start[0] = timer.read_us(); } //start the time }
void ST_Low() { RC_value[0] = timer.read_us() - RC_start[0]; }

void TH_High() { RC_start[1] = timer.read_us(); } //start the time }
void TH_Low() { RC_value[1] = timer.read_us() - RC_start[1]; }

void RC_mode()
{
    int st_start, th_start;

    timer.start();

    ST.fall(&ST_Low);
    ST.rise(&ST_High);

    TH.fall(&TH_Low);
    TH.rise(&TH_High);

    Right.period(0.02);
    Left.period(0.02);

    bt.baud(9600);

    st_led = 1;
    wait(0.5);
    st_led = 0;

    st_start = timer.read_us();
    while (timer.read_us() - st_start < 5000000)
    {
        if (RC_value[0] > max_st)
        {
            max_st = RC_value[0];
        }
        if (RC_value[0] < min_st)
        {
            min_st = RC_value[0];
        }
    }
    st_led = 1;
    wait(1);
    th_led = 1;
    wait(0.5);
    th_led = 0;
    th_start = timer.read_us();
    while (timer.read_us() - th_start < 5000000)
    {
        if (RC_value[1] > max_th)
        {
            max_th = RC_value[1];
        }
        if (RC_value[1] < min_th)
        {
            min_th = RC_value[1];
        }
    }
    th_led = 1;

    mid_led = 1;
    wait(5);
    mid_led = 0;
    mid_st = RC_value[0];
    mid_th = RC_value[1];
    wait(1);
    mid_led = 1;

    bt.printf("Max-ST: %i Min-ST: %i Max-TH: %i Min-TH: %i\n\r", max_st, min_st, max_th, min_th);

    wait(5);
    while (1)
    {
        bt.printf("Left: %i  Right: %i\n\r", RC_value[1], RC_value[0]);

        Right.pulsewidth_us(mid_st + (mid_st - RC_value[1]) + (mid_th - RC_value[0]));
        Left.pulsewidth_us(mid_st + (mid_st - RC_value[1]) - (mid_th - RC_value[0]) - OFFSET);
    }
}