This is an old revision of the document!
Ciupitu Andi Mihai
331CD
!POTENTIOMETRELE din schema reprezinta MODULE JOYSTICK!
Pini folositi:
Pinul GND este folosit pentru a conecta masa la breadboard pentru a completa circuitul.
Pinul 5V furnizează 5V către breadboard asigurând alimentarea necesară.
Pinul 12 al placii Arduino fiind un pin PWM(Pulse Width Modulation) permite controlul volumului conectat la pinul + buzzerului.
Conectarea pinilor A4 și A5 la SDA și SCL permite transferul eficient de date între placa Arduino și dispozitivul I2C.
Librării şi surse 3rd-party:
#include <Wire.h> este utilizată pentru a configura și gestiona comunicația I2C pe Arduino.
#include <Adafruit_GFX.h> este utilizată pentru a simplifica desenarea și manipularea graficelor pe afișajul OLED.
#include <Adafruit_SSD1306.h> este utilizată pentru a gestiona direct afișajul OLED SSD1306. Aceasta se bazează pe Adafruit_GFX.h pentru a oferi funcții grafice, dar adaugă funcționalități specifice pentru controlul afișajului OLED.
setup() este apelată o singură dată, la începutul programului, pentru a inițializa componentele hardware și a pregăti mediul de execuție. {
// Initialize the display display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); unsigned long start = millis(); // Initialize pins pinMode(BEEPER, OUTPUT); pinMode(SW_pin, INPUT); pinMode(RESET_BUTTON, INPUT_PULLUP); digitalWrite(SW_pin, HIGH); // Clear display and draw initial court and score display.clearDisplay(); drawCourt(); drawScore(); // Display initial screen for 2 seconds while (millis() - start < 2000); display.display();
// Set initial update times ball_update = millis(); paddle_update = ball_update;
}
loop() rulează continuu și conține logica principală a jocului. { bool update = false;
unsigned long time = millis();
// Check if ball needs to be reset if (resetBall) { if (player1Score == maxScore || player2Score == maxScore) { gameOver(); } else { resetGame(); } }
// Update ball position if (time > ball_update) { updateBallPosition(); update = true; }
// Update paddle positions if (time > paddle_update) { updatePaddlePositions(); update = true; }
// Update display if necessary if (update) { drawScore(); display.display(); }
}
void resetGame() {
display.fillScreen(BLACK); drawScore(); drawCourt(); ball_x = random(45, 50); ball_y = random(23, 33); do { ball_dir_x = random(-1, 2); } while (ball_dir_x == 0);
do { ball_dir_y = random(-1, 2); } while (ball_dir_y == 0);
resetBall = false;
}
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.