#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Definizioni del gioco
int paddleWidth = 20;
int paddleHeight = 5;
int paddleX = (SCREEN_WIDTH - paddleWidth) / 2;
int paddleY = SCREEN_HEIGHT - 10;
int ballSize = 4;
int ballX = SCREEN_WIDTH / 2;
int ballY = SCREEN_HEIGHT / 2;
int ballSpeedX = 2;
int ballSpeedY = 2;
int paddleSpeed = 8; // Aumentato per velocizzare il movimento
void setup() {
// Inizializza il display OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Errore nella connessione del display OLED"));
while (true);
}
display.display();
delay(2000); // Pausa iniziale
// Configura i pulsanti con pull-up
pinMode(32, INPUT_PULLUP); // Pulsante per la direzione destra
pinMode(33, INPUT_PULLUP); // Pulsante per la direzione sinistra
}
void loop() {
// Pulisci lo schermo
display.clearDisplay();
// Muovi la paddle in base ai pulsanti
if (digitalRead(32) == LOW && paddleX < SCREEN_WIDTH - paddleWidth) {
paddleX += paddleSpeed; // Vai a destra
}
if (digitalRead(33) == LOW && paddleX > 0) {
paddleX -= paddleSpeed; // Vai a sinistra
}
// Muovi la pallina
ballX += ballSpeedX;
ballY += ballSpeedY;
// Collisione con le pareti laterali
if (ballX <= 0 || ballX >= SCREEN_WIDTH - ballSize) {
ballSpeedX = -ballSpeedX; // Cambia direzione orizzontale
}
// Collisione con la parte superiore
if (ballY <= 0) {
ballSpeedY = -ballSpeedY; // Cambia direzione verticale
}
// Collisione con la paddle
if (ballY >= paddleY - ballSize && ballX >= paddleX && ballX <= paddleX + paddleWidth) {
ballSpeedY = -ballSpeedY; // Rimbalza
}
// Se la pallina tocca il fondo, resetta il gioco
if (ballY >= SCREEN_HEIGHT - ballSize) {
ballX = SCREEN_WIDTH / 2;
ballY = SCREEN_HEIGHT / 2;
ballSpeedX = 2;
ballSpeedY = 2;
}
// Disegna la paddle
display.fillRect(paddleX, paddleY, paddleWidth, paddleHeight, WHITE);
// Disegna la pallina
display.fillRect(ballX, ballY, ballSize, ballSize, WHITE);
// Mostra sul display
display.display();
}