Electronic – arduino – using the PS2 keyboard library with Arduino Leonardo

arduinokeyboard

I'm having difficulties getting the PJRC PS2 keyboard library working reliably with the Arduino Leonardo. I'm relatively new to using the Arduino, but this library seems to be the recommended way to read PS2 keystrokes.

When I run the example sketch to echo keystrokes to the serial terminal, I get about 50% of the characters echoed correctly. The other half typically consists of random characters. In addition, I'd say only 30% of the keystrokes are actually detected at all. I tested many keys on the keyboard to see if there was a mechanical fault but this mis-identification and detection lag happened to all of them.

I get very different results using code from this blog which just implements the PS2 protocol in a barebones way. All of the scan codes echoed from this program are consistent (and correct after I manually looked them up) and there is no lag in detection.

So I could implement my own lookup tables with the second example but I'm curious if there is a known fix for the PJRC lib. There are more features in that library that I would like to make use of.

Best Answer

I got the PJRC lib working through a stroke of luck -- I don't understand why this works. In the example sketch I use these definitions:

const int DataPin = 9;
const int IRQpin =  3;

But when I actually make the physical connections, I have to put the IRQpin (aka CLK) on pin 2 of the Leonardo. (DATA stays on pin 9 as expected based on the software definitions.) This software setup and the seemingly-wrong connection is letting me use the library as expected.

When I do move the CLK wire from the keyboard over to pin 3 I get the delayed and incorrect measurements mentioned in the question.

So I'm pretty confused as to why this mismatch in software and wiring works, but I'll keep searching..

Edit: Got things working properly. The Leonardo was not supported in the 2.3 version of the PJRC lib. I added some of the missing interrupt definitions in my fork.

Edit 2: Paul of PJRC told me that Leonardo support is now available in the PS2Keyboard lib he hosts.