Для академической задачки нужно реализовать протокол 1-Wire через UART.
Смысл в том, что команды посылаются на одной скорости, а данные принимаются на другой.
Типа такого.
bool QOneWire::resetBus() {
QByteArray data;
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
data.append(0xF0);
qDebug() << "send reset:" << data.toHex();
serial->write(data);
serial->waitForBytesWritten(-1);
serial->waitForReadyRead(480);
data = serial->read(1);
qDebug() << "recv presence:" << data.toHex();
if (data.contains(0xF0)) {
return false;
}
return true;
}
А после нужно переключать скорость
serial->setBaudRate(QSerialPort::Baud115200);
посылать команды и принимать данные.
Если делать так
connect(serial, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
То как объяснить слоту onReadyRead() что только что была послана команда и надо немного подождать, а потом принимать данные? И как ему вообще объяснять что сейчас подаются команды или данные?