Benutzer-Werkzeuge

Webseiten-Werkzeuge


allgemein:howto:makerbuino_programmierung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
allgemein:howto:makerbuino_programmierung [11.01.2018 11:30] richardallgemein:howto:makerbuino_programmierung [30.04.2023 15:54] (aktuell) – Status der Diskussion geändert richard
Zeile 1: Zeile 1:
-~~DISCUSSION|Ergänzungen~~+~~DISCUSSION:closed|Ergänzungen~~
  
 ====== Vorwort ====== ====== Vorwort ======
Zeile 36: Zeile 36:
 Folgender Sourcecode sollte erscheinen: Folgender Sourcecode sollte erscheinen:
 {{ :allgemein:howto:mb:arduino_ide_a_hello.png?400 |}} {{ :allgemein:howto:mb:arduino_ide_a_hello.png?400 |}}
 +
 +===== Kurze Erklärung der Abschnitte (kann übersprungen werden) =====
 +
 +Im Folgenden werden die Grundlagen einer Sourcecode-Datei erklärt.
 +
 +==== Der erste Abschnitt: Einbinden von fremdem Sourcecode ====
 +
 +Der erste Abschnitt des Sourcecodes bindet alle notwendigen Bibiliotheken ein. Dies geschieht mit dem Befehl ''#include''((include: Binde ein; macht z.B. eine fremde Bibliothek im eigenen Sourcecode nutzbar)). Das Zeichen ''#'' gibt dem Compiler eine Anweisung, also ist ''include'' kein Befehl, der in binäre Code für den Prozessor übersetzt wird, sondern lediglich an den Compiler selbst gerichtet ist.
 +
 +In spitzen Klammern wird nun die sogenannte ''Header''-Datei der Bibliothek angegeben. In diesen ''Header''-Dateien erklärt man normalerweise welche Variablen bzw. Funktionen innerhalb einer Bibliothek zur Verfügung stehen. Durch das ''#include'' wird der Inhalt genau diese ''Header''-Dateien während der Übersetzung des Sourcecodes in den eigenen Sourcecode "kopiert". Damit wird alles aus den entsprechenden Bibliotheken im eigenen Sourcecode nutzbar ohne den fremden Sourcecode tatsächlich immer kopieren zu müssen.
 +
 +Hier werden also die beiden Bibliotheken ''SPI''((SPI: **s**erial **p**rogramming **i**nterface, serielle Programmierschnittstelle)) zum nutzen der Programmierschnittstelle und ''Gamebuino'' für den MAKERbuino selbst eingebunden.
 +
 +Weiterhin wird hier noch die Variable ''gb'' definiert. Vor dieser Variable steht 
 +der sogenannte ''Type'' der Variable. Hier ''Gamebuino''. Dieser Variablentype wird in der ''Heade''-Datei ''Gamebuino.h'' definiert und enthält alles Wichtige um den MAKERbuino zu programmieren. Die Variable existiert zwar zu diesem Zeitpunkt, aber sie kann noch nicht genutzt werden. Um dies zu tun muss sie zunächst initialisiert werden, also quasi mit Leben gefüllt werden. Das heißt das Gerüst der Variablen existiert schon, aber der Inhalt ist noch leer.
 +
 +===== Der zweite Abschnitt: Der Sourcecode =====
 +Im zweiten Abschnitt kommt der eigentliche Sourcecode. Hier sind zwei sogenannte Funktionen ( ''void setup(){...}'' und ''void loop(){...}'') definiert. 
 +
 +Um zu verstehen was hier passiert, muss man wissen, dass es bei vielen Systemen festdefinierte Funktionen gibt, die bestimmte Aufgaben haben. Die beiden ''setup'' und ''loop'' gehören dazu. 
 +
 +Alle Funktionen haben denselben Aufbau:
 +
 +<code>
 +RÜCKGABEWERT FUNKTIONSNAME(EINGANGSWERTE){
 +BEFEHLE, die innerhalb der Funktion abgearbeitet werden
 +}
 +
 +Beispiel:
 +int myfunct(int var1) {
 +    print(var1);
 +    var1=var1+1;
 +    return var1;
 +}
 +</code>
 +
 +Die Funktion heißt hier ''myfunct'' sie erwartet als Eingangswert((an sie gerichtet)) einen ''int''-Wert((int: **int**eger; ganzzahlige Zahl zB. -3, 2 oder 5)) und gibt ebenfalls einen ''int''-Wert zurück hier ''return var1''.
 +
 +Bei ''void setup()'' bedeutet ''void'' in diesem Zusammenhang ''kein Rückgabewert'' und die leeren runden Klammern bedeuten ''kein Eingangswert''.
 +
 +==== setup(): Die Initialisierung des Systems ====
 +
 +Die ''setup()''-Funktion wird genau einmal beim Programmstart durchlaufen und dient dazu die Grundkonfiguration des Programms vorzunehmen. Hier werden meist die globalen Variablen wie ''gb'' initialisiert, also mit Werten befüllt ''gb.begin()''.
 +
 +Auch kann man hier z.B. den Titelbildschirm ''gb.titleScreen'' einblenden lassen oder sogenannte popup-Nachrichten ''gb.popup'' (eingeblendete Nachrichten).
 +
 +**Wichtig**: Hier gehört nicht hinein, dass mehrfach aufgeführt werden sollen. Also irgendwelche Steuerungen oder sonstige Programmteile. Ansonsten passiert alles genau einmal und danach passiert nichts mehr.
 +
 +==== loop(): Die eigentliche Hauptroutine ====
 +
 +Die ''loop()''-Funktion ist die Hauptroutine, die immer und immer wieder durchlaufen wird. Das bedeutet das alle Befehle, die innerhalb dieser Funktion stehen immer wieder durchlaufen werden. Also sollte darüber gut nachgedacht werden, was hier passieren soll. Es wird ansonsten sehr oft wiederholt.
 +
 +Im Kommentar wird erklärt, dass der Gamebuino 20 mal in der Sekunde ein ''update'' als eine Aktualisierung durchführt. Innerhalb dieses ''updates'' wird der Bildschirm, die Soundausgabe, die Hintergrundbeleuchtung usw. aktualisiert. Darum müssen wir also glücklicherweise nicht kümmern (sofern alles wie gewünscht funktioniert). Während eines solchen Aktualisierungszyklus sollte man keine Änderungen durch das eigene Programm durchführen. Dies könnte zu unschönen Ergebnissen führen z.B. ist der obere Teil des Bildschirms schon aktualisiert worden und kurz danach wird ein Wert für diesen Teil geändert.
 +
 +Damit also nicht permanent etwas geschieht, kann man darauf warten, dass ein solcher ''update''-Prozess durchlaufen wurde und im Anschluss einige Befehle abarbeiten. Das Objekt ''gb'' hat hierzu eine Funktion((Methode)) definiert, die mit ''gb.update()'' aufrufen werden kann. Der ''.''-Punkt zwischen ''gb'' und ''update()'' deutet daraufhin, dass die Funktion ''update()'' ein Teil des Objektes ''gb'' ist. 
 +
 +Mit Hilfe der Funktion ''gb.update()'' lässt darauf warten, dass der Gamebuino einen ''update''-Zyklus beendet hat, in dem man innerhalb der ''loop''-Funktion mit Hilfe einer ''if''-Anweisung auf den Rückgabe werden ''true'' prüft. 
 +
 +<code c>
 +  if (gb.update()){
 +    ...
 +  }
 +</code>
 +
 +===== Ausprobieren des ersten Programms =====
 +
 +Der Sourcecode alleine ist zunächst wie oben erklärt nicht auf dem MAKERbuino lauffähig. Daher muss er in den binären Op-Code vom Compiler übersetzt werden anschließend ausgeführt werden. Hierzu gibt es mehrer Möglichkeiten:
 +
 +  - per RS232-zu-USB-Konverter den erzeugten Op-Code direkt auf dem MAKERbuino übertragen
 +  - den erzeugten Op-Code auf die SDCard kopieren und anschließend den MAKERbuino starten
 +  - den erzeugten Op-Code in einem Software-Emulator((Emulator: bildet die Hardware als Programm nach und führt die Befehle so aus wie die Hardware)) ausführen
 +
 +
 +==== Mit RS232-zu-USB-Konverter Programme auf den MAKERbuino übertragen =====
 +
 +Jede der drei Möglichkeiten hat Vor- und Nachteile. Bei kleinen Programmen ist die erste Option am schnellsten. Hier wird der Op-Code direkt auf die Konsole übertragen und ausgeführt. Ein Nachteil dabei ist allerdings die Übertragungszeit, die bei größeren Programmen sehr lange dauern könnte.
 +
 +Um diese Möglichkeit zu nutzen wird die beiliegende RS232-zu-USB-Platine benötigt. 
 +{{ :allgemein:howto:mb:rs232-to-usb-converter.png?400 | RS232-zu-USB-Platine direkt angeschlossen}}
 +
 +Im obigen Bild wurde der Konverter direkt an den MAKERbuino angeschlossen. Man kann so die Ausrichtung der beiden Platinen zu einander sehen. Dies ist wichtig, da jeweils der ''TX''-Pin ((TX: transmit; Sende-Pin)) mit dem ''RX''-Pin
 +
 +Dies ist zwar prinzipiell möglich, sollte allerdings nur in Ausnahmen getan werden. Es besteht hier die Gefahr, dass die Stiftleiste verbiegt oder die Konverterplatine abgebrochen wird, da sie mehr oder weniger fest mit dem MAKERbuino verbunden ist.
 +
 +Die bessere 
 +
 +
 +
 +
  
  
allgemein/howto/makerbuino_programmierung.1515666616.txt.gz · Zuletzt geändert: 11.01.2018 11:30 von richard

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki