Hello I have flashed my Arduino Uno with USB keyboard firmware from this tutorial http://mitchtech.net/arduino-usb-hid-keyboard/#comment-6786, and I have been successful sending individual key presses but, not when trying to press an hold a key. I am attempting to use this firmware to create a custom Game Pad to USB adapter, the only issue is sending simultaneous keystrokes (not sending them one at a time). If you know how to accomplish this task I would be very happy. The technical term for this is "Key Rollover"

  • Howmany buttons are you checking and to which pins do you have them connected?
    – aaa
    Commented Apr 30, 2015 at 11:39
  • My game pad has 12 buttons, and they are connected with shift registers so only 3 pins. Checking the button states isn't the issue. I am trying to use the game pad as a keyboard with the Keyboard firmware from the tutorial above but, to play games I need to be able to press many keys simultaneously. Commented Apr 30, 2015 at 22:23
  • The easiest option would be to switch to an Arduino that has a USB-capable main MCU, such as the Leonardo. Commented Apr 30, 2015 at 22:58
  • I understand why this would be a good way to do this since the people from arduino provide a keyboard library for the Leonardo but, with my arduino uno I have already got to be plug n' play as a keyboard. The problem is getting more than one button press at a time. I need to add simultaneous key presses "Key Rollover" Commented Apr 30, 2015 at 23:06

3 Answers 3


You don't want to send random keys do you?

Well consider using the code below as your base. It's using Port Manipulation to read the buttons (Digital 0 to 7).

void setup() 
  Serial.begin(9600);//Start serial connection.
  DDRD = 0b00000000; //Set Data Direction Register of port D to inputs (attach keys to digital pins 0to7;
  delay(200); //Misc delay.

void loop() 
  Serial.write(PIND, 8);    // Send states of PORTD (digital 0 to 7)

I strongly suggest you use pull-down/up resistors on the buttons also. Adjust your code to the amount of keys you're using, or pull the pins low if not used. To avoid receiving random/floating pin values.

  • The problem is not with the '328P itself but with the communications channel with the USB chip. Commented Apr 30, 2015 at 12:01
  • @IgnacioVazquez-Abrams Thanks, I skipped a bit too fast through the article. The new answer should fit the needs of the 'asker'.
    – aaa
    Commented Apr 30, 2015 at 14:55
  • Sorry, this is not what I am having issues with. I have all ready have the game pad and have been able to read the input values from the controller. When I press one button sending the keystroke is easy. It is when I need to have many key presses as held keys. Other wise the game will think I am repeatedly pressing different buttons. Commented Apr 30, 2015 at 20:39
  • Than you should only send the state of your key when it's changed?
    – aaa
    Commented May 1, 2015 at 6:15

After closer research on this topic I have found the answer to my problem but,thank you to all that have tried to help. In order to do "Key Rollover" I needed to write the additional key states to the remaining values of the buffer array then write the values with Serial.write(buf,8). I can now use my Arduino Uno + My Game Pads as controllers for all my computer games.


Could you post an example of your updated code? I'm working on a similar project but a complete n00b as far as using the Arduino goes.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.