我在Arduino上编写一个简单的Web服务器。我基本上通过C代码中的方法向客户端发送HTML,CSS和Javascript。现在我在Javascript if-case中需要一个C变量,我需要在不使用ASP.NET的情况下完成它。
client.println("if (%c == 1) {",stat[0]);
我尝试更改数据类型,我尝试使用带有加号的Java风格,我甚至尝试先将其存储在字符串中,然后将其发送出去;什么都行不通。
stat [0]被声明并随时间而变化。
我从编译器得到的错误:
Webserver4.cpp:217:40:错误:调用重载'println(const char [15],byte&)'是不明确的 C:\ mpide-0023-windows-20111221 \ hardware \ pic32 \ cores \ pic32 / Print.h:66:7:注意:候选人是:void Print :: println(char,int) (...)
有什么想法吗?
答案 0 :(得分:1)
正如评论者所指出的那样,在发出的Javascript代码中它应该是if (%c == 1)
。
另外,请注意您发出的表达式是不变的,因此您也可以重新计算C代码以发出正确的代码(如果if
计算结果为true,则采用的代码)直接,并降低发出的代码的复杂性。
你没有显示stat
的C声明,这使得很难确定你做得对。对于%c
格式代码和数组索引,它应该是一个字符数组,这有点奇怪,因为您发出的代码是与整数进行比较。
答案 1 :(得分:1)
编译问题是由printXxx()
对象上不支持client
格式说明符的printf
函数引起的。虽然client
的类型并不明显,但它显然是内置的Arduino Print
类的子类。
要使用格式说明符,您必须分两步执行此操作(请注意,Arduino中的byte
实际上是uint8_t
,而PRIu8
是此格式说明符型):
#define __STDC_LIMIT_MACROS 1
#include <inttypes.h>
// ...
char ifStatement[13];
sprintf(ifStatement, "if (%" PRIu8 " == 1) {", stat[0]);
client.println(ifStatement);
client.println("// JavaScript code to execute if stat[0] == 1");
client.println("}");
另请注意,这假设stat[0]
始终是一位数。如果它有两个或更多个数字,ifStatement
缓冲区将溢出,破坏内存。
但是,由于(as unwind points out)JavaScript if语句从浏览器的角度来看基本上是不变的,所以在Arduino代码中执行此操作可能更简单:
if (stat[0] == 1) {
client.println("// JavaScript code to execute if stat[0] == 1");
}