2016-03-19 12 views
0

私はVisual C#実行可能ファイルを作成していますが、3ループのArduinoコードで定義されている2つのケースで 'A'と 'B'を送信するforループを使用します。Visual C#の遅延 - Arduino

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); 
    } 
    } 
} 

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

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); 
     } 

私は私のプログラムでループを実現は、(ABSの束を送信し、停止した)非常にすぐに終了します。 私のプログラムに遅延を追加する方法はありますか?私はそれが問題を作成するので、スレッドオプションは適切な方法ではないことをお読みください...任意の提案?

+0

私はあなたのsendとsendの間にserialport1.flushを入れたいと思っています。 –

+0

@Someonethatmattersあなたのコメントをありがとう。私はserialport1.basestream.flush()を試した。それは何もしません。 Arduinoが1分後に終了している間、私のC#ループは2番目に終了します。 – Kamran

答えて

0

あなただけのC#での遅延を探している場合は、メインスレッドの睡眠を作ることができる:

Thread.Sleep(500); 

本質的arduinoのディレイ機能のように動作します。もちろん、あなたはarduinoのものを遅らせたくないことをよく覚えておいてください。データを受信すると同期が外れることがあり、セットアップで問題が発生する可能性があります。