Ansteuerung einer LED-Kette mit dem QM Graphical Modeling Tool umgesetzt

Hallo,
ich beschäftige mich seit einiger Zeit hobbymäßig mit dem Arduino.
Dazu musste ich auch anfangen, mich mit C-Programmierung zu befassen.
Auf der Suche nach Programmieranleitungen stieß ich auf das QM Graphical Modeling Tool von Quantum Leaps.
Es ist zwar ungewohnt und schwierig, aber dafür bekommt man eine ziemlich strukturierte Programmierung hin.
Nach einigen Anstrengungen habe ich es damit geschafft, eine LED-Kette über eine Android-App anzusteuern.

Das will ich der community vorstellen, in der Hoffnung, dass vielleicht noch einige mehr dieses Tool benutzen, wovon ich dann wiederum lernen kann.
Sachliche Hinweise und Kritiken sind erwünscht.

Die App, das Model plus weitere Informationen habe ich bei Github hochgeladen:

Man benötigt also:

die Online-App-Ide MIT App Inventor 2

http://appinventor.mit.edu/explore/get-started.html

die Arduino IDE 1.8.x

das QP-nano 5.8.2 for Arduino framework

und das QM Graphical Modeling Tool 4.0.1
http://playground.arduino.cc/Code/QP

die LED libaries von Nick Gammon

Beschreibung:

LEDviaApp - Ansteuerung einer RGB-LED-Kette mit dem Arduino UNO über Bluetooth

durch eine Handy-App

Hardware: Samsung Galaxy S5, HC-06 Bluetooth-Modul, Arduino UNO,

2m 120 LEDs WS2812B 5050 RGB Stripe mit WS2811 Controller

Besonderheiten:

Die Datenübertragung und die LED-Ansteuerung dürfen sich nicht überschneiden.

Die Prozesse müssen abwechselnd ablaufen.

Da der Sketch, aufgrund der Ansteuerung der langen LED-Kette, nicht jederzeit bereit für den Datenempfang ist, wird ein zeitgetriggertes Handshake benutzt.

Ein Interrupt-getriggertes Handshake würde wiederum die LED-Ansteuerung stören.

Die Benutzung von Slidern, welche bei Betätigung permanent Werte übertragen, funktioniert selbst mit Handshake nur stark verzögert. Daher wird erst beim Loslassen der Tasten übertragen.

Um den Sketch über das QM™ Graphical Modeling Tool zu generieren, müssen sich die Dateien der folgenden libraries im Sketch-Verzeichnis befinden:

%Arduino-Installationspfad%\Arduino\hardware\arduino\avr\libraries\SPI\src

Hier ein Demo-Video LEDviaApp -prototyp- - YouTube

Bin mal gespannt, ob und welche Reaktionen oder Anregungen von Euch kommen.

orje:
... QM Graphical Modeling Tool ...

Als ich mit dem Arduino anfing, ging es mir vor Allem darum, mit den einfachsten und am besten verfügbaren Mitteln arbeiten zu können. D. h. Simpelst-Texteditor, avrdude und Makefiles waren meine Freunde. Und die Doku der avrlibc natürlich.

Allerdings weiß ich auch, was für angenehme Features spezielle Tools bieten (z. B. „Code-Folding“).

Was das Programmieren angeht, stehe ich auf eher simple Werkzeuge, weil ich damit wahrscheinlich kaum in irgendeine Abhängigkeit von einem Softwarehersteller gerate.

Gruß

Gregor

gregorss:
Abhängigkeit

Ja, darauf bin ich auch schon gestoßen. Eine Abhängigkeit für mich von dieser Software besteht z.B. schon darin, dass nur der UNO unterstützt wird und ich meine LED-Ansteuerung mit einem MICRO umsetzen wollte.
Irgendwann werde ich also gezwungen sein, herauszufinden, wie ich den MICRO in die Umgebung integriere.

Ich würde eher empfehlen, programmieren zu lernen.

Gruß Tommy

Tommy56:
programmieren ... lernen.

Ich hatte den Sketch vorher mit der Arduino-Ide und mit MS Visual Studio programmiert. Und obwohl ich versucht habe, ihn mit Funktionen zu strukturieren, fand ich es unübersichtlich (wohlgemerkt, ich bin Anfänger).
Das Modeling Tool ist eine Mischung aus beidem. Die states und transitions zeichne ich, deren Inhalte programmiere ich.

Ich weiß nicht, ob hier jemand das Modelling Tool nutzt. Ich nicht.

Ausgehend von der "Vielzahl" der Antworten, drängt sich der Verdacht auf, dass Du damit hier evtl. allein stehst und Dir damit wohl auch allein helfen mußt.

Gruß Tommy

Tommy56:
allein stehst und ... allein helfen mußt.

Tja, es beschleicht mich auch so langsam das von Dir genannte Gefühl.
Die meisten Leute scheinen eher pragmatisch zu sein.
Mein Interesse an mehr strukturierter und genormter Programmierung (für sich selbst und andere nachvollziehbare Programme) kommt aus meinen beruflichen Erfahrungen als industrieller Instandhalter/Inbetriebnehmer/Optimierer, wo aufgrund mangelnder Finanzen und Zeit und dem Umstand, dass viele Programmierer sich selber am eigenen Haarschopf aus dem Sumpf ziehen müssen, nicht selten unvorteilhafte Programme entstehen. Dann sind sie irgendwann weg und ich und meinesgleichen versuchen die Scherben aufzukehren.
Gleichzeitig sehe ich auch Programme, bei denen sich wunderbare Gedanken gemacht wurden, um eine erkennbare logische Struktur umzusetzen. Diese Programme sind weniger fehleranfällig und für mich (und meinesgleichen) besser anpass- und wartbar.
Beruflich habe ich mit SPS zu tun, welche an sich schon von Grund auf strukturierter sind, gegenüber den uferlosen Möglichkeiten von embedded Systemen, wie dem UNO, was diese Sache noch spannender, aber eben meiner Meinung nach noch viel notwendiger macht, strukturiert zu programmieren.
So war ich ganz enthusiastisch, über finite state machines auf das Quantum Leaps' QP™-nano active object framework und dem QM™ modeling tool gestoßen zu sein.
Aber wie Du und ich offensichtlich feststellen müssen, bin ich einsam und alleine damit in der Arduino-Welt :frowning:
Zum Glück betreibe ich es nur als Hobby, habe also Zeit.

Wobei ich ein graphisches Modellierungstool eher nicht als durchdachte systematische Programmierung betrachten würde, sondern eher als Krücke für Leute, die nicht richtig programmieren lernen wollen.

Gruß Tommy

Tommy56:
graphisches Modellierungstool kein durchdachte systematische Programmierung

Ich habe das wohl nicht deutlich genug beschrieben: Das Modeling Tool setzt "nur" auf dem QP-nano for Arduino framework auf. Im letzteren verbirgt sich die Programmierungsstruktur, welche man auch alleine benutzen kann. (Dazu bräuchte ich dann allerdings Kenntnisse über den Umgang mit den von gregorss erwähnten avrdude und Makefiles). Das Modeling Tool dient dann eher der Abstraktion und Übersichtlichkeit.
Hast Du Dir das mal angeschaut? Arduino Playground - QP-nano framework

Tommy56:
nicht richtig programmieren lernen wollen

Was verstehst Du darunter? Ich z.B., habe mir verschiedene Bücher gekauft (u.a. Kernighan & Ritchie - C Programming Language 2, Prata - C Primer Plus Sixth Edition). Es sei mal außer Acht gelassen, wie weit und wie viel ich davon durch einfaches Lesen und durcharbeiten verstanden habe. Aber in den Büchern lerne ich doch "lediglich" die Elemente der Sprache kennen und das man Lösungen in Funktionen gliedern soll und bei größeren Programmen auch Lösungen in eigene Header- und Code-Dateien auslagern soll.

Ich muss noch mal erwähnen, dass ich kein gelernter Programmierer bin und deshalb nicht z.B. innerhalb eines Studienganges systematisch an die Materie herangeführt wurde.
Daher meine Suche nach Hinweisen zum strukturellen Aufbau von Programmen, welche über die reine Erlernung der Sprachelemente hinausgeht.
Vielleicht hast Du dazu ja ein paar Tipps?!

Generell versucht man durch Divide and Conquer ein Problem in viele kleine Teilprobleme zu gliedern, diese dann zu einzeln zu implementieren und als Ganzes zusammen zu bauen.

Dadurch erreicht man - wenn man es richtig macht - im normal Fall deutlich überslichtlicheren und auch strukturell gegliederten Code.

Praktisch heißt das:
Wenn du einen komplexen Algorithmus hast zerteilst du ihn in seine einzel Funktionen
z.B eine Funktion die dir einen String in seine Token zerlegt und diese zurück liefert anschließend eine Funktion, die die Token entgegen nimmt und syntaktisch analysiert.
Zu letzt eine Funktion die die Token interpretiert. Zusammengebaut hast du dann einen Algorithmus der auf bestimmte Befehle hin bestimmte Dinge erledigen kann.

Bei der ganzen Sache versucht man seine Funktionen so klein wie möglich zu halten.

Was der Verständlichkeit weiter hilft sind ausführliche Kommentare an komplexeren Stellen mit Erklärung was was machen soll usw.

Danke, für die Antwort. Nach dem Erlernen der Programmiersprachelemente ist Divide and Conquer eine der grundlegenden Strukturierungstipps, welche ich finden und nachvollziehen kann. Das machen auch die meisten Programmierer. Dennoch kommt es zu Fehlern bei komplexen Programmen, da der Überblick verloren geht. So erlebe ich es jedenfalls bei der Arbeit (Fehlersuche/Optimierungen/Änderungen). Und da finde ich eben die "einfache" Gliederung in Teilfunktionen, welche dann intern vielfach miteinander verknüpft sind, um die vielen auftretenden Möglichkeiten abzubilden, unübersichtlich und fehleranfällig.
Und ich sehe, dass Firmen, welche sich intern auf eine Programmierstruktur einigen, welche alle Programmierer benutzen, deutlich stabiler sind. Ich rede dabei von der SPS-Welt.
Daher war ich analog dazu in der embedded C-Welt froh, auf ein framework, wie das von Quantum Leaps zu stoßen. Natürlich erfordert das Einarbeitungszeit und schafft eine Abhängigkeit.