A very simple example:
[caption id="attachment_1508" align="aligncenter" width="287"] QT Bioloid Workshop[/caption]
The code uses two classes from the AXControl_v2 library:
- Configuration, it loads the parameters from the file HexaWheels.conf (currently in spanish):
Tiempo_Espera_ms=36 // wait time
Tiempo_Espera_Sensores_ms=60 // wait time for sensors
Nombre_Puerto_Serie=/dev/ttyUSB0 // serial port name
Baudios_Puerto_Serie=57600 // baud rate
- DynamixelCommunication, it offers the commands to control Dynamixel items
Connecting to the Dynamixel bus:
[sourcecode language="cpp"]
void MainWindow::on_B_Open_clicked()
{
pDynComm->open(); // open the connection using the parameters from the configuration file
setConnectionButtons(true); // enable and disable conveniently the buttons
}
[/sourcecode]
Getting and setting the AX12 Dynamixel position:
[sourcecode language="cpp"]
void MainWindow::on_B_AX12_1_GET_POS_clicked()
{
QString qStr;
int id=ui->SB_AX12_1_ID->text().toInt();
int position = pDynComm->readValue(id, MyCommunications::PresentPosition);
string str=std::to_string(position);
ui->E_AX12_1_POS->setText(qStr.fromStdString(str));
}
void MainWindow::on_B_AX12_1_SET_POS_clicked()
{
QString qStr=ui->SB_AX12_1_ID->text();
int id=Util::convertToInt(qStr.toStdString());
int position= ui->E_AX12_1_POS->text().toInt();
pDynComm->sendOrder(id, MyCommunications::GoalPosition,position);
}
[/sourcecode]
And this is the (unfinished) main window code:
[sourcecode language="cpp"]
#include
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "Configuration.h"
#include "DynamixelCommunication.h"
#include "Util.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
pConf=new Configuration ("/home/jose/proyectos_svn_win/trunk/bioloid/Comun/CPP/AXControl_v2/src/HexaWheels.conf");
pDynComm=new DynamixelCommunication (pConf);
}
MainWindow::~MainWindow()
{
delete ui;
pDynComm->close();
delete pDynComm;
delete pConf;
}
void MainWindow::setConnectionButtons(bool onOff)
{
ui->B_Open->setEnabled(!onOff);
ui->B_Beep->setEnabled(onOff);
ui->B_Close->setEnabled(onOff);
}
void MainWindow::on_B_Open_clicked()
{
//QString output="Open it";
//QMessageBox::information(this, "Output", output, QMessageBox::Ok);
//dynComm.open("/dev/ttyUSB0",57600);
pDynComm->open();
setConnectionButtons(true);
}
void MainWindow::on_B_Beep_clicked()
{
pDynComm->sendOrder(200, MyCommunications::BeepCM510, 5);
}
void MainWindow::on_B_Close_clicked()
{
pDynComm->close();
setConnectionButtons(false);
QString output="Port closed!";
QMessageBox::information(this, "Output", output, QMessageBox::Ok);
}
void MainWindow::on_B_AX12_1_GET_POS_clicked()
{
QString qStr;
int id=ui->SB_AX12_1_ID->text().toInt();
int position = pDynComm->readValue(id, MyCommunications::PresentPosition);
string str=std::to_string(position);
ui->E_AX12_1_POS->setText(qStr.fromStdString(str));
}
void MainWindow::on_B_AX12_1_SET_POS_clicked()
{
QString qStr=ui->SB_AX12_1_ID->text();
int id=Util::convertToInt(qStr.toStdString());
int position= ui->E_AX12_1_POS->text().toInt();
pDynComm->sendOrder(id, MyCommunications::GoalPosition,position);
}
[/sourcecode]
But it's "growing":
[caption id="attachment_1546" align="aligncenter" width="285"] QT_Workbench[/caption]
I have uploaded the source and binary of this work in progress to
https://www.box.com/s/mdsdeoem0gg4o2rapipj/s/mdsdeoem0gg4o2rapipj
No hay comentarios:
Publicar un comentario