Guten Tag,
Ich habe ein sehr einfaches Arduino Programm, welches auf der seriellen Schnitstelle vier Sensorwerte sendet. in der Arduino IDE Sehe ich im Seriellen Monitor die Daten welche richtig gesendet werden. Ein C#-Programm baut dan eine Serielle Verbindung zum Mikrocontroller auf und empfängt die Werte. Die Empfangenen Daten sind jedoch Teilweise Fehlerhaft und unvollständig.
Arduino Code:
`#include <Wire.h>
#include "Adafruit_TCS34725.h"
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_600MS, TCS34725_GAIN_16X);
void setup() {
Serial.begin(115200);
if (tcs.begin()) {
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
}
void loop() {
delay(1000);
uint16_t redraw, greenraw, blueraw, clearraw;
tcs.setInterrupt(false);
delay(700);
tcs.getRawData(&redraw, &greenraw, &blueraw, &clearraw);
tcs.setInterrupt(true);
Serial.print("\n");
Serial.print(int(clearraw));
Serial.print("\n");
Serial.print(int(redraw));
Serial.print("\n");
Serial.print(int(greenraw));
Serial.print("\n");
Serial.print(int(blueraw));
}`
C# Programm:
List<string> SerieleDatenSpeicher = new List<string>();
public MainWindow()
{
InitializeComponent();
SeriellerPort = new SerialPort();
SeriellerPort.DataReceived += SerielleDatenEmpfangen;
SeriellePorts = SerialPort.GetPortNames();
Baudraten = new int[] { 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000, 500000, 1000000, 2000000 };
DataBits = 8;
StopBit = new string[] { "0", "1", "1.5", "2" };
ParityBits = new string[] { "None", "Odd", "Even", "Mark", "Space" };
if (seriellePorts.Count() > 0)
{
selectedItemPort = 0;
}
if (Baudraten.Count() > 0)
{
SelectedItemBaudraten = 9;
}
if (StopBit.Count() > 0)
{
selectedItemStopBits = 1;
}
if (ParityBits.Count() > 0)
{
selectedItemParityBits = 0;
}
COMB_Portname.ItemsSource = seriellePorts;
BTN_Verbinden.Content = "Verbinden";
}
private void SerielleDatenEmpfangen(object sender, SerialDataReceivedEventArgs e)
{
string Data = SeriellerPort.ReadExisting();
string[] Datasplit = Data.Split('\n');
SerieleDatenSpeicher.Add(Data);
Console.WriteLine(Data);
}
Ich habe schon verschiedene Baudraten ausprobiert. Es ist immer Fehlerhaft.
In einem anderen Programm hatte ich mir mal weitergeholfen indem ich besondere Zeichenketten gesendet hatte um zu prüfen ob ein Wert vollständig gesendet wurde. z.b. [A]Wert[E]
Aber jetzt würde ich doch gerne Herausfinden, woran es liegt