icon
    illuminated Gaming Controller

    Yet another incarnation of gaming controllers with Atmega32u4 based DF Robot Beetle board. This one has 7 illuminated LED tactile buttons in 4 different colors. It also has a safety button to enable/disable the keyboard emulation.

     

    HARDWARE LIST
    1 DFRobot Beetle - The Smallest Arduino
    7 LED Tactile buttons
    1 FR Protoboard
    2 NPN and PNP transistors
    3 1k and 10k resistors
    STEP 1
    Solder the components according to the schematic below
    projectImage
    projectImage
    projectImage
    projectImage
    projectImage
    STEP 2
    Open Arduino IDE and select Tools > Board > Arduino Leonardo
    STEP 3
    Copy the attached code below to the IDE
    STEP 4
    Connect the board to computer with a USB cable
    STEP 5
    Compile and upload the code
    CODE
    #include <Keyboard.h>
    
    // gpio mapping between beetle and buttons
    
    #define LED_CONTROL     3
    #define GAMEPAD_CONTROL 2
    
    #define SW_RED_UP       9
    #define SW_RED_DOWN     0
    #define SW_ORANGE_LEFT  11
    #define SW_ORANGE_RIGHT 10
    #define SW_BLUE_LEFT    A1
    #define SW_BLUE_RIGHT   A0
    #define SW_WHITE_UP     A2
    
    // keyboard key binding
    
    #define RED_UP       KEY_UP_ARROW
    #define RED_DOWN     KEY_DOWN_ARROW
    #define ORANGE_LEFT  KEY_LEFT_ARROW
    #define ORANGE_RIGHT KEY_RIGHT_ARROW
    #define BLUE_LEFT    'c'
    #define BLUE_RIGHT   'v'
    #define WHITE_UP     'q'
     
     
    
    
    
          
    int brightness = 0;    
    int fadeAmount = 5;   
    volatile boolean state = 0;
    //////////////////////////////////////
    void setup()
    {
      pinMode(LED_CONTROL, OUTPUT);
    
      pinMode(GAMEPAD_CONTROL, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(GAMEPAD_CONTROL),selector,FALLING);
    
      pinMode(SW_RED_UP, INPUT_PULLUP);
      pinMode(SW_RED_DOWN, INPUT_PULLUP);
      pinMode(SW_ORANGE_LEFT, INPUT_PULLUP);
      pinMode(SW_ORANGE_RIGHT, INPUT_PULLUP);
      pinMode(SW_BLUE_LEFT, INPUT_PULLUP);
      pinMode(SW_BLUE_RIGHT, INPUT_PULLUP);
      pinMode(SW_WHITE_UP, INPUT_PULLUP);
    
      // safety delay
      delay(5000);
      
    
    }
    
    
    /////////////////////////////////////
    
    void loop()
    {
    if (state == 0)
      {
        gamepad_standby();
      }
    
    if (state == 1)
      {
        gamepad_active();
      }
    
    // scan for button press in gamepad enable mode
    while (state == true)
      {
        
        if(!digitalRead(SW_RED_UP))
        {
          Keyboard.press(RED_UP);
        }
    
        if(!digitalRead(SW_RED_DOWN))
        {
          Keyboard.press(RED_DOWN);
        }
    
        if(!digitalRead(SW_ORANGE_LEFT))
        {
          Keyboard.press(ORANGE_LEFT);
        }
    
        if(!digitalRead(SW_ORANGE_RIGHT))
        {
          Keyboard.press(ORANGE_RIGHT);
        }
        
          if(!digitalRead(SW_BLUE_LEFT))
        {
          Keyboard.press(BLUE_LEFT);
        }
    
        if(!digitalRead(SW_BLUE_RIGHT))
        {
          Keyboard.press(BLUE_RIGHT);
        }
        
          if(!digitalRead(SW_WHITE_UP))
        {
          Keyboard.press(WHITE_UP);
        }
        
        delay(5);
        Keyboard.releaseAll();
        
      }
      
    }
    
    /////////////////////////////////////
    void gamepad_standby(void)
    {
    
      
      Keyboard.releaseAll();
      Keyboard.end();
    
      while(!state)
      {
        
      analogWrite(LED_CONTROL, brightness);
      brightness = brightness + fadeAmount;
      if (brightness <= 0 || brightness >= 255)
        {
        fadeAmount = -fadeAmount;
        }
       delay(10);
      }
    
    }
    
    /////////////////////////////////////
    void gamepad_active(void)
    {
       analogWrite(LED_CONTROL, 255); 
       Keyboard.begin();
    }
    
    ////////////////////////////////////
    
    void selector()
    {
    state =!state;  
    delay(50); // not a good practice but does some debounce
    }
    License
    All Rights
    Reserved
    licensBg
    0