极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30349|回复: 9

如何在串口接收的数据中读取数字和字符串

[复制链接]
发表于 2014-6-20 14:30:31 | 显示全部楼层 |阅读模式
本帖最后由 ken0137 于 2014-6-23 09:24 编辑

我向板子发送字符串,比如“ML100”,希望读到ML和100,参考了好多帖子,但是都做不到,求解
下面能读到字符串里的数字100
  1. String comdata = "";int led;
  2. void setup()
  3. {
  4.     Serial1.begin(9600);                    //串口开始,波特率9600
  5.     Serial1.print("Arduino ready!");  //连接上电脑时发送一个字符串
  6. }

  7. void loop()
  8. {
  9.     while (Serial1.available() > 0)  
  10.     {
  11.       led=Serial1.parseInt();
  12.     }   
  13. }
复制代码
下面能读到整个字符串

  1. String comdata = "";
  2. void setup()
  3. {
  4.     Serial1.begin(9600);                    //串口开始,波特率9600
  5.     Serial1.print("Arduino ready!");  //连接上电脑时发送一个字符串
  6. }

  7. void loop()
  8. {
  9.     while (Serial1.available() > 0)  
  10.     {
  11.       comdata += char(Serial1.read());
  12.       delay(2);
  13.     }
  14.     if (comdata.length() > 0)
  15.     {
  16.       Serial1.println("comdata:"+comdata);
  17.       comdata = "";
  18.     }
  19. }
复制代码
回复

使用道具 举报

发表于 2014-6-20 22:40:17 | 显示全部楼层
Serial1.parseInt()這是返回整數型數據,你這ML100是字符,所以不會返回數據

先把全部字符讀進來,在判斷是字符還是數字並分開儲存,最後再轉換成int數據


回复 支持 反对

使用道具 举报

发表于 2014-6-21 15:19:10 | 显示全部楼层

String comdata = "";
String numData="";
String charData="";

void setup()
{
    Serial.begin(9600);                    //串口开始,波特率9600
    Serial.print("Arduino ready!");  //连接上电脑时发送一个字符串
}

void loop()
{
    while (Serial.available() > 0)  
    {
      comdata += char(Serial.read());
      delay(2);
    }
    if (comdata.length() > 0)
    {
      Serial.println("comdata:");
      for(int i=0;i<comdata.length();i++)
      {
        if(comdata[i]>='0'&&comdata[i]<='9')
        numData+=(char)comdata[i];
        else
        charData+=(char)comdata[i];
        
      }
      Serial.println(numData);
      Serial.println(charData);
      numData="";
      charData="";
      comdata = "";
    }
}
刚才试了一下 可以用   根据ascII码判断,不是很麻烦
好像也有判断字符和数字的函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-22 00:15:11 | 显示全部楼层
xiaoliumonitor 发表于 2014-6-21 15:19
String comdata = "";
String numData="";
String charData="";

谢谢~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2014-6-24 15:27:14 | 显示全部楼层
有学会了不少东西,谢谢!
回复 支持 反对

使用道具 举报

发表于 2014-8-8 23:29:43 | 显示全部楼层
请教如果发送的是时间和float值怎么办?

比如串口传送的是"2014/8/8,23:28,30.15"

如何分析并保持在3个变量中?
回复 支持 反对

使用道具 举报

发表于 2014-8-19 16:44:42 | 显示全部楼层
atlas 发表于 2014-8-8 23:29
请教如果发送的是时间和float值怎么办?

比如串口传送的是"2014/8/8,23:28,30.15"

日期格式,用字符串方式发送和接收;
浮点,如果是单精度浮点,存储占4个字节,可以在发送时,直接以字符方式发放浮点变量起始地址开始的4个字节,接收以后,数组强制转换还原成浮点类型,无论是发送和接收,一个MEMCPY命令就够了......
回复 支持 反对

使用道具 举报

发表于 2016-12-8 00:25:42 | 显示全部楼层
请问一下parseInt(); 函数是什么用
回复 支持 反对

使用道具 举报

发表于 2017-1-7 18:06:26 | 显示全部楼层
同求 怎么把测距传感器的数据以坐标的形式显示在OLED上
回复 支持 反对

使用道具 举报

发表于 2017-2-9 14:42:57 | 显示全部楼层
void setup() {
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){
      Serial.print(char(Serial.read()));
    }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 09:29 , Processed in 0.045793 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表