修正查表
This commit is contained in:
@@ -96,6 +96,14 @@ ToolsUI::ToolsUI(QWidget *parent) :
|
||||
|
||||
ToolsUI::~ToolsUI()
|
||||
{
|
||||
foreach (QWidget *w, ToolsList) {
|
||||
if(w)
|
||||
{
|
||||
w->deleteLater();
|
||||
w = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@@ -167,9 +175,7 @@ void ToolsUI::btnClicked()
|
||||
setPushButtonState(b,state::unSelected);
|
||||
}
|
||||
}
|
||||
|
||||
emit IndexChanged(CurrentIndex);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-74
@@ -40,6 +40,7 @@ float to360deg(float raw)
|
||||
return angle;
|
||||
}
|
||||
|
||||
//查表,要求,表Key必须从小到大
|
||||
double findAngle(uint16_t pwm,QMap<uint16_t,double> table)
|
||||
{
|
||||
double angle = 0;
|
||||
@@ -50,79 +51,12 @@ double findAngle(uint16_t pwm,QMap<uint16_t,double> table)
|
||||
}
|
||||
else//如果没有包含对应的值
|
||||
{
|
||||
//找方差最小的两个值,其中一个是大,一个是小,
|
||||
|
||||
QList<double> numlist;
|
||||
|
||||
double amin = 0;
|
||||
double amax = 0;
|
||||
|
||||
double pmin = 1000;
|
||||
double pmax = 1000;
|
||||
|
||||
double kmin = 1000;
|
||||
double kmax = 1000;
|
||||
|
||||
/*
|
||||
foreach (uint16_t key, table.keys()) {
|
||||
|
||||
double value = sqrt(pwm - key);
|
||||
|
||||
numlist.append(value);
|
||||
|
||||
}
|
||||
|
||||
double minValue = *std::min_element(numlist.begin(), numlist.end());
|
||||
double maxValue = *std::max_element(numlist.begin(), numlist.end());
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
foreach (uint16_t key, table.keys()) {
|
||||
|
||||
double value = sqrt(pwm - key);
|
||||
|
||||
if(kmin > value)
|
||||
{
|
||||
kmin = value;
|
||||
|
||||
pmin = key;
|
||||
amin = table.value(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach (uint16_t key, table.keys()) {
|
||||
|
||||
double value = sqrt(pwm - key);
|
||||
|
||||
if((kmax > value)&&(value > kmin))
|
||||
{
|
||||
kmax = value;
|
||||
|
||||
pmax = key;
|
||||
amax = table.value(key);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(pmax != pmin)
|
||||
angle = ((double)(pwm - pmin))/(pmax - pmin) * (amax - amin) + amin;
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
for (int var = 0; var < table.keys().size(); ++var) {
|
||||
uint16_t pmin = table.keys().at(var);
|
||||
|
||||
if(pmin < pwm)
|
||||
{
|
||||
if(var < (table.keys().size() - 1))//如果var还没有到最后一个
|
||||
if((var + 1) < table.keys().size())//如果var还没有到最后一个
|
||||
{
|
||||
uint16_t pmax = table.keys().at(var + 1);
|
||||
if(pmax > pwm)//找到上一个是比pwm小,下一个比大的值
|
||||
@@ -130,11 +64,6 @@ double findAngle(uint16_t pwm,QMap<uint16_t,double> table)
|
||||
angle = ((double)(pwm - pmin))/(pmax - pmin) * (table.value(pmax) - table.value(pmin)) + table.value(pmin);
|
||||
break;
|
||||
}
|
||||
else//pwm比最大的还大
|
||||
{
|
||||
angle = table.value(pmax);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else//已经查找到最后一个,赋值
|
||||
{
|
||||
@@ -148,7 +77,7 @@ double findAngle(uint16_t pwm,QMap<uint16_t,double> table)
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
return angle;
|
||||
|
||||
+42
-31
@@ -338,8 +338,8 @@ bool DLink::setup_multicast(const QString &recieveIP, qint32 recievePort,
|
||||
{
|
||||
if (multicast_sock->joinMulticastGroup(multicast_recieve_addr))
|
||||
{
|
||||
connect(multicast_sock, SIGNAL(readyRead()),
|
||||
this, SLOT(processPendingMulticastDatagrams()));
|
||||
connect(multicast_sock,&QUdpSocket::readyRead,
|
||||
this,&DLink::processPendingMulticastDatagrams);
|
||||
multicast_recieve_port = recievePort;
|
||||
multicast_sock->setSocketOption(QAbstractSocket::MulticastTtlOption, 3);
|
||||
|
||||
@@ -417,36 +417,45 @@ void DLink::setup_rtk(const QString port, qint32 baudrate, QSerialPort::Parity p
|
||||
|
||||
void DLink::readPendingDatagramsSerialPort(void)
|
||||
{
|
||||
if(serialPort)
|
||||
QObject *obj = sender();
|
||||
|
||||
QSerialPort *serialport = qobject_cast<QSerialPort *>(obj);
|
||||
if(serialport)
|
||||
{
|
||||
QByteArray datagram = serialPort->readAll();
|
||||
QByteArray datagram = serialport->readAll();
|
||||
emit recieveMessage(SourceType::s_port,datagram);
|
||||
}
|
||||
}
|
||||
|
||||
void DLink::readPendingDatagramsClient(void)
|
||||
{
|
||||
//轮番查询
|
||||
if(Clientsock)
|
||||
QObject *obj = sender();
|
||||
|
||||
QUdpSocket *clientsock = qobject_cast<QUdpSocket *>(obj);
|
||||
if(clientsock)
|
||||
{
|
||||
while (Clientsock->hasPendingDatagrams()) {
|
||||
while (clientsock->hasPendingDatagrams()) {
|
||||
QByteArray datagram;
|
||||
datagram.resize(Clientsock->pendingDatagramSize());
|
||||
Clientsock->readDatagram(datagram.data(), datagram.size());
|
||||
datagram.resize(clientsock->pendingDatagramSize());
|
||||
clientsock->readDatagram(datagram.data(), datagram.size());
|
||||
|
||||
emit recieveMessage(SourceType::c_sock,datagram);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DLink::processPendingMulticastDatagrams(void)
|
||||
{
|
||||
if(multicast_sock)
|
||||
QObject *obj = sender();
|
||||
|
||||
QUdpSocket *clientsock = qobject_cast<QUdpSocket *>(obj);
|
||||
if(clientsock)
|
||||
{
|
||||
while (multicast_sock->hasPendingDatagrams()) {
|
||||
while (clientsock->hasPendingDatagrams()) {
|
||||
QByteArray datagram;
|
||||
datagram.resize(multicast_sock->pendingDatagramSize());
|
||||
multicast_sock->readDatagram(datagram.data(), datagram.size());
|
||||
datagram.resize(clientsock->pendingDatagramSize());
|
||||
clientsock->readDatagram(datagram.data(), datagram.size());
|
||||
|
||||
emit recieveMessage(SourceType::c_sock,datagram);
|
||||
}
|
||||
@@ -456,17 +465,21 @@ void DLink::processPendingMulticastDatagrams(void)
|
||||
void DLink::readRTKPendingDatagrams(void)
|
||||
{
|
||||
bool rtk_sending = true;
|
||||
QByteArray datagram = serialPortRTK->readAll();
|
||||
QObject *obj = sender();
|
||||
|
||||
if (rtk_sending)
|
||||
QSerialPort *serialport = qobject_cast<QSerialPort *>(obj);
|
||||
if(serialport)
|
||||
{
|
||||
rtkrawdata.append(datagram);
|
||||
if (rtkrawdata.size() > 2048)
|
||||
QByteArray datagram = serialport->readAll();
|
||||
if (rtk_sending)
|
||||
{
|
||||
rtkrawdata.mid(2048);
|
||||
rtkrawdata.append(datagram);
|
||||
if (rtkrawdata.size() > 2048)
|
||||
{
|
||||
rtkrawdata.mid(2048);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DLink::readRemotePendingDatagrams(void)
|
||||
@@ -478,27 +491,25 @@ void DLink::readRemotePendingDatagrams(void)
|
||||
QSerialPort *serialport = qobject_cast<QSerialPort *>(obj);
|
||||
if(serialport)
|
||||
{
|
||||
|
||||
QByteArray datagram = serialport->readAll();
|
||||
|
||||
|
||||
if (remote_enabled)
|
||||
{
|
||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||
{
|
||||
if (sbus.parse_char(*i))
|
||||
{
|
||||
for (int i=0; i<18; ++i)
|
||||
{
|
||||
rcin[i] = sbus.Channel[i+1];
|
||||
}
|
||||
rcin_cnt = 10;
|
||||
for (int i=0; i<18; ++i)
|
||||
{
|
||||
rcin[i] = sbus.Channel[i+1];
|
||||
}
|
||||
rcin_cnt = 10;
|
||||
|
||||
QList<uint16_t> list;
|
||||
for (int i=0; i<10; ++i)
|
||||
{
|
||||
list.append(sbus.Channel[i]);
|
||||
}
|
||||
QList<uint16_t> list;
|
||||
for (int i=0; i<10; ++i)
|
||||
{
|
||||
list.append(sbus.Channel[i]);
|
||||
}
|
||||
|
||||
//emit new_remote_ctrl(list);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user