从Arduino读取时错误的先前值

时间:2017-03-17 19:04:18

标签: c++ qt arduino arduino-uno

我正在使用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都不是。

2 个答案:

答案 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);      
    }

在该示例中,将tempValue重命名为currValue可能相关。

答案 1 :(得分:0)

试试这个

        <table align="center" border="1" cellspacing="0" cellpadding="0" width="700" id="table">
            <thead>
                <th>id</th>
                <th>Subject</th>
                <th>Name</th>
                <th>Description</th>
                <th>Hours</th>
                <th>Action</th>

            </thead>

            <?php
            $sql=mysql_query("SELECT * FROM home");
            $i=1;
                while($row=mysql_fetch_array($sql)){
                    echo "<tr>
                            <td>".$i."</td>
                            <td>".$row['subject_id']."</td>
                            <td>".$row['name']."</td>
                            <td>".$row['description']."</td>
                            <td>".$row['hours']."</td>
                            <td align='center'>

                            </td>
                    </tr>";
                    $i++;
                }
            ?>