2017-03-17 30 views
0
讀取

我使用QT讀取從連接到Arduino板一個光敏電阻值的情況下,我成功地讀出的值和發射它,如下面的:錯誤之前的值從阿爾杜伊諾

void Dialog::handleReadyRead(){ 
    QString temp; 
    temp = serial.readAll(); 
    serialBuffer.append(temp); 
    int serPos; 
    double tempValue; 
    double previousValue = tempValue; 
    while ((serPos = serialBuffer.indexOf('\n')) >= 0) 
    { 
     bool ok; 
     previousValue = tempValue; 
     tempValue =  QString::fromLatin1(serialBuffer.left(serPos)).toDouble(&ok); 
     if (ok){ 
      emit newData(tempValue, previousValue); 
     } 
     serialBuffer = serialBuffer.mid(serPos+1); 
    } 
} 

然而,出於某種原因,我需要獲得以前的值。當我做previousValue = tempValue時,它會打印出一些奇怪的值(有時它確實是以前的值,但對於大多數時間它只打印出0或幾乎真的接近0)。我想知道這裏發生了什麼,我該如何解決?

樣品錯誤輸出可能是這樣的:

399 
399 
399 
399 
399 
399 
399 
399 
399 
399 
399 
399 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
1.49189e-154 
1.49189e-154 
0 
0 
0 

399是正確的值,而所有的0都沒有。

+0

你的變量tempValue從未發出一個值開始,然後嘗試分配PREVIOUSVALUE到tempValue。 – Zypps987

+0

這仍然發生,當我用0初始化它,並且它沒有給mw一個正確的值,當我做double tempValue = QString :: fromLatin1(serialBuffer.left(serPos))。toDouble(); –

+0

是否曾經有過所有0都不是正確輸出的情況? 當光敏電阻沒有檢測到什麼時會發生什麼? – Zypps987

回答

0

試試這個

double tempValue = 0; 
double previousValue = 0; 

while ((serPos = serialBuffer.indexOf('\n')) >= 0) 
{ 
    tempValue = QString::fromLatin1(serialBuffer.left(serPos)).toDouble(&ok); 

    if (previousValue != 0 && tempValue != 0){ 
     emit newData(tempValue, previousValue); 
    } 

    previousValue = tempValue 
    serialBuffer = serialBuffer.mid(serPos+1); 
} 
+0

謝謝。我看到這裏發生了什麼,但問題是0不是來自電阻的東西,它只是由初始化引起的異常值(我後來發現)。這部分不起作用。 –

+0

啊,好吧,知道你解決了它。 下次雖然發佈所有與您的問題相關的代碼:) 但是,我的答案解決了您發佈的代碼的問題,如果有幫助。 – Zypps987

+0

剛剛發現了什麼問題,但仍然無法解決它...謝謝反正 –

0

我假設每當(true != ok)你的價值無效。問題可能在那裏,你應該保留這個值,而你應該放棄它。

你做

bool ok; 
double parsed = QString::fromLatin1(serialBuffer.left(serPos)).toDouble(&ok); 
if (ok) { 
    previousValue = tempValue; 
    tempValue = parsed; 
    emit newData(parsed, previousValue);  
    } 

這可能是有關在例如重命名tempValuecurrValue什麼。

+0

非常感謝。什麼是「解析」在這裏?它是不是tempValue的新變量? –

+0

另外通過這樣做,previousValue一路給我0 ... –

+0

是的,parsed是一個新的變量。這個想法是,只要'ok'是假的,你就會丟棄這個值。 首先,你當前的代碼沒有設置'previousValue'或'currentValue'= 0,這意味着你得到的第一個值很可能是垃圾。第二個問題是'previousValue = currentValue',即使該值無效(您在檢查'ok'之前分配它)。 – AlexG