Ich entwickle eine Konsolenanwendung, die Daten von einem Arduino über die serielle Schnittstelle lesen und schreiben kann. Wenn ich vom Arduino lese, muss ich warten, um eine Antwort von ihm zu erhalten, also ist das Bilden eines Timers die bessere Wahl.Erstellen eines Timers zum Aufrufen einer Methode in C#
Also ich habe diesen Timer erstellt und wird alle 2000 Millisekunden ausgeführt.
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
}
Was ich tun möchte, ist diese Methode in die
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;
}
}
TimerCallback
nennen Wie soll ich das Port_DataReceived Methode aufrufen?
Ich verstehe nicht, warum Sie einen Timer benötigen. Das Ereignis 'DataReceived' sollte immer dann ausgelöst werden, wenn die Daten am seriellen Port eintreffen. (Ich nehme an, dass Sie die' SerialPort' Klasse verwenden. Können Sie zeigen, wie Sie das Ereignis verkabeln? –
Bereits aktualisiert den Beitrag @ChrisDunaway – Forrobodo
Dieser Code scheint ein Problem zu haben, dass die Main-Methode sofort nach dem Öffnen der seriellen Schnittstelle beendet wird Sobald Main beendet ist, wird das Programm beendet Wie behalte ich das Programm am Leben, um Ereignisse zu empfangen –