Guten Tag an alle,
als Neuling möchte ich mich erstmal vorstellen. Ich habe mein Techniker in Elektrotechnik absolviert und bastel sporadisch mit dem Arduino.
Nun habe ich ein größeres Projekt was einen Arduino Mega als Micro Controller und ein Raspberry Pi als Prozessor beinhaltet. Als Anzeige bzw. Eingabegerät soll das Orginal Raspberry Pi LCD montiert werden.
Für die GUI möchte ich Qt Designer verwenden. Habe aber damit noch nie gearbeitet. Meine programmier Kenntnisse ist zwischen Anfänger und
Fortgeschrittene. Also bitte habt Nachsicht.
- Würdet ihr mir empfehlen den Programmcode in Python zu schreiben und Serial auf den Controller zu zugreifen? Oder in C über Qt creator?
- Ich habe mir ein YouTube Video angeschaut wie ein analog Wert Serial im Qt Creator eingelesen und angezeigt wird. Leider ist der Programmcode zu kompliziert. Bräuchte also irgendwie eine einfache Lösung. Hoffe das klingt nicht zu faul!
- In Python kann man ja mehrere Programme parallel laufen lassen. Werden dann die Befehle auch parallel vom Arduino ausgeführt oder nur Zeilenweise als wenn ich auf dem Arduino den Programmcode habe?
Grüße und danke schon mal!
Neuling braucht allgemeine Hilfe
Du verraetst nicht besonders viel ueber deine eigentliche Aufgabe. Das ist oft nicht so sinnvoll, denn jetzt sollen wir Stellung nehmen zu lauter Detail-Ideen, die du hast, obwohl du ja selbst sagst - du weisst gar nicht so recht, was du eigentlich brauchst. Vielleicht ist es viel besser, ganz andere Technologien und Vorgehensweisen zu nutzen.
Es kennt auch keiner dieses ominoese YT-Video. Darum kann man auch keine Stellung dazu beziehen, und die Frage beantworten, ob das nun besonders komplizierter Code waere, der ggf. einfacher zu gestalten ist.
Meinen Verdacht kann ich aber auessern: nein. GUIs haben eine Eigenschaft, die fast jeder Anfaenger grundlegend missversteht: sie arbeiten strikt Ereignisbasiert. Man gibt die Kontrolle an eine Hauptschleife ab (app.exec_() bei Qt), und danach wird aller Code nur noch durch Rueckrufkationen zB von Button-click-Signalen oder Timern aufgerufen. Und darf zB auch keine while-Schleifen enthalten, die dann die weitere Ereignisbearbeitung blockieren. Das jetzt mit einer asynchronen Kommunikation von einer seriellen Schnittstelle zu verheiraten hat halt eine gewisse Komplexitaet.
Ein viel einfacherer Ansatz waere zB pygame. Denn da schreibt mat die Hautpschleife selbst, und dann ist das von der Programmierung eher so wie auf dem Arduino.
Deinen letzten Satz verstehe ich nicht.
Es kennt auch keiner dieses ominoese YT-Video. Darum kann man auch keine Stellung dazu beziehen, und die Frage beantworten, ob das nun besonders komplizierter Code waere, der ggf. einfacher zu gestalten ist.
Meinen Verdacht kann ich aber auessern: nein. GUIs haben eine Eigenschaft, die fast jeder Anfaenger grundlegend missversteht: sie arbeiten strikt Ereignisbasiert. Man gibt die Kontrolle an eine Hauptschleife ab (app.exec_() bei Qt), und danach wird aller Code nur noch durch Rueckrufkationen zB von Button-click-Signalen oder Timern aufgerufen. Und darf zB auch keine while-Schleifen enthalten, die dann die weitere Ereignisbearbeitung blockieren. Das jetzt mit einer asynchronen Kommunikation von einer seriellen Schnittstelle zu verheiraten hat halt eine gewisse Komplexitaet.
Ein viel einfacherer Ansatz waere zB pygame. Denn da schreibt mat die Hautpschleife selbst, und dann ist das von der Programmierung eher so wie auf dem Arduino.
Code: Alles auswählen
while True:
if serial_connection.is_waiting:
data = serial_connection.read()
mach_was(data)
for events in pygame.process_events(): # so in etwa
....
update_display()
Zum letzten Satz: wirkliche Parallelität gibt es kaum, und das ist auch ein sehr schwieriges Thema.
Ein Arduino ist nur ein Kern, also kann da garantiert nichts parallel laufen.
Wir kennen auch nicht den Code, der da laufen soll, aber sagen wir mal, das läuft zeilenweise.
Ein Arduino ist nur ein Kern, also kann da garantiert nichts parallel laufen.
Wir kennen auch nicht den Code, der da laufen soll, aber sagen wir mal, das läuft zeilenweise.