我会马上进入正题。我的arduino从adc端口读取值并通过串口发送(值从0到255)。我将它们保存在一个字节类型的向量中。在向arduino发送特定信号之后,它开始向Qt应用程序发送保存在向量中的数据。除了arduino应该发送800个值并且应用程序接收的值比这个值更小之外,一切都在工作。如果我将串行波特率设置为9600,则可以获得220个值。相反,如果我将波特率设置为115200,则只能获得20个值。你们能帮我解决这个问题吗?我想使用115200波特率,因为在这个项目中我需要一个很好的跟踪速度(实时线性CCD)。我将在下面留下一些代码:我的Qt应用程序没有收到由arduino发送的所有数据
的Arduino代码:
void sendData(void)
{
int x;
for (x = 0; x < 800; ++x)
{
Serial.print(buffer[x]);
}
}
这是发送的值的功能。我认为是足够的信息,所以我总结了一下。如果您需要更多代码,请告诉我。
Qt的串行端口设置代码:
...
// QDialog windows private variables and constants
QSerialPort serial;
QSerialPortInfo serialInfo;
QList<QSerialPortInfo> listaPuertos;
bool estadoPuerto;
bool dataAvailable;
const QSerialPort::BaudRate BAUDRATE = QSerialPort::Baud9600;
const QSerialPort::DataBits DATABITS = QSerialPort::Data8;
const QSerialPort::Parity PARITY = QSerialPort::NoParity;
const QSerialPort::StopBits STOPBITS = QSerialPort::OneStop;
const QSerialPort::FlowControl FLOWCONTROL = QSerialPort::NoFlowControl;
const int pixels = 800;
QVector<double> data;
unsigned int dataIndex;
QByteArray values;
double maximo;
...
// Signal and slot connection.
QObject::connect(&serial, SIGNAL(readyRead()), this,SLOT(fillDataBuffer()));
...
// Method called when there's data available to read at the serial port.
void Ventana::fillDataBuffer()
{
dataIndex++;
data.append(QString::fromStdString(serial.readAll().toStdString()).toDouble());
if(data.at(dataIndex-1) > maximo) maximo = data.at(dataIndex-1);
/* The following qDebug is the one I use to test the recieved values,
* where I check that values. */
qDebug() << data.at(dataIndex-1);
}
感谢和抱歉,如果它不如此清楚,这一直是一个令人精疲力尽的da Ÿ:P
代码如何读取模数转换器的数据?也许它不能像你想象的那样快速读取它...... – wallyk
我读取de ADC的所有值,将它们保存在一个向量中,然后通过串口传输向量。阅读adc应该不是问题,因为它是独立的。 –