Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3443|回復: 2
打印 上一主題 下一主題

arduino接收外部命令延遲的問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2017-6-12 17:32:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位前輩大家好

我使用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,所以我就把他註解掉了。

請問是否有大大知道如何改善延遲的問題。

謝謝!
2#
發表於 2017-6-12 18:25:43 | 只看該作者
並不是延遲
而是它一斷時間沒收到資料(預設一秒),
就會逾時
所以應該你只送了第一個字元orderI
而沒送接下來的資料value

所以你的 updata(???) 中, 到底傳送了什麼字串
貼出來看看
另外, 字串最後記得要加 \r\n
如 f100\r\n
3#
 樓主| 發表於 2017-6-12 18:34:31 | 只看該作者
感謝超新手的回覆,
原來我沒有在後面加上\r\n
加上去之後就沒這個問題了。

再次謝謝!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-12-4 02:00 , Processed in 0.234556 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表