#include #include #define VRX_PIN A0 // GPIO1 #define VRY_PIN A1 // GPIO2 #define BUTTON_PIN 3 // GPIO3 uint8_t receiverMAC[] = { 0xCC, 0xBA, 0x97, 0x16, 0x29, 0x60 }; typedef struct { int x; int y; bool weapon_on; } JoystickData; JoystickData joyData; bool weaponState = false; bool lastButtonState = HIGH; void setup() { Serial.begin(115200); pinMode(VRX_PIN, INPUT); pinMode(VRY_PIN, INPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); WiFi.mode(WIFI_STA); WiFi.disconnect(); if (esp_now_init() != ESP_OK) { Serial.println("ESP-NOW init failed!"); return; } esp_now_peer_info_t peerInfo = {}; memcpy(peerInfo.peer_addr, receiverMAC, 6); peerInfo.channel = 0; peerInfo.encrypt = false; if (!esp_now_is_peer_exist(receiverMAC)) { if (esp_now_add_peer(&peerInfo) != ESP_OK) { Serial.println("Failed to add peer"); return; } } Serial.println("✅ Sender Ready"); } void loop() { int currentButtonState = digitalRead(BUTTON_PIN); if (currentButtonState == LOW && lastButtonState == HIGH) { weaponState = !weaponState; delay(200); // debounce } lastButtonState = currentButtonState; joyData.x = analogRead(VRX_PIN); joyData.y = analogRead(VRY_PIN); joyData.weapon_on = weaponState; esp_now_send(receiverMAC, (uint8_t *)&joyData, sizeof(joyData)); delay(100); }