Arduino中的字符串比较

时间:2014-10-13 17:50:33

标签: string arduino comparison

我正在开发基于Web的家庭自动化系统,因此我的Arduino向服务器发送请求并在串行监视器中获得以下响应,以及“loneOn”,这是由于Serial.println(r);语句。

HTTP/1.1 200 OK
Date: Mon, 13 Oct 2014 17:46:03 GMT
Server: Apache/2.4.4 (Win32) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 14
Content-Type: text/html

loneOn.ltwoOn.


loneOn

在另一种情况下,来自服务器的响应将具有loneOff,而不是loneOn,我需要确定它究竟是哪一个。但这不是现在的重点,我在比较字符串时遇到了麻烦。 (此外,响应将在串行监视器中循环,但同样,这不是重点。)

这是Arduino的代码:

#include <TextFinder.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 192,168,137,1 } ; 
IPAddress ip(192,168,1,100);
EthernetClient client;
String response = "";
String r = "";

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

    if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        Ethernet.begin(mac, ip);
    }

    delay(1000);
    Serial.println("connecting...");

    if (client.connect(server, 80)) {
        Serial.println("connected");

        client.println("GET /dir/ardu.php HTTP/1.1");
        client.println("Host: localhost");
        client.println();

    } 
    else {
        Serial.println("connection failed");
    }
}

void loop(){
    char c,s;

    while(client.available()) 
    {
        c = client.read();
        response = response + c; 
    }

    Serial.println(response);
    r = (response.substring(165,174));
    Serial.println(r);

    if (r == "loneOn")
        Serial.println("Light 1 is on");
}

问题是:

Serial.println(r);
if (r == "loneOn")
    Serial.println("Light 1 is on");
} 

不起作用,我的意思是在这里我将字符串'r'与它的实际值进行比较,即“loneOn”,它与串行监视器中的完全相同,但if语句不返回任何内容。我已经尝试了其他几种比较字符串的方法,但它不起作用。我想知道是否有关于弦乐的遗漏。

2 个答案:

答案 0 :(得分:1)

r = (response.substring(165,174)); 

我使用了错误的索引,它应该从167开始。这意味着有空格或&#34; \ n&#34; s导致字符串与给定值不匹配。

答案 1 :(得分:0)

尝试

if(r.equals("loneOn"))
{
     Serial.println("Light 1 is on");
}

http://arduino.cc/en/Reference/StringEquals