Я пойду прямо к делу. Мой arduino считывает значения из порта adc и отправляет их через последовательный порт (значения от 0 до 255). Я сохраняю их в виде байтового типа. После отправки определенного сигнала в arduino, он начинает отправлять в приложение Qt данные, сохраненные в векторе. Все работает, за исключением того, что arduino должен отправить 800 значений, и приложение получает меньше значений, чем это. Если я установил скорость последовательного бод до 9600, я получаю 220 значений. Если вместо этого я установил скорость передачи до 115200, я получаю только 20 значений. Можете ли вы, ребята, помочь мне исправить это? Я хотел бы использовать скорость 115200 бод, потому что мне нужен хороший трассировка скорости в этом проекте (линейная CCD в реальном времени). Я оставлю код ниже:My Qt app не получает все данные, отправленные 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);
}
Спасибо и извините, если это не так ясно, что это изнурительное у: P
Как код считывает данные из аналого-цифрового преобразователя? Возможно, он не может читать его так быстро, как вы думаете .... – wallyk
Я прочитал все значения из АЦП, сохранил их в векторе, а затем передал векторный последовательный порт. Не должно быть проблемы с чтением adc, поскольку он независим. –