0

Visual C# 実行可能ファイルを作成しています。以下の Arduino コードで定義されている 3 つの LED の 2 つのケースに対して、「A」と「B」を送信する for ループを使用したいと考えています。

int data;
void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available()){
    data=Serial.read();
    if (data=='A'){
        digitalWrite(12, HIGH);   
        digitalWrite(11, LOW);
        delay(2000);
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);
        delay(500);
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);
        delay(500);
    }

    else{
        digitalWrite(12, LOW);   
        digitalWrite(11, HIGH);
        delay(10000);
  }
  }
}

そして、これはテキストボックスからループの数を取得し、AB、AB、... (n 回 - テキストボックスの数に等しい) を実行する私の Visual C# コードです。

if (textBox1.Text != "")
            {
            int LoopNum = Convert.ToInt32(textBox1.Text);
            for (int i=0; i < LoopNum; i++)
            {
                serialPort1.Write("A");
                serialPort1.Write("B");
            }
        }
 else
            {
                MessageBox.Show("Please select the number of cycle!", "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }

プログラムのループがすぐに終了することに気付きました (一連の AB を送信してから停止します) が、Arduino は終了するまでループを続けます。プログラムに遅延を追加する方法はありますか? 問題が発生するため、スレッドオプションは適切な方法ではないことを読みました...何か提案はありますか?

4

1 に答える 1

0

C# で遅延を探しているだけの場合は、メイン スレッドをスリープ状態にすることができます。

Thread.Sleep(500);

これは本質的にarduinoの遅延機能のように機能します。もちろん、arduino の処理を​​遅らせたくない場合が多いことを覚えておいてください。データを受信するときに同期が取れなくなり、セットアップに問題が発生する可能性があります。

于 2016-03-19T12:36:09.040 に答える