Arduino的串口结束符及串口缓冲区
文章目錄
- 1.深入理解緩沖區和Serial.available():
- 2.深入理解串口結束符
- 3.驗證結論:
1.深入理解緩沖區和Serial.available():
運行下面的代碼,我發現如果不在串口輸入任何數字,就會一直顯示“no”,輸入一個數字,就一直顯示“yes”。關掉串口界面再打開,還是一直顯示no
得出第一個結論:
輸入的字符并不會隨著輸入的結束而結束,他一直都存在于緩沖區。
由于arduino是通過loop函數不斷循環的,每一次的循環都很快,可能我們輸入的數據還沒有完全傳入arduino的串口緩沖區,因此Serial.avaliable()的值在一開始可能并不能準確顯示出緩沖區里的所有數據的字節數。
我們只能說,Serial.avaliable()的返回值是當前緩沖區中接收到的數據字節數,注意是當前。
例子:
上述代碼的結果如下圖,可以看出,一開始雖然我們輸入四個字節,但是緩沖區只收到三個字節,進行第二次循環,緩沖區才完全接收到。
上述代碼我們又增加一個delay(1000)。此代碼的結果如下,可以看出,此時緩沖區第一次就讀取了所有輸入的字節
得出第二個結論:
Serial.avaliable()的返回值是當前緩沖區中接收到的數據字節數。為了使它一次就捕獲到所有緩沖區中的數據,我們通常需要加延時函數。
2.深入理解串口結束符
打開串口界面,會發現
那么這幾個選項分別是什么意思呢,又有什么不同呢?
首先我們需要知道Serial.read(),他是從緩沖區拿出一個字節,先進緩沖區的先被拿出來。
我們選擇沒有結束符,然后輸入五個數字,結果如下圖。從中我們可以發現,讀到第五個數之后緩沖區已經沒有數據了。
然后我們再分別選擇換行符和回車,從結果可以看出,此時我們輸入了五個,但實際上緩沖區有六個字節,那么顯而易見,當我們輸入五個數,然后點發送,系統會自動增加一個換行符或回車作為最后一個數
好了,現在我們得出第三個結論,結束符是當輸入完后系統自動添加到緩沖區中的字符。
3.驗證結論:
來驗證一下我們的三個結論:
我們輸入五個數,如果說第一個輸出是六,那么三個結論成立
結果如下圖,三個結論成立。
總結
以上是生活随笔為你收集整理的Arduino的串口结束符及串口缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pic pwm 占空比可调 源码_PIC
- 下一篇: (扩展欧几里得)青蛙的约会