Qt SerialPort ライブラリを使用してシリアル ポートを読み込もうとしています。ハイパーターミナルを使用してデータを読み取ることができます。
Qt では、次のコードを使用して同じことを試みました。Qt は、ポートが正しく開かれていると言いますが、何らかの理由で、シリアル ポートからの bytesAvailable は常に 0 です。
serial.setPortName("COM20");
if (serial.open(QIODevice::ReadOnly))
qDebug() << "Opened port " << endl;
else
qDebug() << "Unable to open port" << endl;
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::EvenParity);
serial.setBaudRate(QSerialPort::Baud115200);
qDebug() << "Is open?? " << serial.isOpen();
// Wait unit serial port data is ready
while (!serial.bytesAvailable())
{
//qDebug() << serial.bytesAvailable()<<endl;
continue;
}
QByteArray data = serial.read(100);
qDebug() << "This is the data -" << data << endl;
serial.close();
比較すると、上記のコードと同じ構造を持つ MATLAB コードは、シリアル ポート データを正常に読み取ることができます。
%Serial Port Grapher - Shurjo Banerjee
s = serial('COM20');
s.BaudRate = 460800;
s.Parity = 'even';
try
input('Ready to begin?');
catch
end
fopen(s);
fh = figure();
hold on;
t = 1;
while (s.BytesAvailable <= 0)
continue
end
a = fread(s, 1)
old_t = 1;
old_a = a;
while true
if (s.BytesAvailable > 0)
a = fread(s, 1)
figure(fh)
t = t + 1;
plot([old_t t], [old_a a]);
old_t = t;
old_a = a;
end
end
fclose(s);