我正在使用一个内置wifi的BlackWidow版本的arduino代码。使用WiServer.h库,我正在使用带有mods的SimpleClient.pde示例向网络服务器发送一个调用只需返回一个整数 - 0,1或2.最终目标是打开红绿灯,绿灯或黄灯的引脚。整数表示我们的Hudson CI的聚合状态。
我是一个PHP懒惰的混蛋,指针吓到我了。我正在使用的代码是
// Function that prints data from the server
void printData(char* data, int len) {
// Print the data returned by the server
// Note that the data is not null-terminated, may be broken up into smaller packets, and
// includes the HTTP header.
while (len-- > 0) {
Serial.print(*(data++));
}
}
printData()是对Web服务器的调用的回调,并且在运行时它将以下内容发送到串行监视器(这是3个循环,在新输出之前没有换行符):
HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:37 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html
0HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:45 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html
0HTTP/1.1 200 OK
Date: Thu, 10 Feb 2011 17:37:58 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11
X-Powered-By: PHP/5.2.11
Content-Length: 1
Connection: close
Content-Type: text/html
0
我需要识别的部分是0,也可以是1或2.
通过简单地将引脚设置为HIGH,该函数将成为turnOnAppropriateLight()或其他东西,而不是printData()。然后,这将激活继电器,为相应的LED阵列供电。
现在我已经写完了,看起来我只需要保留最后一个字符并根据值进行切换。 *(数据++)是令人困惑的部分,即使我知道它正在递增指针索引......我只是不确定如何直接转到该索引中的最后一个字符。不需要这个循环来吐出结果。
答案 0 :(得分:2)
这并不强大,但是
Serial.print(data[len-1])
看看是什么让你
答案 1 :(得分:1)
这应该是你所需要的:
data[len - 1]
答案 2 :(得分:0)
您可能会神经质并解析每一行,或查找最后一个标签: Content-Type :
我会将C风格的字符串转换为C ++ std::string
,然后使用find_first
方法查找关键字。
std::istringstream
可用于将文本“0”转换为数字0。