ken0137 发表于 2014-6-20 14:30:31

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

本帖最后由 ken0137 于 2014-6-23 09:24 编辑

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

void loop()
{
    while (Serial1.available() > 0)
    {
      led=Serial1.parseInt();
    }   
}下面能读到整个字符串
String comdata = "";
void setup()
{
    Serial1.begin(9600);                  //串口开始,波特率9600
    Serial1.print("Arduino ready!");//连接上电脑时发送一个字符串
}

void loop()
{
    while (Serial1.available() > 0)
    {
      comdata += char(Serial1.read());
      delay(2);
    }
    if (comdata.length() > 0)
    {
      Serial1.println("comdata:"+comdata);
      comdata = "";
    }
}

hsr18299 发表于 2014-6-20 22:40:17

Serial1.parseInt()這是返回整數型數據,你這ML100是字符,所以不會返回數據

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


xiaoliumonitor 发表于 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>='0'&&comdata<='9')
      numData+=(char)comdata;
      else
      charData+=(char)comdata;
      
      }
      Serial.println(numData);
      Serial.println(charData);
      numData="";
      charData="";
      comdata = "";
    }
}
刚才试了一下 可以用   根据ascII码判断,不是很麻烦
好像也有判断字符和数字的函数

ken0137 发表于 2014-6-22 00:15:11

xiaoliumonitor 发表于 2014-6-21 15:19 static/image/common/back.gif
String comdata = "";
String numData="";
String charData="";


谢谢~~~~~~~~~~~~~~~~

lbyc106 发表于 2014-6-24 15:27:14

有学会了不少东西,谢谢!

atlas 发表于 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 static/image/common/back.gif
请教如果发送的是时间和float值怎么办?

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


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

chicken446 发表于 2016-12-8 00:25:42

请问一下parseInt(); 函数是什么用

王云飞 发表于 2017-1-7 18:06:26

同求 怎么把测距传感器的数据以坐标的形式显示在OLED上

impking 发表于 2017-2-9 14:42:57

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

void loop() {
if(Serial.available()>0){
      Serial.print(char(Serial.read()));
    }
}
页: [1]
查看完整版本: 如何在串口接收的数据中读取数字和字符串