2012-05-08 13 views
1

ArduinoでシンプルなWebサーバーをプログラミングしています。私は基本的にHTML、CSS、JavascriptをクライアントにCコードで送信します。今、私はJavascriptのif-caseでC変数が必要になりました。私はASP.NETを使用せずにそれを行う必要があります。私は、データ型を変更しようとしたArduinoでC変数とJavascriptを共有する

client.println("if (%c == 1) {",stat[0]); 

が、私はプラス記号でJavaスタイルを使用してみました、私も最初の文字列に格納し、その後でそれを送信しようとしました。何も動作しません。

stat [0]は宣言され、時間とともに変化します。

Iコンパイラから取得エラー:

Webserver4.cpp:40:217エラー:オーバーロード 'のprintln(CONSTチャー[15]、バイト&)' の呼び出しが曖昧 はC:\ mpide -0023-窓-20111221 \ハードウェア\ PIC32の\コア\ PIC32/PRINT.H:7:66注意:候補者は、次のとおりです。無効印刷::のprintln(char型、int型) (...)

どれでもアイデア?

+2

が、これは '場合はすべきではありません(%c == 1) '? – thumbmunkeys

+0

真実ですが、コンパイルエラーはJavascriptエラーに気付かないのですが、あなたは完全に正しいので、私はそれを変更します。 :) –

+0

質問を '=='に変更しました。おそらく、これはJavascriptなので、 '==='である方が良いでしょう... –

答えて

1

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

#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("}"); 

たとえば、次の2つのステップでそれをしなければならない書式指定子を使用するには(Arduinoの中byteが実際にuint8_tPRIu8であることに注意してくださいが、このタイプの書式指定子です)これは、stat[0]が常に1桁であることを前提としています。 2桁以上の数字があると、バッファーがオーバーフローし、メモリーが壊れます。しかし

、以来(as unwind points out)JavaScriptのステートメントは、ブラウザの観点から、本質的に一定であるならば、おそらくArduinoのコードでこれを行うために単純になります:

if (stat[0] == 1) { 
    client.println("// JavaScript code to execute if stat[0] == 1"); 
} 
+0

Stat [0]は常に1または0のいずれかです。私は基本的にJavascriptコードのさまざまな部分をstat [0]が何であるかに応じて実行します。それは時々変化します。 2番目の提案を使用すると、サイトが更新されたときにstat [0]の変更が登録されないことを意味します。 私は印刷できるので、一定ではありません: "client.println(stat [0]);"ウェブページに直接このすべては、クライアント接続を作成するメソッドに組み込まれています。 私は最初のアイデアを後で試してみましょう、チップのおかげで! –

+0

サイトをリフレッシュするとArduionコードがJavaScriptコードを再生成することになり、 'stat [0]'への変更が登録されると思いました。それが真実でないなら、私は答えを更新するでしょう。ありがとう! –

+0

コンパイラは、PRIu8の前に括弧がないことに不満を持ちます。 "エラー:予期した ')' before 'PRIu8'"任意のアイデア? :) –

1

投稿者が指摘したように、放出されたJavascriptコードではおそらくif (%c == 1)であるはずです。

また、発光している式が一定であることに注意してください。正しいコード(ifが真と評価された場合に取られるコード)を直接的に再生成してCコードを再生成することもできます。放出されるコードの複雑さを減らす。

Cの宣言であるstatが表示されていないため、正しいことを確認することが困難です。 %cの書式設定コードと配列のインデックスについては、出力するコードが整数と比較しているため、少し奇妙な文字の配列である必要があります。

+0

If-casesをCコードで直接使うことには少し問題があります。Statはバイトとして宣言された配列です(%bを試しました)。また、stat [0]は0または1です。 –

関連する問題