Ich möchte eine automatishe Destillerie für ein Labor in meiner Arbeitsstelle bauen.
Ich habe ein Arduino uno gekauft un bin... sagen wir mal kanpp über dem "Blink" hinaus. :~
Mein Ziel wäre es, Über Visual basic die Auswertung von Sensordaten mit anschließender Anzeige auf ein Bedienfled zu verwirklichen, Der Arduino soll einfach Z.B. einen PT 1000 auslesen können bzw. ein Relai (Bistabil) (über die Verstärkerschaltung lt. Playground) ansteuern können.
Könntet ihr mir zeigen, wie ich dem Arduino uno dazu bringe, bei einem Signal von VB ein Port einzuschalten bzw. ständig (z.b. im Halbsekundentakt) den Wiederstand eines PT1000 auszulesen und VB dessen Daten auszuwerten?
Das Beispiel da musst du auch nicht 1:1 abschreiben. Es reicht wenn du nach dem Instantiieren der Klasse PortName (z.B: "COM5") und BaudRate definierst (oder du machst beides gleich im Konstruktor) und danach serialPort.Open() machst.
Ist dann auf dem Arduino auch nicht anders als wenn du was vom SerialMonitor auswertest. Die SerialPort Klasse hat einen DataReceived EventHandler für den Empfang:
Du kannst dir dann erstmal die Beispiele zur Serial Klasse anschauen. z.B. was vom Monitor per Hand schicken und zurück senden um zu sehen wie das funktioniert.
Wie gesagt die Beispiele und Dokumentation zur Serial Klasse anschauen (die sind auch in der Arduino IDE unter Datei -> Beispiele):
Von den Beispielen unter 4. Communication ist da SerialEvent sehr relevant
Wie genau das aussehen muss hängt von deinem Kommunikations-Protokoll ab. Du kannst z.B. zwei Bytes schicken:
Pin Nummer | Zustand
Dann ist 12 | 1 -> Pin 12, High
12 | 0 -> Pin 12, Low
In diesem Fall würdest du dann auf if(Serial.available >= 2 abfragen) und dann zwei mal Serial.read() machen. Dabei beachten, dass wenn du auf dem SerialMonitor (unter Tools) etwas eingibst das in ASCII geschickt wird. In VB kannst du auch Binär-Daten versenden, d.h. 0 ist dann auch 0 und nicht 48 ('0' hat den ASCII Code 48).
Generell bietet sich da das "Kommando | Daten" Format. Im ersten Byte die Aktion definieren. Und in den weiteren Bytes die benötigten Daten schicken wenn gebraucht. Wenn nur ein Pin gesteuert werden soll, kannst du für "Relais ansteuern" eine "1" schicken (statt der 12), und dann mit "2", "3", etc. etwas anderes machen.
Fang mal an einfach die Daten die du empfängt über Serial.println() wieder zurückzuschicken. z.B.:
Würde für den Anfang vielleicht erstmal in eine Richtung anfangen, vom Arduino zum PC.
Der Arduino muss hierfür ja lediglich regelmäßig Daten über den seriellen Port verschicken und VB kann die Daten dann auswerten und anzeigen.
Lasse mir so auch die Temperatur anzeigen, in die umgekehrte Richtung hab ich es noch nicht probiert aber wenn du erstmal so weit bist sollte das dann auch kein Problem mehr sein
Das kannst du anfangs auch erst mal auf dem SerialMonitor anschauen. Danach verwendest du in deinem .NET Program den DataReceived Eventhandler um das auf einer Komponente anzuzeigen.
Wenn du VB nicht kannst, dann fang am besten erst gar nicht damit an. Nimm C#. Das ist wesentlich besser und die Syntax ist ähnlich zu C/C++. Beides ist .NET, daher sind die Klassen und Tools gleich.
Wieso heute noch Leute VB verwenden ist mir ein Rätsel. Die Syntax ist einfach grauenhaft vorsintflutlich und schlecht lesbar
Ist halt die Frage wie gut es funktioniert. Nur weil da was rauskommt, heißt das nicht dass die Werte korrekt sind. Gerade was die Linearität und den Messbereich betrifft. PT1000 Messverstärker sind nicht ganz trivial was man so sieht. Die enthalten meistens eine Konstantstromquelle und einen Differenzverstärker.
Das geht mit C# genauso. Sogar mit dem gleichen Program(!):
also ich habe es mit einem geeihchtem Labormessgerät nachgemessen und (zumindest dei RT) mit einem kleinen "Kalibrierfaktor" auf exakt dasselbe Ergebnis gebracht.
Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
Dim sp As SerialPort = CType(sender, SerialPort)
Dim indata As String = sp.ReadExisting()
Console.WriteLine("Data Received:")
Console.Write(indata)
End Sub
{ } gegen "Next" "End While" und änhliche Schlüsselworte
" Dim i As Integer " gegen " int i;"
C++ und C# sehen ähnlich aus, sind aber unterschiedlich.
C# und VB sehen unterschiedlich aus, sind aber dasselbe.
Manche finden es leichter, wenn wenigstens vieles gleich aussieht.
Andere finden es leichter, wenn es gar keine Verwechslungen gibt.
Du kannst auch auf dem PC in c++ programmieren, Gratis mit einem gnu - C++ Compiler ( davon würde ich aber dringend abraten )
Ein Hinweis:
Ich hab noch von keinem gehört, der mit C# angefangen hat und irgendwann auf VB gewechselt ist. Umgekehrt schon.
Serenifly:
Wenn du VB nicht kannst, dann fang am besten erst gar nicht damit an. Nimm C#. Das ist wesentlich besser und die Syntax ist ähnlich zu C/C++. Beides ist .NET, daher sind die Klassen und Tools gleich.
Wieso heute noch Leute VB verwenden ist mir ein Rätsel. Die Syntax ist einfach grauenhaft vorsintflutlich und schlecht lesbar
Ich würde das Wort "wesentlich" streichen und "schlecht lesbar" durch "nur für Leute, die nicht davon loskommen" ersetzen, aber sonst Serenifly recht geben...
Atvilar:
Kann ich da auch Forms erstellen?
Es ist dasselbe ...
TUT soll Tutorial heissen?
Wenn du schon VisualStudio Express hast und beim Suchen msdn nimmst, siehst du, dass Beispiele meist in beiden Sprachen geliefert werden.
Natürlich geht das. Das ist wie gesagt das gleiche Tool und beides ist .NET. Die benutzten beide die gleichen Klassen. Deshalb gibt es auf MSDN bei jeder Klasse Beispiel Code in allen unterstützten Sprachen.
Du wählt lediglich beim Erstellen des Projekts die Sprache aus. File -> New -> Project -> Visual C# -> Windows Forms Application
Anleitungen gibt es auch bei MSDN:
Oder einfach nach "C# WindowsForms" googeln. Da gibt es zig Seiten
Wie gesagt ist C# nicht C++. Die Sprache funktioniert mehr wie Java, d.h. Just In Time compilation, Byte Code, Garbage Collector, etc. Aber das ist für dich weniger relevant. Es sollte halt einfacher sein die Sprachen zu lernen wenn du nicht auch gleichzeitig zwei völlig unterschiedliche Schreibweisen lernen musst.
Am besten du fängst erst mal auf dem Arduino an und schickst Daten an den SerialMonitor, d.h. ohne ein eigenes GUI. Du kannst den SerialMonitor auch dazu verwenden Daten an den Arduino zu schicken. Wenn das funktioniert, kannst den den SerialMonitor durch das GUI ersetzen. Dadurch hast du nicht zwei Baustellen zur gleichen Zeit.
Also ich fand VB immer einfacher, eben weil mehr Wörter verwendet werden anstatt nur irgendwelche Zeichen. Dadurch ist der Programmcode leichter zu lesen. Ist C# nicht nur was für Schreibfaule?
Kenne jetzt die Unterschiede nicht im Detail, aber irgendeine Daseinsberechtigung hat VB doch auch oder nicht?