jim herd / MD03
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MD03.cpp Source File

MD03.cpp

00001 /*
00002  * MD03 : 24v 20A H-bridge motor driver in I2C bus
00003  */
00004 #include "mbed.h"
00005 #include "MD03.h"
00006  
00007 MD03::MD03(PinName sda, PinName scl, int i2cAddress)  : _i2c(sda, scl) {
00008     _writeOpcode = i2cAddress & 0xFE;
00009     _readOpcode  = i2cAddress | 0x01;
00010     
00011     _i2c.frequency(100000);
00012 }
00013  
00014 void MD03::set_speed(int speed) 
00015 {
00016 char data[2];
00017 
00018     data[0] = MD03_SPEED;
00019     data[1] = ((speed * 255)/100);
00020     _i2c.write(_writeOpcode, data, 2);
00021 }
00022 
00023 void MD03::set_accel(int acceleration) 
00024 {
00025 char data[2];
00026 
00027     data[0] = MD03_ACCELERATION;
00028     data[1] = 255 - ((acceleration * 255)/100);
00029     _i2c.write(_writeOpcode, data, 2);
00030 }
00031 
00032 void MD03::stop(void) 
00033 {
00034 char data[2];
00035 
00036     data[0] = MD03_COMMAND;
00037     data[1] = MD03_CMD_STOP;
00038     _i2c.write(_writeOpcode, data, 2);
00039 }
00040 
00041 void MD03::move_forward(void) 
00042 {
00043 char data[2];
00044 
00045     data[0] = MD03_COMMAND;
00046     data[1] = MD03_CMD_FORWARD;
00047     _i2c.write(_writeOpcode, data, 2);
00048 }
00049 
00050 void MD03::move_reverse(void) 
00051 {
00052 char data[2];
00053 
00054     data[0] = MD03_COMMAND;
00055     data[1] = MD03_CMD_REVERSE;
00056     _i2c.write(_writeOpcode, data, 2);
00057 }
00058 
00059 char MD03::read_reg(int reg) 
00060 {
00061 char data[2];
00062 
00063     data[0] = reg;
00064     _i2c.write(_writeOpcode, data, 1);
00065     _i2c.read(_readOpcode, data, 1);
00066     return data[0];
00067 }