Pong-Simulation mit ESP32 und kleinem OLED Display



Ziel:  Ein ESP32-Board simuliert auf dem kleinen 0,96 Zoll OLED Display das Spiel 'Pong'.

0,96 Zoll OLED


Ich nenne dieses Eperiment 'Pong-Simulation', weil es kein vollständiges Pong-Spiel ist. Für ein vollständiges Pong müssten noch zwei Potis oder zwei Joysticks hinzugefügt werden, die ich jetzt nicht vorliegen habe.


Anschluss:

Pin am Display    Pin am ESP32-Board    Farbe im Bild
GNDGNDgrün
Vcc3V3rot
SCLGPIO 22blau
SDAGPIO 21gelb
  

0,96 Zoll OLED




Quelltext:

		
	/*
		Programm "Pong-Simulation"

		OLED Display 128x64 mit Treiberchip SSD1306 und I2C-Bus
		am AZDelivery ESP32 WROOM Board
		
		folgende Bibliotheken werden verwendet:
	      Adafruit_BusIO          hier: https://github.com/adafruit/Adafruit_BusIO
	      Adafruit_SSD1306        hier: https://github.com/adafruit/Adafruit_SSD1306
	      Adafruit_GFX_Library    hier: https://github.com/adafruit/Adafruit-GFX-Library

	      Lade sie herunter, entpacke sie, lege sie in Deinen 
	      libraries-Ordner und starte Deine Arduino-IDE neu!


		Anschlüsse:
		OLED   |  ESP32-Board
		---------------------
		GND    |  GND
		VCC    |  3.3V
		SCL    |  G22 (=SCL)
		SDA    |  G21 (=SDA)
	*/

	#include <Adafruit_SSD1306.h>

	#define SCREEN_WIDTH 128
	#define SCREEN_HEIGHT 64


	Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Instanziierung

	// globale Variablen
	int x = 20, y = 40, d = 5;
	boolean nachrechts = true, nachunten = true;

	void setup() {
		display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
		display.clearDisplay();
		display.display(); // zeigt den Grafikpuffer auf dem OLED-Display
	}

	void loop() {

		display.clearDisplay();

		display.drawLine(0, 0, 128, 0, WHITE);   // oberer Rand
		display.drawLine(0, 63, 128, 63, WHITE); // unterer Rand

		if (x > 120) {nachrechts = false;} 
		if (x < 8)   {nachrechts = true; }
		if (nachrechts) {x++;} else {x--;}
  
		if (y > 55)  nachunten = false;
		if (y < 8) nachunten = true;
		if (nachunten)  {y++;} else {y--;}

		display.fillCircle(x, y, d, WHITE); // Ball
  
		display.drawLine(127, y-5, 127, y+5, WHITE);	// linker Schläger
		display.drawLine(0, y-5, 0, y+5, WHITE);		// rechter Schläger
  
  
		display.display();

		delay(10);
	}	
	
	


Einkaufsliste: