Robofun 機器人論壇

標題: arduino接收外部命令延遲的問題 [打印本頁]

作者: adolclistin    時間: 2017-6-12 17:32
標題: arduino接收外部命令延遲的問題
各位前輩大家好

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

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

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

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

再次謝謝!




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2