日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arduino的串口结束符及串口缓冲区

發布時間:2025/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arduino的串口结束符及串口缓冲区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 1.深入理解緩沖區和Serial.available():
        • 2.深入理解串口結束符
        • 3.驗證結論:

1.深入理解緩沖區和Serial.available():

運行下面的代碼,我發現如果不在串口輸入任何數字,就會一直顯示“no”,輸入一個數字,就一直顯示“yes”。關掉串口界面再打開,還是一直顯示no
得出第一個結論:
輸入的字符并不會隨著輸入的結束而結束,他一直都存在于緩沖區。

void setup(){Serial.begin(9600); } void loop(){if(Serial.available()>0){Serial.println("yes");}else {Serial.println("no");} }

由于arduino是通過loop函數不斷循環的,每一次的循環都很快,可能我們輸入的數據還沒有完全傳入arduino的串口緩沖區,因此Serial.avaliable()的值在一開始可能并不能準確顯示出緩沖區里的所有數據的字節數。
我們只能說,Serial.avaliable()的返回值是當前緩沖區中接收到的數據字節數,注意是當前。
例子:

void setup(){Serial.begin(9600); } void loop(){if(Serial.available()>0){//delay(1000);Serial.println(Serial.available());delay(1000);Serial.println("yes");}else {Serial.println("no");} }

上述代碼的結果如下圖,可以看出,一開始雖然我們輸入四個字節,但是緩沖區只收到三個字節,進行第二次循環,緩沖區才完全接收到。

void setup(){Serial.begin(9600); } void loop(){if(Serial.available()>0){delay(1000);Serial.println(Serial.available());delay(1000);Serial.println("yes");}else {Serial.println("no");} }

上述代碼我們又增加一個delay(1000)。此代碼的結果如下,可以看出,此時緩沖區第一次就讀取了所有輸入的字節

得出第二個結論:
Serial.avaliable()的返回值是當前緩沖區中接收到的數據字節數。為了使它一次就捕獲到所有緩沖區中的數據,我們通常需要加延時函數。

2.深入理解串口結束符

打開串口界面,會發現


那么這幾個選項分別是什么意思呢,又有什么不同呢?
首先我們需要知道Serial.read(),他是從緩沖區拿出一個字節,先進緩沖區的先被拿出來。

void setup(){Serial.begin(9600); } void loop(){if(Serial.available()>0){delay(2000);Serial.println("yes");char inchar= Serial.read();if(Serial.available()>0){Serial.println("yes2");}else{Serial.println("no2");}} }

我們選擇沒有結束符,然后輸入五個數字,結果如下圖。從中我們可以發現,讀到第五個數之后緩沖區已經沒有數據了。

然后我們再分別選擇換行符和回車,從結果可以看出,此時我們輸入了五個,但實際上緩沖區有六個字節,那么顯而易見,當我們輸入五個數,然后點發送,系統會自動增加一個換行符或回車作為最后一個數


好了,現在我們得出第三個結論,結束符是當輸入完后系統自動添加到緩沖區中的字符。

3.驗證結論:

來驗證一下我們的三個結論:
我們輸入五個數,如果說第一個輸出是六,那么三個結論成立

void setup(){Serial.begin(9600); } void loop(){if(Serial.available()>0){delay(2000);Serial.println(Serial.available());Serial.println("yes");char inchar= Serial.read();if(Serial.available()>0){Serial.println("yes2");}else{Serial.println("no2");}} }

結果如下圖,三個結論成立。

總結

以上是生活随笔為你收集整理的Arduino的串口结束符及串口缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。