修正查表

This commit is contained in:
hm
2021-01-08 10:39:28 +08:00
parent a5beda4906
commit fb19ae76cb
3 changed files with 53 additions and 107 deletions
+8 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}