だから。 以下は私が従ったアルゴリズムの例です:
- arduino.ruに移動し、type列のシンボルに関連するすべてのものを探します。
- どの形式の表現を使用するかを決定します(
マッシュアレイで不快な経験をしたため、Stringクラスに決めました)。 -
プリファレンスとprofursetkiで関数を必死に書き込もうとしています - クラスの詳細な説明を探しています。
- 必要なオペレーターを探しています。
- 書いています!
そして、プログラムの本体のアルゴリズムは単純です:
- ポートのcomバッファーに読み取り可能なバイトがあるかどうかを周期的に確認し、ある場合は読み取ります。
- 受信したバイトが改行文字( '\ n')である場合、解析の自己解析関数を呼び出し、そうでない場合は、受信したバイトをString型の作成済み変数に追加します。
- Parsimは最終的に文字列です。実際、 解析文字列の実際の使用は私には燃えませんので、この関数は、結果の文字列を既にメモリに書き込まれた定数文字列と比較する単なるデモンストレーションです。 したがって、 等号演算子を使用して、受け入れられた文字列と記録された文字列を比較し、演算子がtrueを返した場合はハンドラー関数を終了し、そうでない場合は次と比較します。 文字列が等しい場合、再び、ハンドラー関数を終了し、結果を返します。 さて、この条件が機能しない場合でも、関数を終了し、行が真ではないと言います。
- 受信した結果に応じて、スイッチケースを使用して目的の結果を選択します。
- 受信した文字列をゼロにして、再度収集を開始できるようにします。
そして最後に、コード:
#define led 13 String input_string = ""; const String Led_off = "switch led off"; const String Led_on = "switch led on"; bool led_running; void setup() { Serial.begin(9600); } void loop() { while (Serial.available() > 0) { char c = Serial.read(); if (c == '\n') { Serial.print("Input_string is: "); Serial.println(input_string); switch ( parse(input_string, Led_off, Led_on) ) { case 10: led_running=false; Serial.println("Switching off is done"); break; case 11: led_running=true; Serial.println("Switching on is done"); break; case 0: Serial.println("invalid String"); break; } input_string = ""; digitalWrite(led, led_running); } else { input_string += c; } } } byte parse(String input_string, const String Led_off, const String Led_on) { if (input_string.equals(Led_off) == true) { return 10; } else if (input_string.equals(Led_on) == true) { return 11; } else return 0; }
だから、私はどのようなビジネスを理解していないのですか? LEDが点灯しないのはなぜですか? そうそう、どうやってこれを忘れたのか、空のセットアップで追加する必要がある:
pinMode(led, OUTPUT);
PS:Arduino IDEのcomポートモニターを「New Line」モードに設定することが重要です。 それ以外の場合、送信された文字列の後には終了文字「\ n」が続きません。
PPS:Arduinoが参加しないという事実について、私はホリバーに参加するつもりはありません。プログラミングとアルゴリズム化の基礎を勉強することで、何も悪いことはしませんでした。
PPPS:この記事が適切に受け入れられた場合、構文解析機能の機能が改善されたことで私に何が起こったのかについて次のように書きます。 まあ、神と! 。