Nun kann ich endlich mit den Grundfunktionen anfangen. Ich programmiere das alles auf dem Raspberry Pi. Aus diesem Grund bin ich nicht an Java -die Programmiersprache der Roboter-gebunden. Da ich Python schon vorher konnte habe ich mir überlegt, bis auf die App, die ich mit Flutter, also in Dart schreibe alles mit Python zu schreiben.
Für den Start brauche ich ein paar Grundfunktionen mit denen ich den Roboter grundlegend steuern kann. Ich habe mit der Funktion: kalibrieren() angefangen. In dieser Funktion soll vor allem der Motor der den Stift nach vorne und hinten bewegt kalibriert werden, damit der Roboter weiß wo dieser ist. Dies passiert, indem der Motor nach hinten fährt bis dieser an den Knopf kommt. Da der Stift am Ende der Funktion wieder auf dem ersten Feld ist werden die Koordinaten auch wieder auf (1|1) gesetzt und der Motor A (Rechts/Links) wird wieder auf die Startposition zurückgefahren.
goto() ist eine Funktion, die ich währenddessen geschrieben habe, womit ich einen Motor um eine bestimmte Anzahl an Schritten mit einer bestimmten Geschwindigkeit bewegen kann. Diese Funktion wird beim kalibrieren genutzt, aber auch in vielen anderen Funktionen, die noch Folgen werden. Also immer, wenn ich einen Motor um eine bestimmte Schrittzahl drehen lasse.
Danach kamen wieder die nächsten Probleme… Wenn man einen Motor (in meinem Fall Motor C) um 180 Schritte dreht , denkt man ja, dass dieser sich um genau 180° dreht, dadurch habe ich am Anfang den Motor C immer um 180 nach vorne gedreht, wenn ich diesen hoch oder runter haben wollte, bis dieser sich dann langsam immer ein Stück weiter gedreht hat als er sollte. Dadurch bin ich nach vielen Versuchen darauf gekommen zwei verschiedene Funktionen zu benutzen. Eine, die den Motor nach vorne dreht und eine andere die diesen dann wieder zur Startposition dreht, in dem sie den Motor um die Differenz zur Startposition zurückdreht.
Als nächstes geht es dann an die Zeichnungen. Das bedeutet: ein Spielfeld, ein Kreis und das Kreuz. Die Funktion für das Feld ist relativ eintönig,aber es funktioniert. Mein Feld ist insgesamt 600*600 Schritte groß und dadurch sind meine Felder 200*200 Felder groß.
Für die beiden Figuren brauche ich jedoch noch eine weitere Funktion die genauso funktioniert, wie die Funktion goto(), nur dass diese Funktion zwei Motoren gleichzeitig bewegen kann und diese auch in verschiedene Richtungen bewegt. Sie heißt goto_2() und ist wieder mit der Entfernung, den beiden Ports und der Geschwindigkeit der beiden Ports gefüllt. Die Anzahl an Schritten „value“ genannt, beschreibt bei dieser Funktion nur die Schritte des ersten Motors. Das heißt also, dass falls sich die Motoren unterschiedlich schnell bewegen, die Motoren auch unterschiedlich weit laufen würden. Die war für meine Zwecke aber egal, da ich diese nur gleichschnell laufen lasse und somit ein Kreuz zeichne und eine Raute, als vereinfachten Kreis.
Die beiden Funktionen sind so aufgebaut das die Figur, die am Ende rauskommt, ungefähr 150*150 Schritte groß ist, also nicht das ganze Feld in Anspruch nimmt und es noch kleine Lücken gibt.