Recalbox Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • recalbox.com
    • Gitlab repository
    • Documentation
    • Discord

    Arduino Pro Micro ATmega32U4

    GamePad/GPIO/USB encoder
    arduino atmega32u4
    1
    2
    411
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 0zzy
      0zzy last edited by

      Hi all!
      My gpio are in use by rgbdual, so i was looking for a different solution to build 2 arcade oontrollers.
      I have build them using 2 Arduino Pro Micro (clone) with ATmega32U4, and this sketch.

      It works fine when i am in game, but every time ES is loaded, the menu scroll up until i move joystick, after that it stops and i can use it normally.
      It happen after the boot process and after i quit a game, so every time ES is reloaded.

      Is there any expert on arduino or have any idea about it?

      Thanks

      1 Reply Last reply Reply Quote 0
      • 0zzy
        0zzy last edited by 0zzy

        I'm wrong, does not happen quitting game or reloading ES after updating game list for example, but only after the boot process.

        It happend even if i have unplugged the microswitch UP

        // Simple arcade stick example that demonstrates how to read twelve
        // Arduino Pro Micro digital pins and map them to the
        // Arduino Joystick library.
        //
        
        // The digital pins 2 - 20 are grounded when they are pressed.
        // Pin 10, A10, Red = UP
        // Pin 15, D15, Yellow = RIGHT
        // Pin 16, D16, Orange = DOWN
        // Pin 14, D14, Green = LEFT
        
        // Pin 9, A9 = Button 1
        // Pin 8, A8 = Button 2
        // Pin 7, D7 = Button 3
        // Pin 3, D3 = Button 4
        // Pin 2, D2 = Button 5
        // Pin 4, A6 = Button 6
        
        // Pin 20, A2 = Select Button 1
        // Pin 19, A1 = Start Button 2
        
        // Pin 5, D5 = Other Button
        // Pin 6, A7 = Other Button
        // Pin 18, A0 = Other Button
        // Pin 21, A3 = Other Button
        
        // NOTE: This sketch file is for use with Arduino Pro Micro only.
        //
        // Original gamepad example by Matthew Heironimus
        // 2016-11-24
        // Adapted for arcade machine setup by Ben Parmeter
        // 2019-05-20
        //--------------------------------------------------------------------
        
        #include <Joystick.h>
        
        Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
          8, 0,                  // Button Count, Hat Switch Count
          true, true, false,     // X and Y, but no Z Axis
          false, false, false,   // No Rx, Ry, or Rz
          false, false,          // No rudder or throttle
          false, false, false);  // No accelerator, brake, or steering
        
        void setup() {
          // Initialize Button Pins
        
        
          pinMode(4, INPUT_PULLUP);
          pinMode(5, INPUT_PULLUP);
          pinMode(6, INPUT_PULLUP);
          pinMode(7, INPUT_PULLUP);
          pinMode(8, INPUT_PULLUP);
          pinMode(9, INPUT_PULLUP);
          pinMode(10, INPUT_PULLUP);
          pinMode(14, INPUT_PULLUP);
          pinMode(15, INPUT_PULLUP);
          pinMode(16, INPUT_PULLUP);
          pinMode(18, INPUT_PULLUP);
          pinMode(19, INPUT_PULLUP);
        
        
          // Initialize Joystick Library
          Joystick.begin();
          Joystick.setXAxisRange(-1, 1);
          Joystick.setYAxisRange(-1, 1);
        }
        
        // Last state of the buttons
        int lastButtonState[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
        //int buttonMap[16] = {10,15,16,14,9,8,7,6,5,4,20,19,2,3,18,21};
        int buttonMap[12] = {10,15,16,14,9,8,7,6,5,4,18,19};
        
        // ButtonMap = 0, Pin 10 = UP
        // ButtonMap = 1, Pin 15 = RIGHT
        // ButtonMap = 2, Pin 16 = DOWN
        // ButtonMap = 3, Pin 14 = LEFT
        
        // ButtonMap = 4, Pin 9 = Button 1
        // ButtonMap = 5, Pin 8 = Button 2
        // ButtonMap = 6, Pin 7 = Button 3
        // ButtonMap = 7, Pin 6 = Button 4
        // ButtonMap = 8, Pin 5 = Button 5
        // ButtonMap = 9, Pin 4 = Button 6
        
        // ButtonMap = 10, Pin 18 = Select Button 1
        // ButtonMap = 11, Pin 19 = Start Button 2
        
        
        
        
        void loop() {
        
          // Read pin values
          for (int index = 0; index < 12; index++)
          {
            int currentButtonState = !digitalRead(buttonMap[index]);
            if (currentButtonState != lastButtonState[index])
            {
              switch (index) {
                case 0: // UP
                  if (currentButtonState == 1) {
                    Joystick.setYAxis(-1);
                  } else {
                    Joystick.setYAxis(0);
                  }
                  break;
                case 1: // RIGHT
                  if (currentButtonState == 1) {
                    Joystick.setXAxis(1);
                  } else {
                    Joystick.setXAxis(0);
                  }
                  break;
                case 2: // DOWN
                  if (currentButtonState == 1) {
                    Joystick.setYAxis(1);
                  } else {
                    Joystick.setYAxis(0);
                  }
                  break;
                case 3: // LEFT
                  if (currentButtonState == 1) {
                    Joystick.setXAxis(-1);
                  } else {
                    Joystick.setXAxis(0);
                  }
                  break;
                case 4: // Black Button 1
                  Joystick.setButton(0, currentButtonState);
                  break;
                case 5: // Black Button 2
                  Joystick.setButton(1, currentButtonState);
                  break;
                case 6: // Black Button 3
                  Joystick.setButton(2, currentButtonState);
                  break;
                case 7: // Black Button 4
                  Joystick.setButton(3, currentButtonState);
                  break;
                case 8: // Black Button 5
                  Joystick.setButton(4, currentButtonState);
                  break;
                case 9: // Black Button 6
                  Joystick.setButton(5, currentButtonState);
                  break;
                case 10: // Select Button
                  Joystick.setButton(6, currentButtonState);
                  break;
                case 11: // Start Button
                  Joystick.setButton(7, currentButtonState);
                  break;
        
              }
              lastButtonState[index] = currentButtonState;
            }
          }
        
          delay(10);
        }
        
        
        1 Reply Last reply Reply Quote 0
        • Locked by  admin admin 
        • First post
          Last post

        Want to support us ?

        71
        Online

        99.6k
        Users

        28.1k
        Topics

        187.1k
        Posts

        Copyright © 2021 recalbox.com