Practical Robotics Modular Robot Library

Dependents:   ModularRobot

robot.cpp

Committer:
jah128
Date:
2016-11-26
Revision:
0:8a2dd255c508
Child:
1:a6728adaf7e7

File content as of revision 0:8a2dd255c508:

#include "robot.h"

Timer mbed_uptime;
int timer_minute_count;
Ticker timer_ticker;
volatile char i2c_lock = 0;

Led led;
Sensors sensors;
Motors motors;
I2C primary_i2c (p9, p10);
AnalogIn vin_battery(p17);
Serial pc(USBTX,USBRX);


// Public functions

void Robot::init(){
    
    //Start the uptime timer
    timer_minute_count = 0;
    timer_ticker.attach(this,&Robot::_update_minutes, 300);  //Update minutes resets the uptime timer every 5 minutes to prevent stop overruns
    mbed_uptime.start();   
    
    //Setup the primary i2c bus to 400kHz baud rate
    primary_i2c.frequency(400000);

    //Send a reset signal to the LED driver
    pc.printf("Resetting LED driver    :  ");
    if(led.reset_led_driver() != 0)pc.printf("FAILED\n");
    else pc.printf("SUCCESS\n");
    wait(0.05);

    //Send the initialisation signal to the LED driver
    pc.printf("Initialising LED driver :  ");
    if(led.init_led_driver() != 0)pc.printf("FAILED\n");
    else pc.printf("SUCCESS\n");
    
    wait(0.05);

    //Start the Sharp sensor ticker
    pc.printf("Starting distance sensor ticker...\n");
    sensors.start_sensor_ticker();
    
    wait(0.05);
    
    //Setup the h-bridge drivers
    pc.printf("Starting the H-bridge drivers...\n");
    motors.init();
}

float Robot::get_uptime(void)
{
    return mbed_uptime.read() + (timer_minute_count * 60);
}

float Robot::get_battery_voltage(void)
{
    // Voltage is measured through a 7.5V zener diode followed by a 1:1 potential divider
    
    float measure_voltage = ZENER_VOLTAGE + (vin_battery.read() * BATTERY_PD_MULTIPLIER);
    return measure_voltage;
}

// Private functions

void Robot::_update_minutes()
{
    mbed_uptime.reset();
    timer_minute_count += 5;
}