Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Arduino上与Javascript共享C变量_Javascript_C_Arduino - Fatal编程技术网

在Arduino上与Javascript共享C变量

在Arduino上与Javascript共享C变量,javascript,c,arduino,Javascript,C,Arduino,我正在Arduino上编写一个简单的web服务器。我基本上是通过C代码中的方法将HTML、CSS和Javascript发送到客户端。现在我需要在Javascript if中使用一个C变量,我需要在不使用ASP.NET的情况下使用它 client.println("if (%c == 1) {",stat[0]); 我试着改变数据类型,我试着使用带有加号的Java风格,我甚至试着先将它存储在字符串中,然后再发送进来;什么都不管用 stat[0]已声明并随时间变化 我从编译器中得到的错误: Web

我正在Arduino上编写一个简单的web服务器。我基本上是通过C代码中的方法将HTML、CSS和Javascript发送到客户端。现在我需要在Javascript if中使用一个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) (……)


有什么想法吗?

正如一位评论者所指出的,如果(%c==1)在发出的Javascript代码中,它可能是

另外,请注意,您发出的表达式是常量,因此您也可以重新计算您的C代码的因子,以直接发出正确的代码(如果
if
的计算结果为true,则采用该代码),并降低发出代码的复杂度


您没有显示
stat
的C声明,这使得您很难确定是否正确地执行了该操作。对于
%c
格式化代码和数组索引,它应该是一个字符数组,这有点奇怪,因为您发出的代码与整数进行比较。

编译问题是由于
printXxx()
客户端上可用的功能不支持
printf
格式说明符。虽然不清楚
客户机的类型是什么,但它显然是内置Arduino类的子类

要使用格式说明符,必须分两步进行,例如(请注意,Arduino中的
字节实际上是
uint8\t
,而
PRIu8
是此类型的格式说明符):


如果(%c==1)
,这不应该是
吗?虽然编译错误没有注意到Javascript错误,但您完全正确,我将更改它。:)我把问题改成了
=
。不过,可以说,因为这是Javascript,所以最好是
==
…如果您的意思是这样的话,那么直接将If case与C-code结合使用会有点问题。Stat是一个声明为字节的数组(我尝试了%b),Stat[0]是0或1。Stat[0]始终是1或0。我本质上希望Javascript代码的不同部分根据stat[0]是什么运行;它是什么将不时地改变。如果我使用你的第二个建议,这意味着在刷新站点时不会注册stat[0]中的任何更改,对吗?它不应该保持不变,因为我可以直接在网页上打印:“client.println(stat[0]);”。所有这些都封装在一个创建客户端连接的方法中。所以我稍后会尝试你的第一个想法,谢谢你的提示!我假设刷新站点会导致Arduion代码重新生成JavaScript代码,在这种情况下,将注册对
stat[0]
的更改。如果不是这样,我会更新答案。谢谢编译器抱怨PRIu8之前缺少括号。“错误:在'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("}");
if (stat[0] == 1) {
    client.println("// JavaScript code to execute if stat[0] == 1");
}