私はポイントに右に行きます。私のarduinoはadcポートから値を読み取り、シリアルポート(0から255までの値)を介して送信します。それらをバイト型のベクトルに保存します。特定のシグナルをarduinoに送信した後、ベクターに保存されたデータをQtアプリに送信し始めます。arduino が 800 の値を送信し、アプリがそれよりも少ない値を受け取ることを除いて、すべてが機能しています。シリアル ボー レートを 9600 に設定すると、220 の値が得られます。代わりに、ボー レートを 115200 に設定すると、20 個の値しか得られません。これを修正するのを手伝ってもらえますか?このプロジェクト (リアルタイム リニア CCD) では十分な転送速度が必要なので、115200 ボー レートを使用したいと考えています。以下にいくつかのコードを残します。
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