Unsere Seiten zu C/C++ Programmierung, sowie darauf basierender Stile
 
Inhalt:
 
Motivation bzw. Hintergrund
USB-Experimente mit C++
Lego Roboter (Lego Mindstorms & Co.) Übersicht
 
Motivation bzw. Hintergrund
 
Programmatisch sind C und eingeschränkt auch C++ meine Ursprünge, wenn es um Computersprachen geht. Dabei muss ich klar sagen,
daß ich kein Programmierer war und bin! Die hier vorgestellten Codebeispiele entstammen Alltagsproblemen und sind unser Ansatz
diese programmatisch zu lösen. C bzw. C++ nutze ich heute eigentlich nicht mehr, einzige Ausnahme bildet hier die IDE von RobotC (zu der
IDE später mehr), die ich zum Programmieren unserer älteren Lego Roboter einsetze. Wie auch bei den anderen hier vorgestellten
Programmierseiten verzichte ich bewusst auf eine umfangreiche Einführung, da ich der Ansicht bin, dass andere Seiten bzw. Autoren das
deutlich besser können und i. d. R. auch mehr Hintergrundwissen als ich vermitteln. Um meine Projekte/Problemstellungen nachvollziehen
zu können, möchte ich an dieser Stelle jedoch kurz skizzieren, wie ich arbeite und daher das allseits bekannte "Hallo Welt" auch in
C++ demonstrieren.
 
Während die unten aufgeführten Codebeispiele älter sind und auch vor allem mit anderen Visual Studio Versionen entstanden sind, erfolgt
das Beispiel mit der sogenannten Community Version, von Visual Studio 2019. Inzwischen ist auch diese Version überholt, weshalb ich mir
Links zur aktuellen Edition des Microsoft Visual Studio spare. Das nachfolgend beschriebene Beispiel ist jedoch sicher auch mit einer
aktuellen Visual Studio Version nachvollziehbar.
 
 
Hat man dann alles richtig gemacht - da der gesamte Code automatisch erzeugt wird, sollte das auf alle Fälle funktionieren - bekommt man
dann das ausführbare Programm präsentiert:
 
 
Wie bereits an anderer Stelle auf diesen Seiten beschrieben, benutze ich Programmiersprachen idealerweise plattformübergreifend. Die
Sprachen müssen für mich zumindest auf einem Windows und einem Linuxsystem funktionieren. Wenn man sich nun nachfolgenden
Screenshot ansieht, wird auch klar, weshalb C bzw. C++ für mich nicht mehr "ideal" ist. Auf einem Windowssystem benötigt man für
Alltagsprobleme gleich eine IDE, während man auf einem Linuxsystem den Quellcode einfach kompalieren kann und zum Ergebnis kommt.
 
 
USB-Experimente mit C++
 
Problemstellung:
 
Als ich vor sehr langer Zeit stolzer Besitzer einer Lacrosse-Wetterstation war, die ich unter anderem auch dafür nutzen wollte, die ge-
messenen Temperaturwerte, Niederschlagsmengen und den Luftdruck digital aufzuzeichnen, musste ich feststellen, dass ein solches
Vorhaben sehr schnell in ein "Projekt" ausarten kann. Über mehrere Jahre hinweg hatte ich immer wieder Versuche unternommen, das
Gerät auszulesen und kaufte z. B. auch einen Seriell-USB-Adapter. Leider blieb der Erfolg aus.
 
Nach einigen Jahren bin ich dann, eher durch Zufall, beim Franzis Verlag über das Set "Experimente mit USB" gestolpert und war zunächst
wieder ein wenig entäuscht, da die Sprache in der die Beispiele behandelt wurden, Visual Basic anstelle von C oder C++ (ersteres war auf
Linux/Unix Servern nicht verfügbar) war. Mit dem enthaltenen USB-Adapter FTD2323R fand ich aber auf der Herstellerseite endlich sowohl
geeignete Bibliotheken, wie auch Programmierbeispiele in C.
 
Testaufbau bzw. Start der Experimente:
 
Zur Entwicklung mit C++ verwendete ich das Microsoft C++ 2010 Express Studio (ich wollte erst mal mit Windwos herumexperimentieren).
Der Treiber für den FTD2XX USB-Adapter findet man hier und auf der Chipherstellerseite findet man auch Dokumentationen, die aber
mit Vorsicht zu verwenden sind, da die ersten Beispiele bei mir nicht funktioniert hatten.
 
Mein erstes Programm:
 
 
Nach dem Debuggen und kompallieren liefert das Programm dann folgende Informationen:
 
 
LED Tests:
 
Es ist zwar ein wenig mühsam sich durch die Dokumentation zu wühlen, aber sogar ich habe mich durchgewurstelt. Ich habe dann,
ebenso wie in der Dokumentation von Franzis, versucht einfach mal eine LED auf das angeschlossenen Board zu stecken (siehe auch
nachfolgende Bilder, dabei +-Arm der LED in den mit 5V beschrifteten Sockel stecken) und D4 überbrücken wie ebenfalls auf dem Bild
zu sehen ist. Dann habe ich ein kleines kommandozeilenorientiertes Programm geschrieben und ich kann sagen es funktioniert😀.
 
Hier der Code:
 
 
Und hier schließlich das Programm und die Auswirkungen auf die LED:
 
 
 
 
Fazit:
 
Heute gibt es für Wetterstationen, wie auch für viele anderen Geräte oft auch das zugehörige USB Kabel, sowie oft auch die passende
Software, um die Daten auszulesen. Aus diesem Grund sind solche Basteleien eigentlich nicht mehr notwendig, sie wurden darum von mir
auch nicht weiterverfolgt. Auf der anderen Seite habe ich beim herumexperimentieren einiges gelernt, so dass der Aufwand sich letztlich für
mich gelohnt hat.
 
Wer sich im übrigen dafür interessiert, wie ich heute Wetterinformationen "einsammele" der schaut am besten auf meinen Pythonseiten
vorbei.
 
Lego Roboter (Lego Mindstorms & Co.) Übersicht
 
Hintergrundinformationen und vorhandene Roboter:
 
Meine Familie und ich haben über die Jahre inzwischen drei unterschiedliche Lego Roboter, den Lego Mindstorms NTX, den Lego
Mindstorms EV3, sowie den Lego Boost erworben. Die ersten beiden habe ich angeschafft, da ich eigentlich meiner ersten Tochter,
zu dem Zeitpunkt war Sie glaub ich so etwa 5 Jahre alt 😉, ein wenig Programmieren beibringen wollte. Insbesondere beim
Lego NXT war ich dann aber ziemlich frustriert, als ich die mitgelieferte "Programmieroberfläche" in Augenschein genommen
hatte. Nach ein wenig Recherche habe ich festgestellt, daß ein US Unternehmen eine IDE für Lernroboter anbietet, die zwar in der
Einzellizenz ca. 100 EUR kostet, sich aber an C orientiert und damit auch die auch bei anderen Programmmiersprachen üblichen
Kontrollstrukturen bietet. Nach einigen Jahren "Einsatz" kann ich inzwischen sagen, daß zumindest für uns die Basteleien
mit den ersten beiden Robotern eher etwas für den technisch versierteren Papa sind, da man hier einfach erstmal "dranbleiben"
muss. Den größten Lernerfolg, bei zugleich geringstem Preis bietet m. E. der Lego Boost, zumal sowohl die Bauanleitung wie auch
die "Programmieroberfläche" auf einem Tablet als App verfügbar sind. Damit hat meine neunjährige Tochter innerhalb nur weniger
Minuten Ihren ersten Robotor gebaut und auch die ersten Kommandos ausgeführt.
 
Lego Mindstorms NXT:
 
Zunächst ein paar Worte zur verbauten Technik. Wie auf dem deutschsprachigen Wikipedia zu lesen, unterscheiden sich die Mindstorms-
Versionen RIS 1.0, 1.5 und 2.0 hardwareseitig nur wenig. In Version 1.0 hat die "RCX"-Einheit eine Buchse für eine externe Stromver-
sorgung, die in den späteren Versionen eingespart wurde; mit Version 2.0 wurde der Infrarot-Sender("Tower"), der an den Computer
angeschlossen wird, von einer seriellen Schnittstelle auf einen USB-Anschluss umgestellt. Auch die Software der älteren Versionen
kann durch ein Update auf den neuesten Stand aktualisiert werden.
 
Der programmierbare Legostein RCX, so Wikipedia weiter, besitzt einen Renesas-H8/300-Mikrocontroller als CPU. Er wird programmiert,
indem ein, in einer der diversen Programmiersprachen geschriebenes Programm, vom PC zur CPU des RCX mit Hilfe einer IR-Schnittstelle
heruntergeladen wird. Nachdem das Programm gestartet worden ist, kann der mit einem RCX gebaute Mindstormsroboter völlig autonom
handeln und auf äußere sowie innere Ereignisse reagieren, entsprechend den Programmieranweisungen. Des Weiteren können
zwei oder mehr RCX miteinander über die IR-Schnittstelle reagieren, was Wettbewerbe (z.B. die World Robot Olympiad) und
Kooperationen ermöglicht. Der RCX besitzt drei Motorausgänge sowie drei Sensoreingänge. Die Leistungssteuerung der Motorausgänge
erfolgt über Pulsweitenmodulation.
 
Hier nun aber mein erstes Programmbeispiel, welches dafür sorgt, dass der Roboter sich vor einem Hindernis abdreht.
 
 
Gerne würde ich an dieser Stelle den Roboter noch in Aktion zeigen, allerdings muss ich hierzu nochmal im HTML Coding nachsehen,
wie das mit der Darstellung von Videos läft. Bis dahin hier mal ein Bild unseres NXT.
 
 
Lego Mindstorms EV3:
 
Auch für die Beschreibung des EV3, möchte ich Wikipedia zitieren, die folgende damals neuen Merkmale des Roboters beschreiben:
 
- neuer Brick:
   - ARM 9 Prozessor (TI Sitara AM1808 core 300 MHz)
   - 16 MB Flash-Speicher
   - mit einer SD-Karte erweiterbar (Micro SD bis 16 GB)
   - 64 MB Arbeitsspeicher
   - ein auf Linux basierendes Betriebssystem
   - Unterstützung eines USB-Host-Mode und Anschluss von WLAN-Dongles
   - Bluetooth 2.1
   - ein größeres Matrix-Display (178 × 128 Pixel)
   - mehr Tasten (4 Richtungs-, 1 Auswahltaste, 6. Taste)
   - Anschlussbuchsen für 4 Sensoren und 4 Motoren (NXT: 3 Motoren)
   - neuer Brick: IR-Beacon für das Zusammenspiel mit dem Infrarot-Sensor
 
Nachfolgend ein Bild unseres EV3:
 
 
Idee eines Herantastens an Programmieraufgaben:
 
Wie bereits geschildert, habe ich die Roboter eigentlich gekauft um meine Kinder spielerisch an die Welt der Roboter und auch ans
Programmieren heranzuführen. Dabei kam mir die Idee, dass ich mit unserer ältesten Tochter einfach mal den EV3 entlang eines erdachten
Parcours laufen lasse (man kann diesen via App remote steuern) und wir die Zeit stoppen wie lange er für die einzelnen Teile des
Parcours benötigen würde. Hintergrundgedanke war, dass wir dies dann gemeinsam programmatisch umsetzen.
 
Abschließend sei auch an dieser Stelle auf meine Pythonseiten verwiesen, da es seit geraumer Zeit eine Möglichkeit gibt, die Roboter
mittels eines Micropythonclones zu programmieren.
 
zurück zum Beginn der Seite