Practical Robotics Modular Robot Library
robot.cpp
- Committer:
- jah128
- Date:
- 2016-11-26
- Revision:
- 2:bf34b86aa0f3
- Parent:
- 1:a6728adaf7e7
- Child:
- 3:8762f6b2ea8d
File content as of revision 2:bf34b86aa0f3:
#include "robot.h" Timer mbed_uptime; int timer_minute_count; Ticker timer_ticker; volatile char i2c_lock = 0; char debug_mode = DEBUG_MODE; char debug_output = DEBUG_OUTPUT_STREAM; Led led; Sensors sensors; Motors motors; Serial pc(USBTX,USBRX); I2C primary_i2c (p9, p10); Serial bt(p14,p13); DigitalOut case_led(p15); DigitalOut mbed_led1(LED1); DigitalOut mbed_led2(LED2); DigitalOut mbed_led3(LED3); DigitalOut mbed_led4(LED4); AnalogIn vin_battery(p17); // 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 serial interfaces setup_serial_interfaces(); debug("Practical Robotics Modular Robot\n"); //Setup the primary i2c bus to 400kHz baud rate primary_i2c.frequency(400000); //Send a reset signal to the LED driver debug("Resetting LED driver : "); if(led.reset_led_driver() != 0)debug("FAILED\n"); else debug("SUCCESS\n"); wait(0.05); //Send the initialisation signal to the LED driver debug("Initialising LED driver : "); if(led.init_led_driver() != 0)debug("FAILED\n"); else debug("SUCCESS\n"); wait(0.05); //Start the Sharp sensor ticker debug("Starting distance sensor ticker...\n"); sensors.start_sensor_ticker(); wait(0.05); //Setup the h-bridge drivers debug("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; } void Robot::debug(const char* format, ...) { char buffer[256]; if (debug_mode) { va_list vl; va_start(vl, format); vsprintf(buffer,format,vl); if(debug_output & 2) bt.printf("%s", buffer); if(debug_output & 1) pc.printf("%s", buffer); va_end(vl); } } void Robot::setup_serial_interfaces() { if(ENABLE_PC_SERIAL) { pc.baud(PC_BAUD); pc.attach(this,&Robot::_pc_rx_callback, Serial::RxIrq); } if(ENABLE_BLUETOOTH) { bt.baud(BLUETOOTH_BAUD); bt.attach(this,&Robot::_bt_rx_callback, Serial::RxIrq); } } // Private functions void Robot::_pc_rx_callback() { } void Robot::_bt_rx_callback() { } void Robot::_update_minutes() { mbed_uptime.reset(); timer_minute_count += 5; }