Hallo,
Ich bin mal wieder am verzweifeln. Ich schreibe mit meinem Arduino Daten (erstmal nur Testdaten) an die Serielle Schnittstelle um sie mit einem c# (.Net 8.0) am Rechner entgegen zu nehmen.
Der Serielle Port wird am Rechner zwar geöffnet aber es gelingt mir nicht die Daten zu empfangen. Vielleicht hat ja jemand damit schon Erfahrungen gemacht.
Hier das Sketch auf dem Arduino:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int rnd = random(1,7);
if(Serial)
{
Serial.print("Millis=");
Serial.print(millis());
Serial.print(";Random=");
Serial.println(rnd);
}
}
Und hier das c# Programm auf PC Seite:
public partial class Form1 : Form
{
SerialPort serialPort;
public Form1()
{
InitializeComponent();
foreach (string s in SerialPort.GetPortNames())
{
comboBoxSerialPorts.Items.Add(s);
}
}
private void comboBoxSerialPorts_SelectedIndexChanged(object sender, EventArgs e)
{
string name = (string)comboBoxSerialPorts.SelectedItem;
if (name != null && name.ToLower().StartsWith("com"))
{
try
{
serialPort = new SerialPort(name, 9600, Parity.None, 8, StopBits.One);
serialPort.Handshake = Handshake.None;
serialPort.Open();
if (serialPort.IsOpen)
{
labelStatusSerial.BackColor = Color.Green;
labelStatusSerial.Text = "Verbunden";
backgroundWorker.RunWorkerAsync();
}
else
{
throw new Exception("Can't connect to " + name);
}
}
catch (Exception ex)
{
labelStatusSerial.BackColor = Color.Red;
labelStatusSerial.Text = "Nicht Verbunden";
}
}
}
private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
try
{
while (serialPort != null && serialPort.IsOpen)
{
// Hier sollten jetzt die Daten ankommen
string indata = serialPort.ReadExisting();
if (indata != null && indata.Length > 0)
{
backgroundWorker.ReportProgress(50, indata);
}
Thread.Sleep(1);
}
}
catch (Exception ex)
{
}
backgroundWorker.ReportProgress(100);
}
private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
richTextBox1.AppendText("DataReceived: " + ((string)e.UserState) + "\n");
}
private void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
try
{
serialPort.Close();
}
catch (Exception ex)
{
}
serialPort = null;
labelStatusSerial.BackColor = Color.Red;
labelStatusSerial.Text = "Nicht Verbunden";
}
}