1 Star 0 Fork 0

DFRobot/DFRobotVeyronBrushed

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
DFRobotVeyronBrushed.cpp 12.77 KB
一键复制 编辑 原始数据 按行查看 历史
jimaobian 提交于 2014-09-30 14:50 +08:00 . comment implement
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
/***************************************************
Veyron Brushed motor controller
<http://www.dfrobot.com/index.php?route=product/product&path=48&product_id=912#.UniMMJH7k8M>
***************************************************
This is the library for Veyron Brushed motor controller.
See the example for details.
Created 2014-8-28
By Angelo qiao <Angelo.qiao@dfrobot.com>
Modified 2014-8-29
By Angelo qiao Angelo.qiao@dfrobot.com>
Modified 2014-9-30
By Angelo qiao Angelo.qiao@dfrobot.com>
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<>
2.This code is tested on Arduino Leonardo, Mega boards.
If you have to use the UNO, please set a 1K pull-down resister on RX pin (D0 pin) of the Uno.
****************************************************/
#include "DFRobotVeyronBrushed.h"
#include <pgmspace.h>
DFRobotVeyronBrushed::DFRobotVeyronBrushed()
{
_timeOutDuration=DEFAULT_TIME_OUT_DURATION;
}
void DFRobotVeyronBrushed::begin(Stream& theSerial)
{
_serial = &theSerial;
}
void DFRobotVeyronBrushed::setTimeOut(unsigned long theTimeOutDuration)
{
_timeOutDuration=theTimeOutDuration;
}
char* DFRobotVeyronBrushed::parseFrame()
{
uint8_t receivedBufferIndex=0;
_timeOutTimer=millis();
while (1) {
if (_serial->available()) {
_receivedBuffer[receivedBufferIndex]= _serial->read();
if (_receivedBuffer[receivedBufferIndex]=='\n') {
_receivedBuffer[receivedBufferIndex+1] = 0;
break;
}
receivedBufferIndex++;
if (receivedBufferIndex==(RECEIVED_BUFFER_SIZE-1)) {
strcpy_P(_receivedBuffer, PSTR("Buffer Full!\r\n"));
break;
}
_timeOutTimer=millis();
}
else{
if (millis()-_timeOutTimer>=_timeOutDuration) {
strcpy_P(_receivedBuffer, PSTR("Time Out!\r\n"));
break;
}
}
}
return _receivedBuffer;
}
char* DFRobotVeyronBrushed::readType(uint8_t id)
{
while(Serial.read() != -1);
_serial->println();
_serial->print(id);
_serial->print(F(",PING"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::readConfig(uint8_t id, Stream& theSerial)
{
_serial->println();
_serial->print(id);
_serial->print(F(",RCONFIG"));
_serial->println();
_timeOutTimer=millis();
while (1) {
if (_serial->available()) {
theSerial.write(_serial->read());
if (!_serial->available()) {
_timeOutTimer=millis();
}
}
else{
if (millis()-_timeOutTimer> _timeOutDuration) {
theSerial.println(F("Read Config Finished\r\n"));
break;
}
}
}
}
void DFRobotVeyronBrushed::factoryReset(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",FCONFIG"));
_serial->println();
}
void DFRobotVeyronBrushed::readHelp(uint8_t id, Stream& theSerial)
{
_serial->println();
_serial->print(id);
_serial->print(F(",HELP"));
_serial->println();
_timeOutTimer=millis();
while (1) {
if (_serial->available()) {
theSerial.write(_serial->read());
if (!_serial->available()) {
_timeOutTimer=millis();
}
}
else{
if (millis()-_timeOutTimer> _timeOutDuration) {
theSerial.println(F("Read Help Finished\r\n"));
break;
}
}
}
}
void DFRobotVeyronBrushed::storeConfig(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",EEPSAV"));
_serial->println();
}
void DFRobotVeyronBrushed::setBaudrate(uint8_t id, unsigned long theBaudrate)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SBR,"));
_serial->print(theBaudrate);
_serial->println();
}
void DFRobotVeyronBrushed::setNewId(uint8_t theNewId)
{
_serial->println();
_serial->print(BROADCAST_ID);
_serial->print(F(",SNA,"));
_serial->print(theNewId);
_serial->println();
}
char* DFRobotVeyronBrushed::readEncoderPulses(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GEP,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::clearEncoderPulses(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",CEP,"));
_serial->print(theMotorNumber);
_serial->println();
}
void DFRobotVeyronBrushed::setEncoderPulsePerRevolution(uint8_t id, int theEncoderPulsePerRevolutionM1, int theEncoderPulsePerRevolutionM2)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SER,"));
_serial->print(theEncoderPulsePerRevolutionM1);
_serial->print(',');
_serial->print(theEncoderPulsePerRevolutionM2);
_serial->println();
}
void DFRobotVeyronBrushed::setGearRatio(uint8_t id, float theGearRatioM1, float theGearRatioM2)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SGR,"));
_serial->print(theGearRatioM1);
_serial->print(',');
_serial->print(theGearRatioM2);
_serial->println();
}
void DFRobotVeyronBrushed::setDirectionMode(uint8_t id, uint8_t theDirectionMode)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SDIR,"));
_serial->print(theDirectionMode);
_serial->println();
}
void DFRobotVeyronBrushed::setHBridgeMode(uint8_t id, uint8_t theHBridgeMode)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SPWM,"));
_serial->print(theHBridgeMode);
_serial->println();
}
void DFRobotVeyronBrushed::setSlowStartMode(uint8_t id, boolean theSlowStartMode)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SSD,"));
_serial->print(theSlowStartMode);
_serial->println();
}
char* DFRobotVeyronBrushed::readSpeed(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GVC,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readMaxSpeed(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GVM,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setSpeed(uint8_t id, uint8_t theMotorNumber, int theSpeed)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SVS,"));
_serial->print(theMotorNumber);
_serial->print(',');
_serial->print(theSpeed);
_serial->println();
}
void DFRobotVeyronBrushed::setConditionalSpeed(uint8_t id, uint8_t theMotorNumber, int theConditionalSpeed)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SVR,"));
_serial->print(theMotorNumber);
_serial->print(',');
_serial->print(theConditionalSpeed);
_serial->println();
}
void DFRobotVeyronBrushed::startConditionalSpeed(uint8_t id, boolean isStartConditionalSpeedM1, boolean isStartConditionalSpeedM2)
{
_serial->println();
_serial->print(id);
_serial->print(F(",AVR,"));
_serial->print(isStartConditionalSpeedM1);
_serial->print(',');
_serial->print(isStartConditionalSpeedM2);
_serial->println();
}
char* DFRobotVeyronBrushed::readAcceleration(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GACC,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readDeacceleration(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GDEC,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setAcceleration(uint8_t id, uint8_t theMotorNumber, int theAcceleration, int theDeacceleration)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SAD,"));
_serial->print(theMotorNumber);
_serial->print(',');
_serial->print(theAcceleration);
_serial->print(',');
_serial->print(theDeacceleration);
_serial->println();
}
char* DFRobotVeyronBrushed::readMaxPPM(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GPA"));
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readMinPPM(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GPI"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setPPMRange(uint8_t id, int theMinPPM, int theMaxPPM)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SPPM,"));
_serial->print(theMinPPM);
_serial->print(',');
_serial->print(theMaxPPM);
_serial->println();
}
char* DFRobotVeyronBrushed::readCyclicalSignalMode(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GSM"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setCyclicalSignalMode(uint8_t id, boolean isCyclicalSignalMode)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SSM,"));
_serial->print(isCyclicalSignalMode);
_serial->println();
}
void DFRobotVeyronBrushed::setCyclicalSignalModeTimeOut(uint8_t id, int theCyclicalSignalModeTimeOut)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SDCT,"));
_serial->print(theCyclicalSignalModeTimeOut/10);
_serial->println();
}
char* DFRobotVeyronBrushed::readKp(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GKP,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readTi(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GTI,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readTd(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GTD,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setPID(uint8_t id, uint8_t theMotorNumber, float theKp, float theTi, float theTd)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SPID,"));
_serial->print(theMotorNumber);
_serial->print(',');
_serial->print(theKp);
_serial->print(',');
_serial->print(theTi);
_serial->print(',');
_serial->print(theTd);
_serial->println();
}
char* DFRobotVeyronBrushed::readMaxContinuousCurrent(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GMCC"));
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readMaxPeakyCurrent(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GMPC"));
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readCurrent(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GCC,"));
_serial->print(theMotorNumber);
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setMaxCurrent(uint8_t id, unsigned long theMaxContinuousCurrent, unsigned long theMaxPeakyCurrent)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SMLC,"));
_serial->print(theMaxContinuousCurrent);
_serial->print(',');
_serial->print(theMaxPeakyCurrent);
_serial->println();
}
char* DFRobotVeyronBrushed::readMaxTemperature(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GMT"));
_serial->println();
return parseFrame();
}
char* DFRobotVeyronBrushed::readTemperature(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GCT"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setMaxTemperature(uint8_t id, int theMaxTemperature)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SMT,"));
_serial->print(theMaxTemperature);
_serial->println();
}
char* DFRobotVeyronBrushed::readVoltage(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GSV"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::setVoltageRange(uint8_t id, float theMinVoltage, float theMaxVoltage)
{
_serial->println();
_serial->print(id);
_serial->print(F(",SLV,"));
_serial->print(theMinVoltage);
_serial->print(',');
_serial->print(theMaxVoltage);
_serial->println();
}
char* DFRobotVeyronBrushed::readError(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",GER"));
_serial->println();
return parseFrame();
}
void DFRobotVeyronBrushed::clearError(uint8_t id)
{
_serial->println();
_serial->print(id);
_serial->print(F(",CER"));
_serial->println();
}
void DFRobotVeyronBrushed::startSpeedMonitor(uint8_t id, uint8_t theMotorNumber)
{
_serial->println();
_serial->print(id);
_serial->print(F(",OUT,"));
_serial->print(theMotorNumber);
_serial->println();
}
void DFRobotVeyronBrushed::endSpeedMonitor()
{
_serial->println();
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/dfrobot/DFRobotVeyronBrushed.git
git@gitee.com:dfrobot/DFRobotVeyronBrushed.git
dfrobot
DFRobotVeyronBrushed
DFRobotVeyronBrushed
master

搜索帮助