ich frage mich ob es eine Möglichkeit gibt Werte des Arduino (zb die Temperatur oder ein Signal eines Bewegungssensors) an den PC zu übergeben und diese dort in ein zb selbst geschriebenes C++ oder JavaProgramm zur Weiterverwendung zu implementieren…. Und wenn ja wie?
Ja, gibt es.
Für mehr Infos von uns brauchen wir mehr Input von Dir, was Du genau willst.
Welche Programmiersprache auf dem PC und welche Kenntnisse hast Du darin?
Natürlich kann man mit Java die serielle Schnittstelle auslesen. Dafür gibt es viele Anleitungen im Netz. Gerade im Zusammenhang mit Arduino gibt es auch noch Processing, das auf Java basiert und auf Visualisierung spezialisiert ist.
Ansonsten würde ich eher C# als C++ empfehlen. Aber das hängt auch von den Kenntnissen ab. Sich erst mal in .NET einzuarbeiten ist auch nicht trivial.
Ich selbst nutze dafür (von Turbo Pascal kommend über Delphi 1.0 bei FreePascal/Lazarus gelandet) die Lazarus-IDE. Pascal ist zwar nicht en vogue, Lazarus bietet aber sehr viele visuelle und nichtvisuelle Komponenten an, die sich gut einbinden lassen (direkten Datenaustausch mit /Ansteuerung von Office-Anwendungen, Datenbanken, grafische Anzeigen, Textausgaben, Serielle Schnittstellen, TCP/UDP, ...). Alles aber auch bei C++ zu haben ... Das Codieren ist z.T. leicht unterschiedlich, aber der grundsätzliche Weg zum Ziel ist in Sprachen wie objektorientiertem Pascal und C++ weitgehend gleich.
Dass das möglich ist freut mich zu lesen und jetzt hab ich schonmal einpaar Begriffe nach denen ich googeln kann.
Da in euren Antworten die Fragen aufkamen:
1.Meine Kenntnisse im Bereich Java,C++ und der Arduino-Umgebung sind eher die eines „guten Anfängers“
Meine Idee war folgende:
Auf einem Computer läuft ein Programm in einer beliebigen Programmiersprache welches zb ein Männchen zeigt. Am Computer sind Arduinos angeschlossen welche Daten von verschiedenen Sensoren(Bewegung, Temperatur Helligkeit, Geräusche) an mein Hauptprogramm auf dem PC senden/empfangen. Das Männchen auf dem PC kann nun aufgrund der „Sensordaten“ reagieren zb sich über Helligkeit und Temperatur beschweren, in die Richtung einer detektierten Bewegung schauen uvm
Die Idee einen normalen PC als „Master“ zu nutzen kam mir da eine objektorientierte Programmiersprache eher geeignet scheint mehrere Prozesse zeitgleich abzuarbeiten und auch deutlich mehr Rechenleistung und Speicher mit sich bringt.
Was denkt ihr Fachleute darüber (abgesehen davon dass es für einen Anfänger „to much“ sein könnte) ?
Das würde ich auf einen Arduino an einer Seriellen Schnittstelle beschränken.
Diese Serielle Schnittstelle würde dein PC-Programm öffnen und kontrollieren.
Im einfachsten Fall fragt das PC-Programm zyklisch, ob Daten angekommen sind und stellt das Ergebnis passend dar. Eleganter wäre, ereignisgesteuert auf eingehende Daten zu reagieren, aber das ist meist komplizierter zu realisieren und bringt eigentlich/erstmal nicht viel. Vor allem, wenn du dich eher auf die grafische Darstellung (das "Männchen") konzentrieren willst.
Zeichne ein Quadrat auf den Schirm, das schwarz ist, wenn du eine '0' auf dem SerialPort liest , weiß bei einer '1' und mach nichts bei allen anderen Zeichen.
Dann kannst du überlegen, ob du lieber die Nachrichten komplizierter machst (mehrere Zeichen, Zahlenwerte als Text, usw.) oder eher am PC nur das Männchen animierst und alles steuernde dazu auf dem Arduino passend aufbereitest. Oder beides.
Das kommt auf die Programmierumgebung an. In .NET kommt es in etwa auf das gleiche heraus. In beiden Fällen braucht man einen Event Handler. Der hat nur einen anderen Namen. Pollen ist sogar minimal aufwändiger da man noch das Timer Objekt braucht.
An ein ESP hab ich auch schon gedacht. Bisher hatte ich jedoch mit der ganz schlichten USB-Verbindung geblant und bei mehreren Arduinos eben mehrere USB-Ports?
Na ja, mit einem Timer Objekt in Windows Forms hat man sowohl direkt Zugriff auf die anderen Forms-Elemente und braucht keinen EventHandler und Delegate. (So hab ich mir jedenfalls früher mal was auf die Schnelle zusammengeschustert)
Also wünschenswert wäre wenn ich beide Möglichkeiten nutzen könnte zb der PC kann jederzeit beim Arduino nach der Temperatur fragen wenn der Bedarf besteht. Jedoch soll er dagegen auf die Werte eines Bewegungssensort sofort etwas ausführen wenn dieser Werte sendet und nicht erst irgendwann auf Abfrage reagieren.
Wenn du Reaktionszeiten deutlich unter 1 sec willst, solltest du meinen Tip mit dem Timer-Objekt vergessen und dich um Event-Handler in deinem PC-Programm kümmern.
Ok ok das klingt interessant aber ich sollte nichts überstürzen
Ich werde jetzt erstmal eine Programmiersprache suchen in der ich mein Hauptprogramm für den PC schreibe und dann ist das nächste Ziel einen Arduino über ESP sowie USB miteinander kommunizieren zu lassen. Und dann sehe ich weiter….
Der Timer löst auch nur einen Event aus (Timer.Elapsed)
Bis auf die Sache mit dem Thread-Kontext ist der Code fast identisch. Ich habe schon beides gemacht, weil ich mal Probleme damit hatte dass der Serial Event nicht zuverlässig ausgelöst hat.
Da hast du natürlich recht. Allerdings kann das Timer-Objekt und sein Eventhandler direkt mit den anderen Objekten der Form zusammenspielen, während für ein SerialEvent (jedenfalls in meiner Erinnerung) erst per delegate eine Hilfsfunktion zwischengeschaltet werden muss. Aber wenn man das einmal kapiert hat, ist es natürlich auch einfach.
Das geht auch. Wenn Dein PC aber unter Win läuft - das würfelt die virtuellen COM-Ports gern mal neu aus, was für ein Programm nicht prickelnd ist.
Außerdem hat es oft Probleme mit COMx und x > 9.