碎碎念

以前写代码调试的时候,没有养成写博客记录的习惯,都是将它存在本地。时间久了就很难找。以后将其写在博客吧。便于自己查,也便于后来者学习~万里长征第一步

简介

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 = "";
      }
  }
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐