티스토리 뷰
1. .pro 파일
QT += serialport
2. 통신 세팅
m_Serial = new QSerialPort(this);
m_Serial->setPortName("/dev/ttyUSB0");
m_Serial->setBaudRate(QSerialPort::Baud115200);
m_Serial->setDataBits(QSerialPort::Data8);
m_Serial->setParity(QSerialPort::NoParity);
m_Serial->setStopBits(QSerialPort::OneStop);
m_Serial->setFlowControl(QSerialPort::NoFlowControl);
m_Serial->open(QIODevice::ReadWrite);
if(m_Serial->isOpen()) {
// 통신역할 타이머 작동
m_SeqTimer = new QTimer(this);
connect(m_SeqTimer, SIGNAL(timeout()), this, SLOT(SerialComm()));
m_SeqTimer->start(1);
SetCommand(IC_READER_STATUS);
}
else
g_Log.LogNameQString("IC_READER", "Serial Open Fail @@");
3. 수신
// 타이머에 의한 반복 실행 함수
void SerialComm()
{
// 우선순위에 따라
if(m_Sequence & WAIT_DATA) {
if(CheckTimeOver(5000, m_SendTime)) {
UnCommand(WAIT_DATA); // 응답 없을 시 명령해제하여 전 명령으로
}
else {
// 데이터를 이곳에서 수신하여 처리한다.
int i, Len;
char Temp[4096];
memset(Temp, 0, sizeof(Temp));
Len = m_Serial->bytesAvailable();
QByteArray RcvBuffer = m_Serial->read(Len);
memcpy(Temp, RcvBuffer.toStdString().c_str(), Len);
for(i = 0; i < Len; i ++) {
m_RcvBuffer[m_RcvLen] = Temp[i];
m_RcvLen ++;
// 데이터를 다 받았다면
if(m_RcvBuffer[m_RcvLen - 2] == ETX) {
ReadSerialData();
break;
}
}
}
}
else if(m_Sequence & STATUS) {
// 송신
StatusReq();
}
}
'프로그래밍 > Qt' 카테고리의 다른 글
한달 지난 로그 파일 지우기 (0) | 2019.06.11 |
---|---|
리눅스 Qt에서 utf-8 -> eucKR 변환 (0) | 2019.06.11 |
QTcpSocket isConnected (0) | 2019.06.11 |
폼안에 쓰레드 호출 함수 넣기 (0) | 2019.06.11 |
버튼으로 Edit 커서 이동 (0) | 2019.06.11 |
- Total
- Today
- Yesterday