Windows Programm als Arduino Schnittstelle

Ich möchte wieder mal was bauen und zwar möchte ich Spannung regeln von einen Windows Desktop aus mit einen ganz simplen Programm.

Mein Arduino hängt an dem Rechner mit einen FTDI Adapter. Auf dem Arduino läuft ein Sketch der auf der seriellen Schnittstelle hört ob Werte rein kommen. zb. "H1-10" wenn so ein Befehl rein kommt soll der Arduino das ganze über Serial.read abgreifen und eine Aktion ausführen in diesen Fall über ein digitales Potentionmeter MCP4132 einen bestimmten Wert setzen. Das ist jetzt nicht das Problem.

Mein Problem ist es das ich keine Ahnung habe wie ich mir ein Windows Programm erstelle zb mit einem Regler 0-100% oder einen Formularauswahlfeld wo ich einen Wert wählen kann der dann etwas bestimmtes an den Com Port sendet wie wie "H1-10". Auch sollte man in diesen Programm den Com Port auswählen können an dem der FTDI hängt. Hat jemand nen Code oder irgendeinen Ansatz?

Lg Oli

Zyrusthc:
Mein Problem ist es das ich keine Ahnung habe wie ich mir ein Windows Programm erstelle zb mit einem Regler 0-100% oder einen Formularauswahlfeld wo ich einen Wert wählen kann

Das ist es was du als erstes lernen musst. Bevor anfängst dir über Kommunikation Gedanken zu machen. Da gibt es einige Möglichkeiten. z.B. .NET und C# oder C++, Java, C++ mit Qt oder auch Python und ein entsprechendes GUI Framework.

Also erst mal was aussuchen, runterladen und ein paar der Standard Komponenten lernen. Das ist nicht super kompliziert, aber wenn du noch nie ein GUI programmiert hast, bist du damit erst mal etwas beschäftigt.

Auch hier gilt wie auf dem Arduino: nicht einfach nur Code kopieren, sondern fertigen Code in den meisten Fällen nur als Anhaltspunkt nehmen und verstehen was gemacht wird! Da bei GUI Editoren wie in Visual Studio enthalten automatisch Code im Hintergrund erzeugt wird, ist es mit Kopieren sowieso nicht getan.

Dann rausfinden wie man was mit Serial sendet. Das kann man dann erst mal so machen dass bei jedem Empfang auf dem Arduino eine LED kurz aufleuchtet leuchtet. Egal was ist.
Empfangen auf dem PC ist manchmal etwas komplizierter. Hier bietet sich dann erst mal an das Empfange einfach 1:1 zurückzuschicken und anzuzeigen.

Bei der Kommunikation ist meiner Meinung nach das besten Strings zu senden, diese zu zerhacken und zu Parsen. Das nicht unbedingt das effizienteste was den Speicherverbraucht betrifft, aber am einfachsten zu programmieren.
Also in C/C++ lernen mit Funktionen wie strcmp(), strncmp(), strtok() und atoi() umzugehen.

Aber eins nach dem anderen. Wenn du noch nicht mal weißt wie ein GUI Programm programmiert wird und du auch noch nicht weißt was du genau verwendest, bringt es erst mal nichts da Code Schnippsel zu posten.

Naja ich wollte jetzt nicht für ein Programm alles lernen und wochenlang Tutorials wälzen. Am liebsten währe mir wenn man was in C oder C++ realisieren könnte.

Das geht auch in C++ mit .NET oder Qt. Aber die Klassen-Bibliothek und die gebrauchten Komponenten musst du so oder so lernen. In .NET verwenden alle unterstützten Sprachen die gleichen Klassen. Also unterscheidet sich in C# und C++ nur die Syntax etwas. Wobei C# und Java von der Syntax her beide sehr stark an C++ angelehnt sind.
Siehe z.B. hier für Serial Empfang bei einer Konsolen Anwendung

Da kannst du beides vergleichen. Sind genau die gleichen Aufrufe mit geringfügig anderer Syntax. Wenn man .NET verwendet würde ich eher C# als C++ empfehlen.

Du musst also nicht die Grundlagen neu lernen (anders als z.B. in Visual Basic oder Python, die beide eine grundlegend andere Syntax haben). Aber darum dich mit den entsprechenden Klassen/Bibliotheken auseinanderzusetzen kommst du nicht herum. Egal was du verwendest.
Und halt in so grundlegende Dinge wie Event Handling. Also das immer wenn etwas gemacht wird ein Event ausgelöst wird und du dich darin mit einem Handler einklinkst um darauf zu reagieren. Das unterscheidet sich in den Details von Sprache zu Sprache etwas, aber .NET, Qt und Java haben alle Event Loops. Das Vorgehen ist also grob gleich.

Processing ist noch eine Option und speziell auf den Arduino zugeschnitten:

Das ist aber letztlich auch nur eine angepasste Version von Java. Wird oft empfohlen, aber hat seine echten Stärken bei der Visualisierung von Daten (dafür wurde es entwickelt).

Aber egal was, du musst lernen wie du mit bestimmten Klassen und Methoden umgehst. Genauso wie wenn du auf dem Arduino was neues machst.

Hallo!

...und wenn du nicht "bei Null" anfangen willst, gäbe es eventuell auch noch ein paar andere Optionen - vielleicht ist da was für dich dabei:

SerialComInstruments
Daten von der seriellen Schnittstelle einfach visualisieren und einen µC steuern.
Schnell einsatzbereit ohne grossen Overhead und lange Einarbeitung.
http://serialcominstruments.com/instrument.php

Arduino Dashboard
Ein PC Frontend für den Arduino. Messwerte graphisch anzeigen und Pinstatus mit der Maus kontrollieren.
http://www.mathias-wilhelm.de/arduino/projects/arduino-dashboard/

Proview
Software für Linux. Arbeitet auch mit Arduino zusammen.
http://www.proview.se

Gruß
Udo

Hallo,

Ich würde dir .Net mit C# empfehlen. Als Oberfläche WPF da kommst du am schnellsten zum ziel. Mit Visual Studio Comunity hast du auch eine super IDE die dir das ganze erleichtert. Allerdings muss ich meinen Vorrednern recht geben. Ohne lernen der Syntax und kleiner Eigenheiten wirst du nicht weit kommen. Da gibt es aber auf YouTube sehr gute Videos für. Ich Poste sie dir wenn ich heute Abend wieder daheim bin. Ich dürfte sogar noch was da haben, das schicke ich dir dann gleich zum anschauen mit.

Mfg
His

Hallo zusammen. Also der Tip von uxomm mit SerialComInstruments war schon mal sehr Wertvoll damit konnte ich innerhalb weniger Stunden Eine Oberfläche erstellen und einen Sketch schreiben der es möglich macht über einen Regler und Anzeige in SerialComInstruments das Digitale Poti zu steuern. Vom Prinzip her funktioniert das so erfordert aber halt eine Installation von diesen Programm sowie jedes mal Laden des Projekts. Ideal währe wenn man das Projekt als Standalone exportieren könnte

Ich sucher immer noch weiter nach einen Simplen Programm. Halt mit Regler oder AuswahlForm,Anzeige und einen Comportwähler.

Versteht mich nicht falsch als wenn ich zu faul währe mich hinzusetzen und was neues zu lernen. Leider ist meine Tochter seid Februar schwerst behindert das ich nicht die Zeit und Ruhe finde mich in solch komplexes neues Einzuarbeiten und viele Versuche zu machen.

Lg Oli

Da wirst du um einen Entwicklungsumgebung nicht herumkommen. Und die Arbeit wirst du dir sicher selber machen müssen. Was spricht gegen eine Konsolenausgabe fürs erste und du liest dich zeitgleich mal in .Net/C# ein?

Einen leichten Einstieg findet man auch in PureBasic, bis zu einer gewissen Zeilenanzahl/Codegröße ist PB auch kostenlos. Vielleicht einfach mal parallel hier im Anfängerbereich fragen, ob jemand den passenden Code entwickeln und teilen würde.

Wenn man sich damit auskennt ist das meiste relativ simpel. Du bist Anfänger, deshalb ist das für dich eine größere Hürde. Das ist schon klar. Der Anfang ist bei vielen Dingen nicht ganz einfach. Daran führt aber auch kein Weg vorbei. 100%ig flexibel sein und einfach mal so Dinge schnell zusammenschreiben ohne sich auszukennen beißt sich. Selbst wenn dir jemand halbwegs fertigen Code gibt, musst du diesen immer noch verstehen und für deine Zwecke anpassen.

C# bietet sich meiner Meinung nach auch an weil man keine grundlegend andere Syntax als C++ lernen muss. Und zu .NET/C# gibt es vor allem für WindowsForms zig Beispiele und Anleitungen.
Visual Studio gibt es in der Express Version kostenlos.

Es gibt aber schon einige Fallstricke. Beispiel Slider. Man kann natürlich den Slider Event abfragen (in .NET heißen die Dinger genau genommen Trackbar), aber dann hat man für jede Bewegung einen Event - auch für Zwischenschritte. Das hat bei mir nicht zufriedenstellend funktioniert. Was allerdings sehr schön funktioniert ist einen Timer zu starten der alle 300ms oder so abfragt ob sich Slider geändert haben. Dann setzt der eigentliche Slider Event nur ein Flag ob sich was geändert hat und das fragt man im Timer Event ab.

Das läuft bei mir mit 250000 und sogar 500000 Baud in beide Richtungen:

Wenn man sich auskennt, ist alles simpel.

Ich mache sowas mit Delphi, gibt es aber normalerweise nicht für Lau.
Außerdem müsstest du die Pascal Syntax lernen.

Denke deshalb auch das C# das Richtige ist.

Hallo,

https://processing.org geht dafür nicht? Ist zumindestens an die Einfachheit der Arduio Programmierung angelehnt und läuft wegen Java auf jeden Betriebssystem.

Natürlich geht es, aber sooooo viel einfacher ist es nicht unbedingt. Ja, die Syntax der API ist identisch zum Arduino, aber wenn man auf dem Arduino schon keine Kommunikation zum Serial Monitor programmieren kann - womit viele Leute Probleme haben - ist die Kommunikation auch nicht viel einfacher.

Wo Processing richtig auftrumpft ist bei der Visualisierung von Daten. Dafür wurde es entwickelt und hier hat man zig fertige Sachen die man sich in anderen Umgebungen erst mühsam per Hand erstellen muss.
Aber was Kommunikation an sich betrifft ist der Unterschied nicht extrem. Was ich sehen kann, wird das Event Handling gegenüber Standard Java vereinfacht. Das kann als Anfänger besser sein, aber der Riesenvorteil ist es nicht.

Was gut ist ist dass es viele speziell auf den Arduino zugeschnitte Beispiele gibt. Das ist natürlich ein Plus Punkt. Aber auch irgendwo unnötig wenn man es näher betrachtet. Ein Arduino Programm dass mit einem Processing Programm kommuniziert, kann auch mit einem anderen Programm kommunizieren wenn das Übertragungs-Protokoll identisch ist. Man muss als "nur" wissen wie man auf dem Arduino Daten empfängt und durch einen Parser bearbeitet, und wie man auf dem PC Daten sendet. Dafür reichen zwei getrennte Anleitungen.

Ich sage nicht dass Processing schlecht ist, aber abgesehen vom Beispiel Code vielleicht, ist es nicht die super Lösung für das es manchmal verkauft wird. Sicherlich auch etwas Geschmackssache.

Ich mache sowas mit Delphi, gibt es aber normalerweise nicht für Lau.

Hmmm. Schau mal hier. Lazarus

Hallo,

hmm, dieses "Lazarus" sieht interessant aus, verwendet das hier jemand aktiv? Gibt es deutschsprachige Literatur bzw. ein Forum?

Christian

Da Lazarus plattformunabhängig ist, ist hier die wichtigste Frage, wie gut das LazSerial Paket ist.

( Wenn man es überhaupt mag, dass die 2 Welten PC / Arduino auch syntaktisch sehr verschieden sind. )

Ich benutze Lazarus nicht mehr. Damals war es aber eigentlich nicht schlecht. Inzwischen Arbeite ich mit .Net/C#. Vor allem die neue Visual Studio Community Edition macht es seit letzter Woche echt angenehm für Neueinsteiger/Umsteiger. Ich persönlich nutze zwar Professional aber die CE steht der Professional fast in nichts nach.

Hiswif:
Vor allem die neue Visual Studio Community Edition macht es seit letzter Woche echt angenehm für Neueinsteiger/Umsteiger.

Mhh, das ist sehr interessant. Das unterstützt auch Plugins (anders als Express), d.h. damit sollte auch Visual Micro laufen.

Hallo,

hmm, so wirklich begeistern kann mich MS diesbezüglich nicht. Vor einigen Monaten habe ich mal ein wenig probiert mit diesen .net IDEs, damals noch die Express Versionen. Also irgendwie hat mich das total enttäuscht für kleine Projekte. Zuerst einmal ist alles riesig aufgebläht und selbst auf MS Betriebssystemen reichlich inkompatibel. Selbst auf Windows7 32bit ließ sich die aktuelle Software nicht installieren, Systemvoraussetzung: Windows8.x :smiling_imp: Und an Linux, z.B. RasPi darf man damit nicht einmal denken :blush:

Genau deshalb bin ich auf der Suche nach einer kleinen, schlanken IDE für kleine Projekte. Soll halt übersichtlich, fein und kostenlos sein, speziell auch für nicht-Profis verwendbar. Und es soll ein lebendiges Forum geben in dem einen so wie hier so hervorragend auf die Sprünge geholfen wird wenn man mal "auf dem Schlauch steht"

Ob das jetzt Pascal, eine Variante con C oder gar Basic ist betrachte ich erst mal nicht so wichtig.

Christian

Da bringst du aber zwei Sachen durcheinander. Die IDE ist anpassbar. Man kann da die Toolbars und Menüs auch etwas verschlanken.

.NET ist aber nicht mehr so Plattform-abhängig wie es mal war. Es gibt Mono für Windows, Linux und Mac:
http://www.monodevelop.com/
http://www.mono-project.com/
Hat auch seine eigene IDE die schlanker als VS ist

Und gerade bei .NET findest du sehr viel Hilfe. Schon alleine mit Google, z.B. bei StackOverflow. Dazu gibt es noch eine wirklich gute Dokumentation bei MSDN mit sehr viel Beispiel Code.

Was mich bei WinForms etwas stört ist dass einige der Komponenten etwas primitiv sind. Ich wollte z.B. eine Listbox bei der man nur ein sichtbares Element hat und das aktuelle Element mit dem scrollen ausgewählt wird. Da muss man sich dann gleich eine Klasse davon ableiten und 50 Zeilen Code schreiben. Habe ich zum Glück fertig gefunden.
Noch etwas unschöner war, als ich in einer CheckedListBox den Abstand der Elemente erhöhen wollte. Das Font.Height Property dazu gibt es, aber es ist nicht sichtbar. Also wieder Klasse ableiten für eine Zeile Code...
Und nachdem die aktuelle Entwicklung eher in Richtung WPF geht, wird das auch nicht besser werden. Andererseits kann man alles anpassen wenn man den Code dafür findet. Und es gibt auch zig fertige Komponenten zum runterladen.