16,216
社区成员
发帖
与我相关
我的任务
分享
QByteArray command;
command.append(0x84);
command.append(0x02);
command.append(target & 0x7F);
command.append((target >> 7) & 0x7F);
myCom-> QSerialPort::write(command);
但是貌似串口发出的数据还是不对,target必须是十六进制的对吗?
有什么方法看串口到底写了什么数据吗? 在ubuntu下[/quote]
是的,可将target 转成或者定义为char;
不太熟悉Ubuntu的串口监控,可以使用minicom;或者硬件连线后直接接到windows上查看则较为方便。
QByteArray command;
command.append(0x84);
command.append(0x02);
command.append(target & 0x7F);
command.append((target >> 7) & 0x7F);
myCom-> QSerialPort::write(command);
但是貌似串口发出的数据还是不对,target必须是十六进制的对吗?
有什么方法看串口到底写了什么数据吗? 在ubuntu下
QByteArray res;
res.append(0x01);
res.append(0x02);
res.append(0x03);
res.append(0x04);
serial.write(res);
//servocontroller.h
#ifndef SERVOCONTROLLER_H
#define SERVOCONTROLLER_H
#include <string>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
class ServoController
{
public:
// Create a concrete platform-specific SerialInterface.
// Return NULL if the interface couldn't be created and set the optional error message.
void createSerialPort(const QString &portName, unsigned int baudRate);
virtual ~ServoController(); // Destructor
// Set the target position of a channel to a given value in 0.25 microsecond units
void setTarget( unsigned char channelNumber, unsigned short target );
private:
static const unsigned short mMinChannelValue = 3968;
static const unsigned short mMaxChannelValue = 8000;
//QByteArray byte;
char command[4];
//QString byte;
QSerialPort* myCom;
};
#endif // SERVOCONTROLLER_H
//servocontroller.cpp
#include "servocontroller.h"
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
void ServoController::createSerialPort( const QString &portName, unsigned int baudRate){
myCom= new QSerialPort();
myCom->setPortName(portName);
myCom->open(QIODevice::ReadWrite);
myCom->setBaudRate(baudRate);
myCom->setDataBits(QSerialPort::Data8);
myCom->setParity(QSerialPort::NoParity);
//myCom->setStopBits(QSerialPort::OneStop);
myCom->setFlowControl(QSerialPort::NoFlowControl);
}
ServoController::~ServoController(){
myCom->close();
}
void ServoController::setTarget( unsigned char channelNumber, unsigned short target ){
if (target<mMinChannelValue ){
target=mMinChannelValue;
}
if(target>mMaxChannelValue){
target=mMaxChannelValue;
}
command[0]=0x84;
command[1]=channelNumber;
command[2]=target & 0x7F;
command[3]=(target >> 7) & 0x7F;
//QByteArray byte(command);
//byte = QByteArray(command);
myCom-> QSerialPort::write(command);
}
// main.cpp
#include "servocontroller.h"
int main(){
const QString portName = "/dev/ttyACM0";
unsigned int baudRate=9600;
void createSerialPort(portName, baudRate);
}