|
各位前輩大家好
我使用Qt的QSerialPort,傳送指令給arduino,進行特定的動作。
當我發送指令的瞬間可以看到arduino板子上的RX燈亮了一下,過了約一秒才開始動做。
若我使用arduino 程式內建的序列埠監控視窗,指令一下,arduino馬上就反應了。
以下是我程式的部分
arduino part
//-----------------------------------------------------------------------------------------------------------------
void setup() {
myStepper.setSpeed(60);
Serial.begin(9600);
}
char orderindex;
int value;
void loop() {
if(Serial.available()){
orderindex = Serial.read();
value = Serial.parseInt();
orderchoose(orderindex, value);
}
void orderchoose(char orderI, int value)
{
switch(orderI)
{
case 'f':
myStepper.step(-value);
break;
case 'b':
myStepper.step(value);
break;
case 'r':
myStepper.setSpeed(value);
break;
case 'e':
//if(value == 1)
// stepmotor.enable();
//else
// stepmotor.disable();
break;
}
return;
}
Qt QSerialPart 設定
//---------------------------------------------------------------------------------------------------------
void MainWindow::connectarduino()
{
arduino_port_name = ui->serialport_cb->currentText();
arduino->setPortName(arduino_port_name);
arduino->open(QSerialPort::WriteOnly);
arduino->setBaudRate(QSerialPort::Baud9600);
arduino->setDataBits(QSerialPort::Data8);
arduino->setParity(QSerialPort::NoParity);
arduino->setStopBits(QSerialPort::OneStop);
arduino->setFlowControl(QSerialPort::NoFlowControl);
}
Qt QSerialPart 傳送資料
void MainWindow::updata(QString command)
{
if(arduino->isWritable()){
arduino->write(command.toStdString().c_str());
//arduino->flush();
}else{
qDebug() << "Couldn't write to serial!";
}
}
//--------------------------------------------------------------------------------------------------------
補充說明一下,在傳資料裡,flush函式,qt的說明是將所有要傳送的資料立刻傳送。但是我使用後發現他會傳兩次,一次是write, 第二次是flush,所以我就把他註解掉了。
請問是否有大大知道如何改善延遲的問題。
謝謝! |
|