Arduino 串口 不能完全接受 命令
Arduino 串口 不能完全接受 命令
值得注意的是,使用Serial.Read()后,所有已接收的數(shù)據(jù)會(huì)被清空。例如,假設(shè)你的程序中加入了判斷有數(shù)據(jù)的語(yǔ)句,然后你輸入了';g';,第一個(gè)if判斷會(huì)進(jìn)行:Serial.Read()此時(shí)是g,不等于k,跳過(guò)。但是,此時(shí)緩存中的g已經(jīng)被清除了,因此,第二個(gè)if判斷進(jìn)行:Serial.Read()的值是空,不等于g,也跳過(guò)。因此會(huì)失效。解決辦法是使用一個(gè)變量來(lái)保存結(jié)果。例如,可以創(chuàng)建一個(gè)char變量temp來(lái)保存從Serial.read()獲取的數(shù)據(jù)。這樣,即使Serial.Read()清空了緩存,temp仍能保存上一次讀取的數(shù)據(jù)。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成為輸出口。};void loop()。{;
導(dǎo)讀值得注意的是,使用Serial.Read()后,所有已接收的數(shù)據(jù)會(huì)被清空。例如,假設(shè)你的程序中加入了判斷有數(shù)據(jù)的語(yǔ)句,然后你輸入了';g';,第一個(gè)if判斷會(huì)進(jìn)行:Serial.Read()此時(shí)是g,不等于k,跳過(guò)。但是,此時(shí)緩存中的g已經(jīng)被清除了,因此,第二個(gè)if判斷進(jìn)行:Serial.Read()的值是空,不等于g,也跳過(guò)。因此會(huì)失效。解決辦法是使用一個(gè)變量來(lái)保存結(jié)果。例如,可以創(chuàng)建一個(gè)char變量temp來(lái)保存從Serial.read()獲取的數(shù)據(jù)。這樣,即使Serial.Read()清空了緩存,temp仍能保存上一次讀取的數(shù)據(jù)。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成為輸出口。};void loop()。{;
你可能會(huì)遇到一個(gè)狀況,即多次發(fā)送命令才有反應(yīng),這是因?yàn)槌绦蛟诓粩嘌h(huán)運(yùn)行,所以每次循環(huán)都會(huì)執(zhí)行代碼。如果你恰好在運(yùn)行Serial.Read()之前發(fā)送了數(shù)據(jù),那么就可以進(jìn)行判斷。因此,要先判斷是否有數(shù)據(jù)傳輸過(guò)來(lái),再進(jìn)行后續(xù)操作。值得注意的是,使用Serial.Read()后,所有已接收的數(shù)據(jù)會(huì)被清空。例如,假設(shè)你的程序中加入了判斷有數(shù)據(jù)的語(yǔ)句,然后你輸入了'g',第一個(gè)if判斷會(huì)進(jìn)行:Serial.Read()此時(shí)是g,不等于k,跳過(guò)。但是,此時(shí)緩存中的g已經(jīng)被清除了,因此,第二個(gè)if判斷進(jìn)行:Serial.Read()的值是空,不等于g,也跳過(guò)。因此會(huì)失效。解決辦法是使用一個(gè)變量來(lái)保存結(jié)果。例如,可以創(chuàng)建一個(gè)char變量temp來(lái)保存從Serial.read()獲取的數(shù)據(jù)。這樣,即使Serial.Read()清空了緩存,temp仍能保存上一次讀取的數(shù)據(jù)。示例程序如下:void setup(){pinMode(13,OUTPUT); //使13口成為輸出口Serial.begin(9600);}void loop(){while(Serial.available()<=0); //這里是一個(gè)死循環(huán),如果沒(méi)有數(shù)據(jù)就一直什么都不干,如果有數(shù)據(jù),就跳出循環(huán)(下面就是判斷)char temp=char(Serial.read()); //保存數(shù)據(jù)(char(),轉(zhuǎn)換為字符)if(temp=='k'){digitalWrite(13,HIGH);}else if(temp=='g'){digitalWrite(13,LOW);}}需要注意的是,Serial.available()命令用于判斷串口是否有數(shù)據(jù),有就返回可以讀取的字節(jié)的數(shù)目,沒(méi)有就是0,通常用if(Serial.available()>0)進(jìn)行判斷。總結(jié)來(lái)說(shuō),為了確保數(shù)據(jù)不會(huì)被清空,可以使用一個(gè)變量來(lái)保存從Serial.read()獲取的數(shù)據(jù),從而避免數(shù)據(jù)丟失。官網(wǎng)解釋:Get the number of bytes (characters) available for reading from the serial port. This is data that's already arrived and stored in the serial receive buffer (which holds 64 bytes). available() inherits from the Stream utility class.通過(guò)這種方式,你可以確保每次讀取的數(shù)據(jù)不會(huì)被清空,并且能夠正確地進(jìn)行判斷和操作。
Arduino 串口 不能完全接受 命令
值得注意的是,使用Serial.Read()后,所有已接收的數(shù)據(jù)會(huì)被清空。例如,假設(shè)你的程序中加入了判斷有數(shù)據(jù)的語(yǔ)句,然后你輸入了';g';,第一個(gè)if判斷會(huì)進(jìn)行:Serial.Read()此時(shí)是g,不等于k,跳過(guò)。但是,此時(shí)緩存中的g已經(jīng)被清除了,因此,第二個(gè)if判斷進(jìn)行:Serial.Read()的值是空,不等于g,也跳過(guò)。因此會(huì)失效。解決辦法是使用一個(gè)變量來(lái)保存結(jié)果。例如,可以創(chuàng)建一個(gè)char變量temp來(lái)保存從Serial.read()獲取的數(shù)據(jù)。這樣,即使Serial.Read()清空了緩存,temp仍能保存上一次讀取的數(shù)據(jù)。示例程序如下:void setup()。{;pinMode(13,OUTPUT);//使13口成為輸出口。};void loop()。{;
為你推薦