【问题标题】:String and substring - Arduino, esp32字符串和子字符串 - Arduino,esp32
【发布时间】:2018-04-06 07:09:26
【问题描述】:

我做错了什么 line = client.readStringUntil('\r');if (line.substring(0) == "1");

 // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
  line = client.readStringUntil('\r'); //    String
    Serial.println(line); 
  }

// Rele 1

  if (line.substring(0) == "1") 
 {
    Serial.println("Rele 1 ON");
    digitalWrite(Rele_1, LOW);
    myBr1 = 1;
 }
 else if (line.substring(0) == "0") 
 {
    Serial.println("Rele 1 OFF");
    digitalWrite(Rele_1, HIGH);
    myBr1 = 0;
 }
 else
 {
    Serial.println("Rele 1 OFF the charts - Check what you give me....");
    digitalWrite(Rele_1, HIGH);
    myBr1 = 0;
 }

当我运行这段代码时,串行打印线给我:000 但接力 1 给了我:Rel 1 关闭图表 - 检查你给我的东西.... 如果我强迫 line=001; 连续打印给我 1,而不是 001 我现在有 2 个继电器,还有一点要开始 OTA 更新。将添加更多继电器。 我混淆了什么,我该如何纠正?

【问题讨论】:

    标签: arduino esp32


    【解决方案1】:

    对于您的测试,您应该使用引号将 line="001" 强制为字符串,而不是 int。这就是为什么它打印 1 而不是 001

    对于line.substring(0) == "1" 的使用,line.substring(0) 将返回“001”而不是“1”。正确的做法是line.substring(0,1) == "1" 只读取第一个字符。

    【讨论】:

    • 感谢您的出色回答。你为我指明了正确的方向。我现在才知道8“8”和“8”是有区别的
    【解决方案2】:

    我今天学习了“0”和“0”和0之间的区别。 通过改变:

      if (line.substring(0) == "1") 
     {
    

     if (line.charAt(1) == '1')   // Bryter 1. 
        {
    

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2023-03-14
      • 2023-04-08
      • 2019-02-18
      • 2023-03-31
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多