code of robot bike

Dependencies:   SDFileSystem mbed

Fork of Robot_Bicycle by Chris LU

main.cpp

Committer:
YCTung
Date:
2016-06-21
Revision:
2:ec30613f2b2b
Parent:
1:709be64ca63c
Child:
3:197b748a397a

File content as of revision 2:ec30613f2b2b:

#include "mbed.h"

#include "RobotServo.h"
#include "SensorFusion.h"
#include "SPI_9dSensor.h"
#include "RobotBicycleConst.h"
/****************************
Wiring Map

CK3 PC_10 | PC_11   MI3||re  PC_9      | PC_8   rw
MO3 PC_12 | PD_2       ||   |-----------------|
    3.3V  | E5V        ||rs |PB_8  D15 | PC_6 |TX6
    BOOT0 | GND        ||ra |PB_9  D14 | PC_5 |
   |---------------|   ||   |AVDD      | U5V  |
   |NC    | NC     |   ||   |GND       | NC   |
   |NC    | IOREF  |   ||rk |PA_5  D13 | PA_12|RX6
   |PA_13 | NRST   |   ||   |PA_6  D12 | PA_11| rl
   |PA_14 | 3.3V   |   ||   |PA_7  D11 | PB_12|
   |PA_15 | 5.0V   |   ||rb |PB_6  D10 | NC   |
   |GND   | GND    |   ||   |PC_7  D9  | GND  |
   |PB_7  | GND    |   ||lb |PA_9  D8  | PB_2 |CSG
   |PC_13 | VIN    |   ||   |-----------------|
   |---------------|   ||   |-----------------|
    PC_14 | NC         ||ll |PA_8  D7  | PB_1 |CSX
   |---------------|   ||lk |PB_10 D6  | PB_15|MO2
   |PC_15 | PA_0 A0|   ||la |PB_4  D5  | PB_14|MI2
   |PH_0  | PA_1 A1|   ||ls |PB_5  D4  | PB_13|CK2
   |PH_1  | PA_4 A2|   ||le |PB_3  D3  | AGND |
   |VBAT  | PB_0 A3|   ||lw |PA_10 D2  | PC_4 |
   |PC_2  | PC_1 A4|   ||TX2|PA_2  D1  | NC   |
   |PC_3  | PC_0 A5|   ||RX2|PA_3  D0  | NC   |
   |---------------|   ||   |-----------------|
****************************/
AnalogIn analog_value(A5);//When using the ADC module, those pins connected to  AnalogIn can't be used to output.

Ticker timer1;
Ticker timer2;
Timeout timeout;

//Serial pc(D1, D0) declared in SPI_9dSensor.h
Serial BT(PC_6, PA_12);

SPI spi3(PC_12, PC_11, PC_10);

float meas, L_inver;
bool resetting = 0;

void timer1_interrupt(void);
void timer2_interrupt(void);
void reset_offset(void);
void attimeout(void);

int main() {
    setupServo();
    setup_spi();
    init_Sensors();
    BT.baud(115200);
    
    reset_offset();
    
    timer1.attach_us(&timer1_interrupt, 4000);//4.0ms interrupt period (250 Hz)
    timer2.attach_us(&timer2_interrupt, 4098);//4.098ms interrupt period (244 Hz)
    
    spi3.format(8, 3);
    pc.printf("System ready.\r\n");
    
//    pc.printf("\nAnalogIn example\r\n");
    
    while(1) {
//        pc.printf("measure: %f V,\t%f cm\r\n", meas, 1/L_inver);
//        wait(0.1); // 200 ms
    }
}

void timer1_interrupt(void)
{
    meas = analog_value.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
    meas = meas * 3.3f; // Change the value to be in the 0 to 3300 range
    L_inver = 0.0063f * meas - 0.005769f;
}

void timer2_interrupt(void)
{
    ;
}

void reset_offset(void)
{
    pc.printf("Reseting gyro and accel-X offset...\r\n");
    resetting = 1;
    timeout.attach(&attimeout, 2.0f);
    while(resetting)
    {
        reset_gyro_offset();
        reset_acceX_offset();
    }
    timeout.detach();
    pc.printf("Done reseting.\r\n");
//    pc.printf("%d\r\n", Acce_axis_zero[0]);
}

void attimeout(void)
{
    resetting = 0;
}