2016-06-30 7 views
0

特定のボックスがチェックされているときにコンマで区切られた変数をストリーミングするのに問題があります。変数に変更がない場合でも、データストリームがarduinoに絶えず流れるようにしたい。私が何かを近づけることができた唯一の時間は、私は無限ループにこだわってしまった。ここに私が持っている現在のコードですが、どんな助けも高く評価されます。Arduinoにシリアルデータを常時ストリーミングする

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Timers; 

namespace feeder3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void streamBox_CheckedChanged(object sender, EventArgs e) 
     { 
      int a = 1; 
      int b = 2; 
      int c = 3; 
       bool state = streamBox.Checked; 
       while (state == true) 
       { 
       System.Console.WriteLine("{0},{1},{2}", a,b,c); 

      } 
     } 

     private void stopStreamBtn_Click(object sender, EventArgs e) 
     { 
      streamBox.Checked = false; 
     } 
    } 
} 
+0

シリアルポートによって送信されるデータが実際に送信するために時間がかかるため - 例えば9600ボーでは1バイトあたり約1ミリ秒ですが、write関数を呼び出すとすぐにバッファリングされ、プログラムと並列に送信されます。データが送信されます。あなたは書くための呼び出しを遅らせるべきです。これを行う1つの方法は、タイマーを使用し、その中のwrite関数を呼び出すことです。または、送信バッファを空にしてからwrite関数を再度呼び出す前にテストしてください。 – barny

答えて

0

私は情報バーニーが私に与えたものを使って考え出しました。ボーレートに合わせて遅延を調整できるようになりました。

private async void streamBox_CheckedChanged(object sender, EventArgs e) 
    { 
     int a = 1; 
     int b = 2; 
     int c = 3; 
      bool state = streamBox.Checked; 
      while (state == true) 
      { 
      System.Console.WriteLine("{0},{1},{2}", a,b,c); 
      await Task.Delay(10); 
     } 
    } 
+0

これは10msの遅延ですか?送信バッファが空であるかどうかをテストするほうが丈夫です(たとえば、9600ボーで送信している文字列がこのコードで10,11文字を超える場合は、データが実際に送信されるよりも速くバッファを満たすことができます) 。 – barny

関連する問題