다음 코드를 사용하여 arduino와 통신 할 직렬 포트를 엽니 다.arduino-ide가 연결을 열기 전에 QSerialPort를 사용하여 arduino와 통신 할 수 없습니다.
const qint32 baud = Global::getInstance().getSettings().value("Hardware/baudRate", 115200).toInt();
const QString portName = Global::getInstance().getSettings().value("Hardware/port", "COM3").toString();
port.setPortName(portName);
if(!port.open(QIODevice::ReadWrite))
{
qFatal("Unable to open serial port");
exit(1);
}
if(!port.setParity(QSerialPort::NoParity) ||
!port.setStopBits(QSerialPort::OneStop) ||
!port.setDataBits(QSerialPort::Data8) ||
!port.setFlowControl(QSerialPort::NoFlowControl) ||
!port.setBaudRate(baud))
{
qFatal("Unable to configure serial port");
exit(1);
}
if(port.error() != QSerialPort::NoError)
{
qFatal("some error occurred!");
exit(1);
}
는 그 후 나는 다음과 같은 코드를 사용하여 연결에서 읽으려고 :
bool Light::waitForReady()
{
char data[1];
data[0] = -1;
if(port.waitForReadyRead(10000))
{
const int numRead = port.read(&data[0], 1);
if(numRead == 1)
{
return data[0] == (char)RDY;
}
else
{
qWarning("Read error, read %d bytes", numRead);
}
}
else
{
qWarning("Read timeout");
return false;
}
return false;
}
읽기 않습니다 하지 작업 시간 초과 10 초 동안 대기 한 후. 그러나 내 QT 코드를 실행하기 전에 arduino-ide 내부에서 직렬 모니터를 열고 닫으면 작동합니다. 내 생각 엔 ardunio-ide는 포트에 뭔가 빠졌지 만, 필자는 arduino-ide와 똑같은 설정을 사용하여 직렬 포트를 열 수 있다고 말할 수 있습니다.
이
는 아두 이노에서 실행되는 코드입니다 :void setup()
{
Serial.begin(115200);
Serial.write(RDY);
}
This 사람은 비슷한 문제가 있었다 그는 퍼티와 QSerialPort의 직렬 포트 설정을 비교 하였다. 그는 fDtrControl
, fOutX
및 fIutX
설정이 다릅니다. 나는 fDtrControl
을 바꾸려고했지만 효과가 없었다. QT를 사용하여 fOutX
및 fIutX
을 설정하는 방법을 모르겠습니다.
어떤 아이디어가이 버그의 원인 일 수 있습니까?
편집 : 솔루션 : port.setDataTerminalReady(true)
이
안녕하세요. 어떤 QtSerialPort 버전을 사용하고 있습니까? Qt 4.8.5 및 사용자 정의 빌드 또는 5.2.1 바이너리 패키지와 함께 있습니까? 또한, 5.3 베타 또는 마스터 코드를 사용하는 경우, 열기 전에 포트를 설정할 수 있기 때문에 더 쉬울 것입니다. – lpapp
@LaszloPapp Qt 5.2.0 (바이너리 패키지)과 함께 제공되는 QtSerialPort를 사용 중입니다. –
오류 테스트 로직이 잘못되었습니다. 'if (! a &&! b &&! c)'대신'if (! a ||! b ||! c)'여야합니다. –