Arduino多串口通信分離字符串最簡單有效的方法

/本方法簡單明瞭,經過本人的實際運行測試,用一個字形容perfect,^ _ ^。串口1接收字符串格式爲435;25.25,分號是分隔符,一個整型,一個浮點型,這兩個數據是UNO上的傳感器採集的數據,是變量,通過軟件串口發送給上位機。這裏是上位機的代碼,下位機使用的Serial.print()函數,所以發送的內容是字符串,如果使用Serial.write()發送多組數據就比較麻煩了,理論上講字符串的長度只要不讓串口緩存區溢出就行。分離後的數據已經進行了類型轉換,所以可以直接參與運算操作,省去了分離之後再進行類型轉換的麻煩。如果用其他辦法只分離字符串就拿去運算,實際是對應字符ASCII值的運算/
String message_c;
const char* message;
int sensorA0;
float Temperature;

void setup()
{
Serial.begin(9600);

Serial1.begin(115200);

while(Serial.read()>= 0){} //清空串口0緩存
while(Serial1.read()>= 0){} //清空串口1緩存
}
void loop()
{
if (Serial1.available())
{
String message_c = Serial1.readString(); //串口1接收字符串
Serial.print(message_c); //串口0打印串口1接收的字符串
Serial.println(message_c.length()); //串口0打印串口1接收的字符串長度

message = message_c.c_str(); //由於sscanf只能識別const char類型字符串,將String類型字符串轉成const char類型
sscanf(message,"%d;%f",&sensorA0,&Temperature); //串口1接收字符串格式爲435;25.25
Serial.print(“sensorA0=”);
Serial.print(sensorA0);
Serial.print(", Temperature=");
Serial.println(Temperature);

while(Serial2.read()>=0){}; //清空串口1緩存,保證字符串的長度穩定
}
}

參考內容:

https://www.cnblogs.com/lyf-sunicey/p/8679183.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章