Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
robot.cpp
- Committer:
- jah128
- Date:
- 2016-11-26
- Revision:
- 1:a6728adaf7e7
- Parent:
- 0:8a2dd255c508
- Child:
- 2:bf34b86aa0f3
File content as of revision 1:a6728adaf7e7:
#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;
I2C primary_i2c (p9, p10);
AnalogIn vin_battery(p17);
Serial pc(USBTX,USBRX);
Serial bt(p14,p13);
// 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;
}