// NES Controller Button Definitions
#define BUTTON_UP 15
#define BUTTON_LEFT 16
#define BUTTON_RIGHT 17
#define BUTTON_DOWN 18
#define BUTTON_SEL 14
#define BUTTON_STAR 12
#define BUTTON_A 26
#define BUTTON_B 13
// Pairing Button and LED
#define PAIRING_BUTTON 4 // Button for pairing mode
#define LED_PIN 2 // Blue LED pin
unsigned long buttonPressStart = 0;
bool isPairingMode = false;
void setup() {
Serial.begin(115200);
// Initialize pins for buttons with internal pull-ups
pinMode(PAIRING_BUTTON, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_UP, INPUT_PULLUP);
pinMode(BUTTON_DOWN, INPUT_PULLUP);
pinMode(BUTTON_LEFT, INPUT_PULLUP);
pinMode(BUTTON_RIGHT, INPUT_PULLUP);
pinMode(BUTTON_SEL, INPUT_PULLUP);
pinMode(BUTTON_STAR, INPUT_PULLUP);
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
}
void loop() {
handlePairingButton(); // Check if the pairing button is pressed
handleNESButtons(); // Simulate NES button presses
delay(10); // Small delay to avoid rapid polling
}
void handlePairingButton() {
if (digitalRead(PAIRING_BUTTON) == LOW) {
if (buttonPressStart == 0) {
buttonPressStart = millis(); // Start the timer
}
if (millis() - buttonPressStart > 5000 && !isPairingMode) {
startPairingMode();
}
} else {
buttonPressStart = 0; // Reset timer if button released
}
}
void startPairingMode() {
isPairingMode = true;
digitalWrite(LED_PIN, HIGH); // Turn on LED to indicate pairing mode
Serial.println("Entering pairing mode...");
}
void handleNESButtons() {
// Simulate button presses and print their states
if (!digitalRead(BUTTON_A)) Serial.println("A Button Pressed");
if (!digitalRead(BUTTON_B)) Serial.println("B Button Pressed");
if (!digitalRead(BUTTON_SEL)) Serial.println("Select Pressed");
if (!digitalRead(BUTTON_STAR)) Serial.println("Start Pressed");
// Simulate D-pad presses
if (!digitalRead(BUTTON_UP)) Serial.println("D-Pad Up");
else if (!digitalRead(BUTTON_DOWN)) Serial.println("D-Pad Down");
else if (!digitalRead(BUTTON_LEFT)) Serial.println("D-Pad Left");
else if (!digitalRead(BUTTON_RIGHT)) Serial.println("D-Pad Right");
}