visual studio und arduino digital signal lesen

Moin

ich suche seit Ewigkeiten ein beispiel Code um vom arduino daten senden zu visual studio. und gestern habe ich was gesehen.. und das genau brauche ich https://www.youtube.com/watch?v=c7jIb6q83_g

kann mir jemand helfen??

mein Programm schickt daten zum arduino das funktioniert, ich kann auch via serialprint sehen was ich was bekomme.. nur weiß ich nicht wie ich die abfrage machen soll in visual damit eine funktion entsteht, so wie beispiel im video wenn ein PIN auf High gesetzt wird.

danke schon mal im voraus..

Mfg

Trino

Visual Studio ist lediglich eine Entwicklungsumgebung, keine Programmiersprache. Ohne Kenntnisse wäre Processing einfacher zu verstehen und es gibt viele Beispiele im Bezug auf Arduino.

http://www.processing.org/

Mit der SerialPort Klasse: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport%28v=vs.110%29.aspx

Dann musst du den empfangenen String am PC Parsen. Das ist keine große Sache

Zwei Anmerkungen dazu: 1.) Du kannst nicht von einem anderen Thread direkt auf das GUI Thread zugreifen. Das gibt Mecker. Statt dessen musst du mit BeginInvoke() und einem Delegate arbeiten.

z.B. hier für C# und eine Richtextbox namens "communicationOutput"

      public void TextBoxPrint(string text)
      {
         if (communicationOutput.InvokeRequired)
         {
            communicationOutput.BeginInvoke((MethodInvoker)delegate
            {
                communicationOutput.AppendText(text);
            });
         }
         else
         {
               communicationOutput.AppendText(text);
         }
      }

Oder ein Label:

      private void UpdateLabel(Label label, string text)
      {
         if (label.InvokeRequired)
         {
            label.BeginInvoke((MethodInvoker)delegate
            {
               label.Text = text;
            });
         }
         else
            label.Text = text;
      }

2.) Der DataReceived Event Handler ist manchmal ekelhaft unzuverlässig. In einer Anwendung hatte ich damit keine Probleme. Aber in einer anderen war er extrem schlecht und hat nicht immer ausgelöst. Dann kam es zu langen Verzögerungen.

Die Lösung ist einfach einen Timer zu starten und den Puffer zu pollen:

private System.Timers.Timer timer;

timer = new System.Timers.Timer(100);
timer.Elapsed += DataReceived;
timer.Start();

Das ruft alle 100ms die entsprechende Methode auf

Dann der eigene Event Handler:

      private void DataReceived(Object source, ElapsedEventArgs e)
      {        
         try
         {
            while (_serialPort.BytesToRead > 0)
            {
               string str = _serialPort.ReadLine();

               //hier was mit dem Text machen. z.B. an eine Parser Methode übergeben
            }
         }
         catch(Exception ex)
         {
               //z.B. Ausgabe von Fehlermeldungen
         }
      }