Arduino String 类部分函数详解及应用示例(以解析G代码为例)

在 Arduino 编程中,String 类提供了一系列用于操作和处理字符串的函数。本文将详细介绍这些函数的用法,并结合实际示例,展示如何在 Arduino 项目中有效地使用这些函数。

目录
  1. charAt()
  2. substring()
  3. toInt()
  4. indexOf()
  5. length()
  6. toFloat()
  7. 三元运算符
  8. 综合示例:解析 G 代码

1. charAt()

charAt() 函数用于获取字符串中指定位置的字符。

语法

char charAt(unsigned int index);

参数

  • index:要获取字符的位置,从 0 开始。

返回值

  • 返回指定位置的字符。

示例

String line = "G1 X10 Y20";
char cmd = line.charAt(0); // cmd == 'G'

 在上述示例中,charAt(0) 获取了字符串 line 的第一个字符,即命令类型 'G'。

2. substring()

substring() 函数用于从字符串中提取指定范围的子字符串。

语法

String substring(unsigned int beginIndex);
String substring(unsigned int beginIndex, unsigned int endIndex);

参数

  • beginIndex:子字符串的起始索引(包含)。
  • endIndex:子字符串的结束索引(不包含)。

返回值

  • 返回从 beginIndexendIndex 的子字符串。

示例

String line = "G1 X10 Y20";
String sub1 = line.substring(2);       // sub1 == " X10 Y20"
String sub2 = line.substring(2, 5);    // sub2 == " X1"

在第一个示例中,substring(2) 提取从索引 2 开始到字符串末尾的子字符串。在第二个示例中,substring(2, 5) 提取从索引 2 开始到索引 5 之前的子字符串。

3. toInt()

toInt() 函数用于将字符串转换为整数。

语法

int toInt();

返回值

  • 返回字符串的整数值。如果字符串不包含有效的整数,将返回 0。

示例

String str = "12345";
int num = str.toInt(); // num == 12345

在上述示例中,toInt() 将字符串 "12345" 转换为整数 12345。

4. indexOf()

indexOf() 函数用于查找字符串中指定字符或子字符串的位置,并返回其索引值。

语法

int indexOf(char ch);
int indexOf(char ch, unsigned int fromIndex);
int indexOf(const String &str);
int indexOf(const String &str, unsigned int fromIndex);

参数

  • ch:要查找的字符。
  • str:要查找的子字符串。
  • fromIndex:开始查找的位置索引(可选)。如果未指定,则从字符串开头开始查找。

返回值

  • 找到时返回第一个匹配字符或子字符串的索引。
  • 如果未找到,返回 -1。

示例

String text = "Hello, Arduino!";
int index1 = text.indexOf('A');            // index1 == 7
int index2 = text.indexOf('o', 5);         // index2 == 8
int index3 = text.indexOf("Arduino");      // index3 == 7
int index4 = text.indexOf('z');            // index4 == -1

在上述示例中,indexOf('A') 返回字符 'A' 在字符串中的位置,indexOf('o', 5) 从索引 5 开始查找字符 'o',indexOf("Arduino") 查找子字符串 "Arduino",indexOf('z') 返回 -1,因为字符串中没有字符 'z'。

5. length()

length() 函数用于获取字符串的长度(字符数)。

语法

unsigned int length();

返回值

  • 返回字符串中的字符数。

示例

String str = "Hello";
unsigned int len = str.length(); // len == 5

在上述示例中,length() 返回字符串 "Hello" 的长度,即 5。

6. toFloat()

toFloat() 函数用于将字符串转换为浮点数。

语法

float toFloat();

返回值

  • 返回字符串的浮点数值。如果字符串不包含有效的浮点数,将返回 0.0。

示例

String str = "123.45";
float num = str.toFloat(); // num == 123.45

在上述示例中,toFloat() 将字符串 "123.45" 转换为浮点数 123.45。

7.(补充)三元运算符

三元运算符(? :)是一个条件运算符,允许在一行代码中简洁地表达条件判断和选择。

语法

condition ? expression_if_true : expression_if_false;

参数

  • condition:要评估的条件表达式。
  • expression_if_true:条件为真时执行的表达式。
  • expression_if_false:条件为假时执行的表达式。

示例

int a = 10;
int b = 20;
int max = (a > b) ? a : b; // max == 20

在上述示例中,三元运算符检查条件 a > b 是否为真。如果为真,则返回 a 的值;否则,返回 b 的值。

8. 综合示例:解析 G 代码

以下示例展示了如何结合使用 Arduino String 类函数和三元运算符来解析一行 G 代码并提取其中的参数:

void setup() {
  Serial.begin(9600);
  String line = "G1 X10 Y20 Z30";
  
  char cmd = line.charAt(0); // 获取命令类型 'G'
  int value = line.substring(1).toInt(); // 获取命令值 1

  float x = 0.0, y = 0.0, z = 0.0, f = 0.0;
  int spaceIndex = line.indexOf(' ');
  while (spaceIndex != -1) {
    char param = line.charAt(spaceIndex + 1);
    int nextSpaceIndex = line.indexOf(' ', spaceIndex + 1);
    String paramValue = (nextSpaceIndex == -1) ? line.substring(spaceIndex + 2) : line.substring(spaceIndex + 2, nextSpaceIndex);
    float paramVal = paramValue.toFloat();

    switch (param) {
      case 'X':
        x = paramVal;
        break;
      case 'Y':
        y = paramVal;
        break;
      case 'Z':
        z = paramVal;
        break;
      case 'F':
        f = paramVal;
        break;
    }
    spaceIndex = nextSpaceIndex;
  }

  if (cmd == 'G') {
    switch (value) {
      case 0:
        // 处理 G0 指令
        break;
      case 1:
        // 处理 G1 指令
        break;
    }
  } else if (cmd == 'M') {
    switch (value) {
      case 3:
        // 处理 M3 指令
        break;
      case 5:
        // 处理 M5 指令
        break;
    }
  }
}

void loop() {
  // 空循环
}

在这个综合示例中,parse_line 函数通过解析一行 G 代码,提取命令类型、命令值以及参数,并根据命令类型和值执行相应的操作。该函数展示了如何使用 charAt()substring()toInt()indexOf()toFloat() 函数,以及如何使用三元运算符来简化条件判断。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值