# Tutorials # Use the Pico as Keyboard/Mouse input (DIY Makey Makey) Want to have some quick button/mouse inputs to add interactivity to your setup? For prototyping this is often done by using a [Makey Makey](https://makeymakey.com/). But the board's quite expensive, and not incredibly versatile. Luckily you can build a very similar input device using a pico. After following the steps below the board will get recognized as a HID (keyboard, mouse, gamepad) by any computer and OS (Mac/Win/Linux). This process consists of the following steps: - Installing CircuitPython and copying the AdaFruit Human Interface Device (HID) libraries to the board. - Changing the code to select the inputs you want to use. You have the following options: - Keyboard - any key on a physical keyboard, or combination of keys (ctrl-c and ctrl-v) - Mouse - buttons, scroll and mouse movement - Media buttons - play, pause, skip, sound level - Gamepad buttons (numbered buttons and analog joysticks) This tutorial uses the first pages of the [DIY mechanical keyboard](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/installing-circuitpython) on the Adafruit page. #### Installing Circuitpython and HID libraries First install [Circuitpython to the Pico](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/installing-circuitpython), then [copy the libraries to the board](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/installing-libraries). Make sure that the libraries match the version of circuitpython you are running. #### Editing the code Copy the [code from this page](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/code-the-pico-keyboard) and save it to your Pico using your favourite Python editor. Don't have one yet? The tutorial page uses [Mu editor](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/installing-mu-editor), but you can use [Thonny](https://thonny.org/) as well. As copied, this code maps the following keys to the following pins: --**Note that the code skips pin 15--**
**Pin** | **Input** |
GP0 | (KEY, (Keycode.GUI, Keycode.C)), |
GP1 | (KEY, (Keycode.GUI, Keycode.V)), |
GP2 | (KEY, \[Keycode.THREE\]), |
GP3 | (KEY, \[Keycode.FOUR\]), |
GP4 | (KEY, \[Keycode.FIVE\]), |
GP5 | (MEDIA, ConsumerControlCode.VOLUME\_DECREMENT), |
GP6 | (MEDIA, ConsumerControlCode.VOLUME\_INCREMENT), |
GP7 | (KEY, \[Keycode.R\]), |
GP8 | (KEY, \[Keycode.G\]), |
GP9 | (KEY, \[Keycode.B\]), |
GP10 | (KEY, \[Keycode.UP\_ARROW\]), |
GP11 | (KEY, \[Keycode.X\]), \# plus key |
GP12 | (KEY, \[Keycode.Y\]), |
GP13 | (KEY, \[Keycode.Z\]), |
GP14 | (KEY, \[Keycode.I\]), |
**GP15** | **EMPTY - apparently a funky pin according to the tutorial** |
GP16 | (KEY, \[Keycode.O\]), |
GP17 | (KEY, \[Keycode.LEFT\_ARROW\]), |
GP18 | (KEY, \[Keycode.DOWN\_ARROW\]), |
GP19 | (KEY, \[Keycode.RIGHT\_ARROW\]), |
GP20 | (KEY, \[Keycode.ALT\]), |
GP21 | (KEY, \[Keycode.U\]), |