私はRPMカウンタをQtで作成していますが、arduinoはRPM値を得るために冷却ファンを使用しています。 私はarduinoから値を読み取るためにシリアルポートを使用していますが、Qt GUIで印刷する値の最後のバイトを紛失することがありますが、arduinoシリアルモニタで同じ問題はありません。ここではQtのコードは次のとおりです。例えばQtシリアルポートが最後のバイトを失うことがある
void ArduinoRpm::serialReciver()
{
QString input_converter;
std::string to_file_string;
int sizeFromInput = 0;
char *dataBuffer;
//get the port size depending on bytes available to read
int bufferSize = serial->bytesAvailable();
//int bufferSize = serial->bytesAvailable();
//dataBuffer, get the data from serial port, bufferSize + 1 for the newline
dataBuffer = new char[bufferSize + 2];
//flush the port before read
//This function reads a line of ASCII characters from the device, up to a maximum of
//maxSize - 1 bytes, stores the characters in dataBuffer, and returns the number of bytes
//read. if a line could not be read but no error ocurred, this function returns 0. if an
//error occurs, this function returns the length of what could read or -1 if nothing was read.
//bufferSize is the maxsize readline can read.
sizeFromInput = serial->readLine(dataBuffer, bufferSize);
//to_file_string, to write data in file
to_file_string = dataBuffer;
input_converter = QString::fromStdString(to_file_string);
if ((sizeFromInput >= 1) && (input_converter.toInt() <= 9999)) {
if(input_converter.toInt() > 10) {
ui->lcdNumber->display(input_converter);
rpmNeedle->setCurrentValue(input_converter.toInt());
input_file << to_file_string << std::endl;
}
}
delete dataBuffer;
bufferSize = 0;
serial->flush();
}
void ArduinoRpm::SerialInitializer()
{
serial = new QSerialPort(this);
serial->setPortName(serialPortValue); //COM-port your Arduino is connected to
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(QSerialPort::Baud9600); //must be the same as your arduino-baudrate
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
}
27
1621
1621
1627
1627
1627
1627
1627
1627
1627
1627
1627
1627
1627
1627
1627
1621
1616
1616
1605
1605
1599
1594
1588
158
1583
158
1578
1578
1572
1572
1572
..このため 任意の解決策をそれが4桁のすべての時間をお読みください、時にはそれは、最後の桁をlosts?
あなたの 'serialReciver'関数はどこですか? – Mike
私はこのステートメントをメインのコンストラクターconnect(serial、SIGNAL(readyRead())、this、SLOT(serialReciver()))に入れます。 – pureofpure
*常に4桁の数字を表示する*、最初の行にはなぜ2桁しか含まれないのですか? – Mike