Umzug auf passende Plattform (Arduino Esplora, Part 2)


Nachdem ich viel probiert habe und dabei fast ein Spiel zusammen hatte (Nicht Pong, das ist zu einfach), entschied ich den Arduino Esplora zu bestellen. Normalerweise würde ich vom Breadboard umziehen und dann etwas selbst auf eine Platine mit den entsprechenden Komponenten zusammenlöten. Aber warum nicht eine fertige Plattform nutzen.

Etwas enttäuschend, fand ich die Suche im Internet, weil ich keine aufwendigen Spiele für den Arduino Esplora entdeckt habe. Damit will ich das nicht schlecht reden, aber etwas mehr hatte ich schon erwartet.

Der Umzug vom Breadboad auf den Arduino Esplora ist in wenigen Schritten erledigt. Als erstes werden die Adafruit Bibliotheken gegen die 'Esplora.h' und 'TFT.h' ausgetauscht. Die Beschreibung an welchen Pin vom TFT zum Arduino Uno (oder Nano) verbunden werden soll, sowie auch die Pin Variablen entfallen. Das Initialisieren der Pins sowie auch das TFT Display, wird durch ein 'EsploraTFT.begin()' ersetzt. Die Steuerrichtung wird durch den Joystick abgenommen, allerdings bleibt das Verhalten der Bewegungsgeschwindigkeit. Hinzu kommt noch, dass ein Offset benötigt wird. Bei analogen Eingängen kann es zu Abweichungen kommen die durch das Offset korrigiert werden können. Für diesen Zweck ist eine neue Methode hinzugekommen, mit der die Werte auf dem Display angezeigt werden können.


 #include <SPI.h>   
 #include <TFT.h>   
 #include <Esplora.h>   
   
 // ruft die letzte Postion X ab. (Pixel Position)   
 int lastPosX = 5;   
 // ruft die letzte Postion Y ab. (Pixel Position)   
 int lastPosY = 5;   
   
 // mittelstellung des Joystick   
 int offsetX = -3;   
 int offsetY = 4;   
   
 void setup() {  
   EsploraTFT.begin();   
   EsploraTFT.background(0, 0, 0);   
 }   
   
 void loop() {   
   
   // Eingänge einlesen   
   int stickX = Esplora.readJoystickX() + (offsetX * -1);   
   int stickY = Esplora.readJoystickY() + (offsetY * -1);   
   
   boolean buttonLeft = false;   
   boolean buttonRight = false;   
   boolean buttonUp = false;   
   boolean buttonDown = false;   
   
   if(stickX > 3 || stickX < -3) {   
     buttonLeft = stickX > 3;   
     buttonRight = stickX < -3;   
   }   
   
   if(stickY > 3 || stickY < -3) {   
     buttonUp = stickY < -3;   
     buttonDown = stickY > 3;   
   }   
   
   // Werte ausgeben auf dem Bildschirm   
   writeValue(10, 10, stickX, false);   
   writeValue(10, 20, stickY, false);   
   
   // Temporaer letzte Position merken   
   int lastPosXtemp = lastPosX;   
   int lastPosYtemp = lastPosY;   
   
   // Abfragen zu den gesetzten joystick   
   // Es kann nur in eine Richtung die Bedingung erfüllt werden.   
   
   // Wenn nach links oder rechts gedrückt wird.   
   if(buttonLeft && !buttonRight && lastPosX > 0) {   
     // nach links und letzte Position Y ist groesser als '0'.   
     lastPosX--;   
   }   
   else if(!buttonLeft && buttonRight && lastPosX < EsploraTFT.width()) {   
     // nach rechts und letzte Position X ist kleiner als die TFT Pixel Breite.   
     lastPosX++;   
   }   
   
   // wenn nach oben oder unten gedrückt wird.   
   if(buttonUp && !buttonDown && lastPosY > 0) {   
     // nach oben und letzte Position Y ist groesser als '0'.   
     lastPosY--;   
   }   
   else if(!buttonUp && buttonDown && lastPosY < EsploraTFT.height()) {   
     // nach unten und letzte Position X ist kleiner als die TFT Pixel hoehe.   
     lastPosY++;   
   }   
   
   // Wenn sich X oder Y Position unterscheiden, dann den zu bewegenden Punkt neu zeichnen.   
   if(lastPosX != lastPosXtemp || lastPosY != lastPosYtemp) {   
   
     // vorigen punkt entfernen mit den temporären Positionen.   
     drawPoint(lastPosXtemp, lastPosYtemp, false);   
   
     // neuen punkt zeichnen mit der neuen Position.   
     drawPoint(lastPosX, lastPosY, true);   
   }   
   
   writeValue(10, 10, stickX, true);   
   writeValue(10, 20, stickY, true);   
 }   
   
 void writeValue(int x, int y, int val, boolean clr) {   
   if(clr) {   
     EsploraTFT.stroke(0, 0, 0);   
   }   
   else {   
     EsploraTFT.stroke(30, 200, 50);   
   }   
   String accResult = String(val);   
   char valuePrint[5];   
   accResult.toCharArray(valuePrint, 5);   
   EsploraTFT.text(valuePrint, x, y);   
 }   
   
 // Einachen Punkt Zeichnen, der nicht ausgefuellt ist.   
 void drawPoint(int x, int y, boolean setColor) {   
   
   // Schwarz Zeichnen.   
   EsploraTFT.stroke(0, 0, 0);   
   
   // Farbe festlegen   
   if(setColor) {   
     EsploraTFT.stroke(120, 100, 200);   
   }   
   
   EsploraTFT.circle(x, y, 2);   
 }   

Sobald das Programm auf dem Esplora ist, sollte mit dem Lauf des Programms die Werte für X und Y des Joysticks zu sehen sein. Die angezeigten Wert zeigen die Abweichungen, die im Anschluss im Offset einzutragen sind.

Der Arduino Esplora ist eine schöne Plattform und kann wie jeder andere Arduino Programmiert und angesteuert werden. Das Potenzial an Möglichkeiten ist da. Abgesehen vom Joystick, Buttons und dem passenden TFT, sind noch weitere Sensoren und Aktoren auf der Plattform vorhanden. Falls diese nicht reichen sollten, dann können oben an die Stecker weitere Komponenten angeschlossen werden und Betrieben werden.

Einen wesentlichen Unterschied gibt es zwischen den Arduino Nano (den ich zuvor verwendet habe) und dem Arduino Esplora. Der SRAM vom ATMega32u4 ist um 512 Bytes größer 😃

Technische Daten
Microcontroller:   ATmega32u4
Flash Speicher:    32kb (4kb werden vom bootloader verwendet)
SRAM:                2,5 kb
EEPROM:           1 kb
Takt:                    16 MHz

Sensoren / Eingabemöglichkeiten: Analog X Y Joystick
                                                        4 Taster
                                                        Linear Potentiometer
                                                        Mikrofone
                                                        Lichtsensor
                                                        Drei Achsen Beschleunigungssensor

Aktor, Widergabe, Ausgabe:          Buzzer
                                                        RGB LED
                                                        TFT Display (gibt's wahlweise mit als Bundle)




Github - BlogPost_02_MoveLibrary

Kommentare

Beliebte Posts aus diesem Blog

Arduino Control (Teil 5) - PWM Signal einlesen

RC Fahrtenregler für Lego Kettenfahrzeug

Angular auf dem Raspberry Pi