2016-11-11 11 views
-2

私は、シリアルポートを介してArduinoからデータを読み書きできるコンソールアプリケーションを開発しています。私がArduinoから読んだとき、私はそれから応答を得るのを待たなければならないので、タイマーを作る方が良い選択です。C#でメソッドを呼び出すためのタイマーの作成

私はこのタイマーを作成し、2000ミリ秒ごとに実行します。私が何をしたいか

static void Main(string[] args) 
{ 
    SerialPort port = new SerialPort("COM1", 9600, Parity.Odd, 7, StopBits.One); 

    Timer t = new Timer(TimerCallback, null, 0, 2000); 

    port.DataReceived += Port_DataReceived; 

    port.Open(); 
} 

private static void TimerCallback(Object o) 
{ 
    //Call the method 
} 

は、私がPort_DataReceivedメソッドを呼び出す必要がありますどのようにTimerCallback

private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     SerialPort port = sender as SerialPort; 

     // Leitura de dados 
     string incoming = port.ReadExisting(); 
     string questionmark = "?"; 
     string carriageReturn = "\r"; 
     string text = string.Empty; 

     switch (incoming) 
     { 
      case "@r\r": 
       // send the message back 
       port.Write(questionmark + "*" + carriageReturn); 
       break; 
      case "@{/r": 
       port.Write("@" + text); 
       break; 
      default: 
       Console.WriteLine("Unknown command sent by the Arduino!\n Command: " + incoming); 
       break; 
     } 
    } 

に、このメソッドを呼び出すのですか?

+0

なぜタイマーが必要なのか分かりません。データがシリアルポートに到着するたびに 'DataReceived'イベントが発生するはずです(' SerialPort'クラスを使用していると仮定します)。 –

+0

投稿を更新しました@ChrisDunaway – Forrobodo

+1

このコードはシリアルポートを開いた直後にメインメソッドが終了するという問題があります。メインが終了すると、プログラムは終了します。どのようにイベントを受け取るためにプログラムを生かしていますか? –

答えて

1

イベントハンドラをコードから直接呼び出すことは奇妙なようです。

あなたのタイマーから、そしてイベントハンドラからも呼び出される新しい機能をお勧めします。

しかし、なぜあなたはこれをやりたいのですか?

0

タイマーは必要ありません。それを除く。

イベントはシリアルポートでデータを受信するたびに呼び出されます。あなたはそれを自分で呼び出す必要はありません。

+0

私は 'private static void TimerCallback(Object o ) 'empty? – Forrobodo

+0

後で必要がない限り、タイマーとタイマーメソッドを削除することもできますが、少なくともシリアル通信では必要ありません。 –

関連する問題