1

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) (...)

何か案は?

4

2 に答える 2

1

コンパイルの問題は、フォーマット指定子をサポートしていないオブジェクトprintXxx()で使用可能な関数が原因です。タイプが何であるかは明らかではありませんが、組み込みのArduinoクラスを明らかにサブクラス化しています。clientprintfclientPrint

フォーマット指定子を使用するには、たとえば2つのステップで実行する必要があります(byteArduinoのaは実際にはauint8_tPRIu8あり、このタイプのフォーマット指定子であることに注意してください)。

#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]また、これは常に1桁であると想定していることに注意してください。2桁以上の場合、ifStatementバッファがオーバーフローし、メモリが破損します。

ただし、(unwindが指摘しているように)JavaScript ifステートメントはブラウザーの観点からは本質的に一定であるため、Arduinoコードでこれを行う方がおそらく簡単です。

if (stat[0] == 1) {
    client.println("// JavaScript code to execute if stat[0] == 1");
}
于 2012-05-08T13:00:55.110 に答える
1

コメント投稿者が指摘しているように、それはおそらくif (%c == 1)発行されたJavascriptコードに含まれているはずです。

また、出力する式は一定であるため、Cコードをリファクタリングして、適切なコード(iftrueと評価された場合に取得されるコード)を直接出力し、複雑さを軽減することもできます。放出されたコード。

のC宣言を表示していないstatため、正しく実行していることを確認するのが困難です。フォーマットコードと配列のインデックス付けについて%cは、文字の配列である必要があります。これは、発行しているコードが整数と比較しているため、少し奇妙です。

于 2012-05-08T08:32:11.637 に答える