Uno R3 Spielekonsole basteln

Mit diesem Blog möchten wir euch zeigen wie ihr euren Arduino mit dem Joystick Gamepad Shield und dem Nokia Display anwenden könnt. Wir lassen am Display anzeigen, welche Position der Joystick gerade hat und welche Tasten gedrückt sind.

Wir benötigen dazu:

  • Mikrokontroller, kompatibel mit Arduino Uno R3
  • Joystick Gamepad Shield
  • Nokia 5880 Display

Zur Grundvoraussetzung zählt natürlich immer einen PC mit der Arduinosoftware und etwas Werkzeug (Lötkolben...)

An das Display muss als erstes eine Stiftleiste mit 8 Pins gelötet werden:

Anschließend können wir alle 3 Bestandteile aufeinander zusammenstecken:

 

 

Nun legen wir mit dem Programmieren los.
Wie üblich benötigen wir wieder ein paar neue Bibliotheken:

Dazu starten wir in der Arduino-IDE "Sketch > Bibliothek einbinden > Bibliotheken verwalten..."

In der Bibliothekverwaltung suchen wir nach Adafruit PCD8544 und installieren das Paket:

Kurz darauf steht das Paket als INSTALLED:

Dies wiederholen wir mit Adafruit GFX:

 

Nun können wir den Code erstellen (Hier geht es zum Download)

 

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Wire.h>
#include <SPI.h>

#define RST 12
#define CE  13
#define DC  11
#define DIN  10
#define CLK  9
#define LED 8

const byte PIN_BUTTON_A = 2; 
const byte PIN_BUTTON_B = 3;
const byte PIN_BUTTON_C = 4;
const byte PIN_BUTTON_D = 5;
const byte PIN_BUTTON_E = 6;
const byte PIN_BUTTON_F = 7;

const byte PIN_ANALOG_X = 0;
const byte PIN_ANALOG_Y = 1;

Adafruit_PCD8544 display = Adafruit_PCD8544(CLK, DIN, DC, CE, RST);

int valX = 0;
int valY = 0;

void setup() {
  Serial.begin(9600);


  display.begin();
  display.setContrast(64);
  display.clearDisplay();
  
  display.setTextSize(1);
  display.setTextColor(BLACK);

  display.drawRoundRect(0, 0, 44, 24, 3, 2);

  display.setCursor(6, 3);
  display.println("- X -");  
  display.setCursor(5, 14);
  display.println(" "); 
  display.setCursor(29, 14);
   
  display.drawRoundRect(45, 0, 39, 24, 3, 2);

  display.setCursor(50,3);  
  display.println("- Y -");
  display.setCursor(50,14); 
  display.println(" "); 
   
  display.drawRoundRect(0, 25, 84, 23, 3, 2);

  display.setCursor(6, 28); 
  display.println("- TASTEN -");
  display.setCursor(10, 38);
  display.println(" "); 
  display.display();

  delay(1000);

  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);

  pinMode(PIN_BUTTON_A, INPUT);  
  digitalWrite(PIN_BUTTON_A, HIGH);  
  
  pinMode(PIN_BUTTON_B, INPUT);  
  digitalWrite(PIN_BUTTON_B, HIGH);
 
  pinMode(PIN_BUTTON_C, INPUT);  
  digitalWrite(PIN_BUTTON_C, HIGH);
 
  pinMode(PIN_BUTTON_D, INPUT);  
  digitalWrite(PIN_BUTTON_D, HIGH);
 
  pinMode(PIN_BUTTON_E, INPUT);  
  digitalWrite(PIN_BUTTON_E, HIGH);
 
  pinMode(PIN_BUTTON_F, INPUT);  
  digitalWrite(PIN_BUTTON_F, HIGH);  
}

void loop()
{
  display.fillRect(4, 37, 72, 10, 0);
  display.setCursor(8, 38);

  Serial.print("Taste A:");
  Serial.print(digitalRead(PIN_BUTTON_A));
  Serial.print(" ");
  if (digitalRead(PIN_BUTTON_A)==LOW)
  {
    display.print("A ");
  }
  else
    display.print("- ");
 
  Serial.print("B:");
  Serial.print(digitalRead(PIN_BUTTON_B));
  Serial.print(" ");
  if (digitalRead(PIN_BUTTON_B)==LOW)
  {
    display.print("B ");
  }
  else
    display.print("- ");
 
  Serial.print("C:");
  Serial.print(digitalRead(PIN_BUTTON_C));
  Serial.print(" ");
  if (digitalRead(PIN_BUTTON_C)==LOW)
  {
    display.print("C ");
  }
  else
    display.print("- ");
 
  Serial.print("D:");
  Serial.print(digitalRead(PIN_BUTTON_D));
  Serial.print(" ");
  if (digitalRead(PIN_BUTTON_D)==LOW)
  {
    display.print("D ");
  }
  else
    display.print("- ");

  Serial.print("E:");
  Serial.print(digitalRead(PIN_BUTTON_E));
  Serial.print(" ");
  if (digitalRead(PIN_BUTTON_E)==LOW)
  {
    display.print("E ");
  }
  else
    display.print("- ");
 
  Serial.print("F:");
  Serial.print(digitalRead(PIN_BUTTON_F));
  Serial.print(" -- ");
  if (digitalRead(PIN_BUTTON_F)==LOW)
  {
    display.print("F ");
  }
  else
    display.print("- ");

  display.println();
  
  valX = analogRead(PIN_ANALOG_X);
  valY = analogRead(PIN_ANALOG_Y);
 
  display.fillRect(4, 13, 25 , 10, 0);
  display.setCursor(4, 14);
  display.println(valX, 1); 
   
  display.fillRect(50, 13, 23 , 10, 0);
  display.setCursor(50, 14);
  display.println(valY, 1); 
  
  Serial.print("Position X:");
  Serial.print(valX);
  Serial.print(", ");
  Serial.print("Y:");
  Serial.print(valY);
  Serial.print(" ");  
  Serial.println();

  display.display();
  
  delay(200);
}



Wir haben es geschafft, unsere "Spielekonsole" läuft. Wir können uns nun die Tasten und Joystickpostion anzeigen lassen:

 

 

WICHTIGER HINWEIS:

Es gibt von dem Nokia 5110 Display verschiedene Versionen, die unterschiedliche Pinbelegungen besitzen. Wenn du eine falsche Pinbelegung hast, funktioniert das Display nicht, evtl. flackert deine Hintergrundbeleuchtung.

Sollte deine Pinbelegung nicht auf dem Joystick Gamepad Shield funktionieren, so prüfe deine Pinbelegung und verwende Jumperleitungen um dein Display zu verbinden:

Die Pinbelegung ist wie folgt:

Shield Display
3V3 VCC
GND GND
D13 CE
D12 RST
D11 DC
D10 DIN
D9 CLK
3V3 nicht Verbunden
KEY LIGHT

 

Wir wünschen dir viel Spass mit dem Joystick shield und dem Display und schreibe in den Kommentaren, was du damit entwickelt hast.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert