Arduino 串口接收数据的两种方式
碎碎念
以前写代码调试的时候,没有养成写博客记录的习惯,都是将它存在本地。时间久了就很难找。以后将其写在博客吧。便于自己查,也便于后来者学习~万里长征第一步
简介
在Arduino Mega2560上调试串口通信项目的时候,测试了两种串口接收数据的方法。
代码
方法一、创建一个字符型数组来实时接收
如下,创建一个长度为100的字符型数组SerialRcvBuf
,当检测到串口有数据传入时,先清零数组,随后创建一个标记值rcvMark
,rcvMark
的值会随着读入字符串的增加而增加。最终rcvMark
的值就是获取的串口接收数据值。
char SerialRcvBuf[100];
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
void loop()
{
if(Serial1.available() > 0)
{
memset(SerialRcvBuf, 0, sizeof(SerialRcvBuf));// 先清空buffer
byte rcvMark=0;
while (Serial1.available() > 0)
{
SerialRcvBuf[rcvMark]= char(Serial1.read());
delay(2);
rcvMark++;
}
Serial.println(SerialRcvBuf);
}
}
方法二、创建一个空字符串变量来实时接收
如下:创建一个字符串变量rcvData
,随后将获取到的字符逐个追加在字符串上。实现效果类似与Arduino自身的Serial.readString()
函数。
String rcvData="";
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
void loop()
{
if(Serial1.available() > 0)
{
while (Serial1.available() > 0)
{
rcvData += char(Serial1.read()); //每次读一个char字符,并相加
delay(2);
}
if (rcvData.length() > 0)
{
Serial.println(rcvData); //打印接收到的字符
comdata = "";
}
}
}