yang kalah kuliah di tel aviv — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by kiybiy36.

Components

Sketch code

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <Wire.h>
#include <avr/pgmspace.h>

// --- Konfigurasi Dasar ---
// Pengaturan layar OLED (128x64 piksel)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1 // Pin reset OLED (-1 jika tidak menggunakan pin reset khusus)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Pin Joystick
#define JOY_HORZ A0 // Pin analog untuk sumbu horizontal joystick
#define JOY_VERT A1 // Pin analog untuk sumbu vertikal joystick
#define JOY_SEL 2   // Pin digital untuk tombol select joystick (biasanya D2)

// Nilai tengah pembacaan ADC joystick (sekitar 512 untuk 10-bit ADC)
const int ADC_MIDPOINT = 512;
// Ambang batas untuk deteksi gerakan joystick (mengurangi sensitivitas)
const int JOY_THRESHOLD = 100;
// Waktu tunda untuk debounce input (mencegah pembacaan ganda saat tombol ditekan)
const int INPUT_DEBOUNCE_DELAY = 200; // ms
// Waktu tunda untuk splash screen di awal
const int SPLASH_SCREEN_DELAY = 2000; // ms

// Posisi teks untuk layar Game Over
const int GAME_OVER_POS_X = 20;
const int GAME_OVER_TEXT_Y = 20;
const int GAME_OVER_SCORE_Y = 30;
const int GAME_OVER_ACTION_Y = 40;

// --- Struktur Data Menu ---
// Teks item menu disimpan di PROGMEM untuk menghemat SRAM.
// PROGMEM adalah area memori flash Arduino tempat data konstan dapat disimpan.
const char menuItem0[] PROGMEM = "Brick Breaker";
const char menuItem1[] PROGMEM = "Space Invaders";
const char menuItem2[] PROGMEM = "Snake";
const char menuItem3[] PROGMEM = "Flappy Bird";
const char menuItem4[] PROGMEM = "Dino Run";
// Array pointer ke string menu, juga di PROGMEM.
const char *const menuItems[] PROGMEM = {menuItem0, menuItem1, menuItem2, menuItem3, menuItem4};
const int TOTAL_MENU_ITEMS = 5;

// --- Status Game Global ---
// Enum untuk merepresentasikan berbagai status game, lebih mudah dibaca daripada angka.
enum GameStateType
{
  STATE_MENU,
  STATE_BRICK_BREAKER,
  STATE_SPACE_INVADERS,
  STATE_SNAKE,
  STATE_FLAPPY_BIRD,
  STATE_DINO_RUN
};
GameStateType currentGameState = STATE_MENU; // Status game saat ini, dimulai dari menu.
int menuSelection = 0;                       // Pilihan menu saat ini (0 hingga TOTAL_MENU_ITEMS - 1).
int score = 0;                               // Skor pemain saat ini.
bool gameOver = false;                       // Status apakah game sedang berakhir (true) atau tidak (false).

// --- Variabel Game: Brick Breaker ---
#define BRICK_ROWS 3
#define BRICK_COLS 8
#define BRICK_WIDTH 16
#define BRICK_HEIGHT 6
bool bricks[BRICK_ROWS][BRICK_COLS];   // Array 2D untuk status setiap bata.
int paddleX = SCREEN_WIDTH / 2 - 15;   // Posisi X paddle.
const int paddleY = SCREEN_HEIGHT - 4; // Posisi Y paddle (tetap).
const int paddleWidth = 30;
const int paddleHeight = 4;
float ballX = SCREEN_WIDTH / 2;   // Posisi X bola.
float ballY = SCREEN_HEIGHT - 10; // Posisi Y bola.
float ballVelX = 2;               // Kecepatan horizontal bola.
float ballVelY 

More projects by kiybiy36