私は、シリアルポートを介して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;
}
}
に、このメソッドを呼び出すのですか?
なぜタイマーが必要なのか分かりません。データがシリアルポートに到着するたびに 'DataReceived'イベントが発生するはずです(' SerialPort'クラスを使用していると仮定します)。 –
投稿を更新しました@ChrisDunaway – Forrobodo
このコードはシリアルポートを開いた直後にメインメソッドが終了するという問題があります。メインが終了すると、プログラムは終了します。どのようにイベントを受け取るためにプログラムを生かしていますか? –