Grundlagen der Programmierung
Vorbemerkungen
|
Zum Thema ARDUINO und seine Programmierung gibt es zahlreiche Veröffentlichungen, seien es Bücher oder Artikel im Internet. Warum mache ich mir dann die Mühe hier abermals das Thema ARDUINO, Befehle und Programmierung aufzugreifen? Nun, gerade für Neueinsteiger – dazu zähle auch ich mich – empfinde ich diese Veröffentlichungen vielfach als sehr mangelhaft (man möge mir meinen Eindruck verzeihen!). Einige meiner Kritikpunkte möchte ich anmerken: - meist
ausgesprochen mangelhafter didaktischer Aufbau - Grundlagen des prinzipiellen Vorgehens beim erstellen eigener Programme wird so gut wie nicht vermittelt (kaum sind Abbildungen von Programmstrukturen, z. B. Flussdiagramme, zu finden). - die Sketches (so werden beim ADRUINO Programme genannt) werden mit wenigen Kommentarzeilen im Sketch abgedruckt und erst unterhalb dieses Programmlistings weitere Erklärungen abgedruckt. Das Auge muss folglich stets vom Programmlisting und dem Erklärungstext hin und her wandern, was sehr ermüdend ist. Warum nicht links den Programmausdruck und entsprechend jeweils rechts dazu die erforderlichen Erklärungen? - Für Variablen werden oft Namen verwenden, welche den Namen der Programmbefehle zum verwechseln ähneln (die Autoren verfallen hier dem Irrglauben damit eine Hilfe zu geben). - In Büchern wird oft das Programmlisting grau hinterlegt, was die Lesbarkeit einschränkt, zumal der Text hier oft viel zu „dünn“ gedruckt ist. An farblichen Hervorhebungen wird meist völlig verzichtet (der graue Alltag des Programmierens?) - eine komplette strukturierte Liste aller Programmierbefehle – zu mindest als Anhang – findet man so gut wie vergeblich. - der lernwillige Leser wird in den meisten Fällen mit dutzenden konkreten Programmbeispielen gequält, um sich damit in die Thematik des Programmierens einzuarbeiten und sich die Vielzahl von Programmbefehlen einzuprägen. Grundsätzliches, allgemein Gültiges, Struktur sowie Vorgehensweisen bleiben didaktisch auf der Strecke. - Es macht keinen Sinn Beispiele auswendig zu lernen! Der geneigte Leser gewinnt bestenfalls den Eindruck damit alles zu wissen; möchte er dann aber ein eigenes Projekt realisieren, kommt er schnell ins Dilemma „wie mache ich denn Das?“. Versuch wir dies im Folgenden etwas besser zu gestalten. |
Der Anfang
>> bevor wir einen Aufsatz schreiben konnten, mussten wir Lesen und Schreiben
lernen<<
bevor wir eigene Programme schreiben können, müssen wir Programmbefehle und
Programmstrukturen lernen.
Generell merken wir uns:
Der ARDUINO versteht nur einen definierten Wortschatz, den Befehlssatz.
Befehle werden sequentiell (also nacheinander, Zeile für Zeile) abgearbeitet
Variablen (das sind Platzhalter, den Information zugewiesen werden kann) müssen
definiert werden.
Kommentare sind Texte, die das Programm ignoriert (nicht ausführt), aber
hilfreich zum Verständnis beim Lesen eines Programmlistings sind.
prinzipieller, sequentieller Programmablauf Programm Starten (beim ARDUINO erfolgt der Programmstart im Allgemeinen sowie die Stromversorgung anliegt) Ausgabe auf einen Monitor
(beim ARDUINO „Serial Monitor“ auf den PC): Abb.1 |
Die obige Abbildung soll
lediglich veranschaulichen, dass ein Mikrokontroller ein Programm
sequentiell, also Schritt für Schritt, abarbeitet. Also ändern wir unseren Programmablauf ein wenig: |
prinzipieller, sequentieller Programmablauf Programm Starten (beim ARDUINO erfolgt der Programmstart im Allgemeinen sowie die Stromversorgung anliegt) 1. Definitionen von
Variablen 2. Start-Prozedur = Setup-Routine => Schleifendurchlauf 3.
Programmablauf in einer Endlosschleife Ausgabe auf einen Monitor
(beim ARDUINO „Serial Monitor“ auf den PC): <= Rücksprung (Schleife) Abb.2 |
Wir haben eine Schleife
(englisch loop) eingefügt. Innerhalb dieser Schleife befinden sich die
Anweisungen und die Ausgabe, welche nun permanent durchlaufen werden. Im
Beispiel wird die LED nicht aufhören zu blinken und jede
Potentiometeränderung wird einen entsprechenden Spannungswert anzeigen. |
Der
ARDUINO UNO
die
Platine mit ihren Anschlüssen
Abb.3 |
Steckbretter (englisch:
Breadboards) sind zum schnellen kleinen Schaltungsaufbau bestens geeignet: Abb.4 |
Die
grundsätzliche Programmstruktur beim ARDUINO
|
Wir wollen die LED 13 auf dem Bord blinken lassen und über ein extern angeschlossenes Potentiometer eine einstellbare Spannung zwischen 0 und 5 Volt messen und auf dem PC im Serial Monitor anzeigen. Dabei werden wir obige grundsätzliche Programmstruktur wieder erkennen, sowie weitere Befehle kennen lernen.
Beachte: · Die Programmiersprache des ADRUINO unterscheidet zwischen Groß- und Kleinschreibung!
·
Programmbefehle sind deshalb exakt
in der Schreibart einzugeben
·
Befehle werden stets mit einem
Semikolon (Strichpunkt „;“) abgeschlossen! |
PGM_01, unser erstes Demo-Programm
1. Variablen
definieren
2. Start-Prozedur = Setup-Routine
= Initialisierungs-Routine (-Prozedur)
3. Programmablauf in einer
Endlosschleife
Abb.6 |
Das Programm PGM_01, in der ARDUINO-Sprache SKETCH, alleine reicht natürlich nicht, wir benötigen noch den Schaltungsaufbau, Neudeutsch: den Hardware-Aufbau. Hier ist er: Abb.7
Abb.8
Abb.10
|
Der Serial Monitor des ARDUINOs und Alternativen Auf obiger Abb. 8 ist der Serial Monitor, welcher Bestandteil der Software des ARDUINOs ist, dargestellt. Die Werte des Beispielprogramms werden hier zeilenweise untereinander aktualisiert dargestellt. Das heißt nach jedem übertragenen Wert (also nach jedem Durchlauf der Schleife) erfolgt ein Zeilenumbruch. Dies erfolgt durch das Anhängsel „ln“ an den Befehl „Serial.print“ => „Serial.println“. Wird das Anhängsel „ln“ weggelassen, erfolgt kein Zeilenumbruch und die Werte werden einfach in einer Zeile hintereinander geschrieben.
Möchte man jedoch, dass die Werte stets an ein
und derselben Position auf dem Monitor aktualisiert dargestellt werden, so
muss nach jeder Werteübertragung zum Monitor ein Rücksprung zum Zeilenanfang
erfolgen. Dazu gibt es einen Befehl „Wagenrücklauf“ (englisch: carriage
return = cr), welcher aus der Zeit der guten alten Schreibmaschine stammt.
In der Programmiersprache des ARDUINOs lautet er „\r“ (r steht für return,
deutsch: zurück. Der vorangestellte umgekehrte Schrägstrich „\“, englisch
backslash, veranlasst, dass „r“ ein Steuerbefehl ist und keine Variable).
Doch leider zeigt dieser Befehl im
Serial-Monitor vom ARDUINO keine Auswirkungen! Woran liegt das?
Lösung des Problems: auf einen anderen Seriellen-Monitor (Terminal-Programm) ausweichen! Ich beschreibe hier eine Möglichkeit: Bis Windows XP verfügte das Microsoft-Betriebssystem noch über das Programm „Hyper Terminal“. Wer also noch einen PC mit Windows XP besitzt, rufe dort das Hyper Terminal Programm auf (Bedienungshinweise folgen weiter unten). Wer mit Windows 7 (oder höher) arbeitet, kann sich die folgenden Dateien des Hyper Terminals von seinem XP-Rechner in einen Ordner auf seines Windows-7-Rechners kopieren: 1) C:\Program\Windows NT\HYPERTRM.EXE (*) 2) C:\Windows\System32\hypertrm.dll 3) C:\Windows\Help\HYPERTRM.CHM 4) C:\Windows\Help\HYPERTRM.HLP (*) beim Kopieren die Strg-Taste gedrückt halten, sonst wird nur eine Verknüpfung kopiert! Erstellen wir unter Win7 also einen Ordner beispielsweise namens „XP_Hyper_Terminal“ und kopieren alle oben genannten Dateien in diesen Ordner (HYPERTRM.EXE | hypertrm.dll | HYPERTRM.CHM | HYPERTRM.HLP). Dieser Ordner „XP_Hyper_Terminal“ kann unter C:\Programme(x86) erstellt werden, muss aber nicht. Jedes andere Verzeichnis ist auch möglich; beispielsweise auf ein Datenlaufwerk D:\DATEN\ARDUINO\ XP_Hyper_Terminal. Es ist empfehlenswert sich noch eine Verknüpfung zum schnellen Aufrufen des Programms HYPERTRM.EXE auf den Desktop anzulegen. Aus lizenzrechtlichen
Gründen vermute ich, dass ich obige 4 Programmteile aus WinXP nicht zum
Download einstellen kann. Bei Fragen bitte Mail.
Die Änderungen zum Sketch PGM_01 sind im obigen Listing PGM_01_r Gelb hinterlegt. Verwendet man bei Programmausführung den ARDUINO Serial Monitor, so wird man feststellen, dass alles in der oberen Zeile hintereinander geschrieben wird. Der Befehl Serial.print( '\r' ) zeigt hier keine Wirkung. Bei Verwendung des Hyperterminals hingegen funktioniert es erwartungsgemäß. |
Anleitung zum Programm Hyper Terminal als Serial Monitor für den ARDUINO
1.] ARDUINO an USB anschließen
2.]
ARDUINO-IDE aufrufen und unser Beispielprogramm PGM_01_r laden.
Es ist wichtig erst die IDE mit angeschlossenen ADRUINO zu starten, damit
der entsprechende
COM-Port belegt ist, bevor Hyper Terminal aufgerufen
wird. In der ADRUINO IDE wird der COM-Port
unten rechts angezeigt.
3.] HyperTerminal aufrufen
Bei der Erst-Verwendung des Hyper Terminals erscheint ein Fenster. Hier tragen wir einen frei wählbaren Namen ein, und wählen ein Symbol aus. Anschließend mit OK bestätigen.
Abb rechts unter WinXP |
|
Dann wird der
Abb rechts unter WinXP
|
|
Weiter
Einstellungen unter XP entsprechen (im Wesentlichen) denen von Windows 7:
Unter Win7:
1] Verknüpfung erstellen
Hier wird das Verzeichnung gesucht indem das Programm hypertrm.exe abgelegt
ist, um die Verknüpfung zu erstellen.
im Anschluss kann diese Verknüpfung benannt werden.
Verknüpfung benennen
Auf dem Desktop findet man jetzt das entsprechende Verknüpfungs-Symbol
Nach „Fertig stellen“ Erscheint ein Fenster. man hat die Wahl: |
|
Nach (erstem) Aufruf von Hyper Terminal sind noch Eingaben erforderlich:
Es muss noch die Geschwindigkeit (Baud) eingestellt werden |
|
Wir haben es geschafft!
Die Anzeige bleibt nun an Ort und Stelle.
Neue Werte erscheinen unverrückt an gleicher Position. |
|
Das Beenden von Hyper Terminal:
Die gemeldete noch bestehende Verbindung ist die vom angeschlossenen ANDRUINO. Das ist korrekt. Hyper Terminal schreibt ja nur mit, was ADRUINO über die COM-Schnittstelle zum Rechner überträgt und muss somit am gleichen COM-Port hängen! Wir bestätigen folglich mit „Ja“. Der ARDUINO verrichtet nach wie vor seine Arbeit, bis wir in vom Port (USB) trennen. |
|
Nach dem Schließen erscheint noch ein Fenster, welches wir mit „Ja“ schießen. |
|
Das wieder Öffnen von Hyper Terminal:
Und die Anzeige auf dem Hyper Terminal von XP arbeitet wieder unter Windows 7:
unter Windows 7
genauso wie unter Windows XP