# Scrambled Number Security Keypad

## Overview

https://www.youtube.com/watch?v=5uwrZtHLxbU

Electronic keypads are often used to enter a password to perform a function, such as open a door in a security application. No key is needed, only memorization of a passcode.

Many keypad implementations suffer from several security issues which make a keypad entry system much less secure. Using the same keys on the keypad over and over may lead to someone in the vicinity seeing the pattern of keystrokes used. Also, over time the used keys will start to wear down, allowing a person to more easily guess the digits used on the keypad.

There are methods to thwart the shortcomings noted above. One such was implemented by Stephen B. Hirsch circa 1980. He developed a lock which scrambled where the digits would be located on the keypad. This prevented the use of pattern memorization and created even wear on the keys. There is a [demonstration video on YouTube](https://www.youtube.com/watch?v=4jUx4-PCr8A "demonstration video on YouTube").

![circuitpython_scramblepad.png](https://cdn-learn.adafruit.com/assets/assets/000/104/312/medium640/circuitpython_scramblepad.png?1630451197)

The [Hirsch Scramblepad](https://blog.adafruit.com/2019/03/13/high-security-the-hirsch-scramblepad-security/ "Scramblepad") required 7-segment displays on the keys, a costly proposition. But that can be simulated on the Adafruit MacroPad.

This project will use the much, much less expensive (and much more fun) Adafruit MacroPad to simulate some of the high security features of locks such as the Hirsch Scramblepad. As the keys do not have displays in them (only colorful LEDs underneath), the scrambled numbers will be displayed on the MacroPad display

![](https://cdn-learn.adafruit.com/assets/assets/000/104/317/medium800/circuitpython_project.jpg?1630509410)

The MacroPad will include an indication of success and failure. Optionally, the digital pins on the STEMMA QT port can be used to trigger opening of a solenoid lock with a bit of standard electronics, if desired.

## Parts
### Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED

[Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED](https://www.adafruit.com/product/5128)
Strap yourself in, we're launching in T-minus 10 seconds...Destination? A new Class M planet called MACROPAD! M here stands for Microcontroller because this 3x4 keyboard controller features the newest technology from the Raspberry Pi sector: say hello to the RP2040. It's a speedy...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5128)
[Related Guides to the Product](https://learn.adafruit.com/products/5128/guides)
![Video of a hand playing with a rainbow-glowing keypad.](https://cdn-shop.adafruit.com/product-videos/640x480/5128-08.jpg)

### USB Type A to Type C Cable - approx 1 meter / 3 ft long

[USB Type A to Type C Cable - approx 1 meter / 3 ft long](https://www.adafruit.com/product/4474)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4474)
[Related Guides to the Product](https://learn.adafruit.com/products/4474/guides)
![Angled shot of a coiled black, USB-C to USB-A cable.](https://cdn-shop.adafruit.com/640x480/4474-02.jpg)

Optional keycaps for the lower left and right of the keypad:

To make the optional solenoid lock driver:

### Lock-style Solenoid - 12VDC

[Lock-style Solenoid - 12VDC](https://www.adafruit.com/product/1512)
Solenoids are basically electromagnets: they are made of a big coil of copper wire with an armature (a slug of metal) in the middle. When the coil is energized, the slug is pulled into the center of the coil. This makes the solenoid able to pull from one end.  
  
This solenoid in...

Out of Stock
[Buy Now](https://www.adafruit.com/product/1512)
[Related Guides to the Product](https://learn.adafruit.com/products/1512/guides)
![Angled shot of lock-style solenoid.](https://cdn-shop.adafruit.com/640x480/1512-04.jpg)

### Part: TIP120
quantity: 1
 Power Darlington Transistor
[TIP120](https://www.adafruit.com/product/976)

### Part: Breadboard
quantity: 1
Half-size
[Breadboard](https://www.adafruit.com/product/64)

### Part: 1N4001 Diode 
quantity: 1
10 Pack (1 used)
[1N4001 Diode ](https://www.adafruit.com/product/755)

### Part: Through-Hole Resistor - 2.2K ohm 
quantity: 1
5% 1/4W - Pack of 25
[Through-Hole Resistor - 2.2K ohm ](https://www.adafruit.com/product/2782)

### Part: Female DC Power adapter
quantity: 1
 - 2.1mm jack to screw terminal block
[Female DC Power adapter](https://www.adafruit.com/product/368)

### Part: STEMMA QT / Qwiic JST SH Cable
quantity: 1
4-pin to Male Headers Cable - 150mm Long
[STEMMA QT / Qwiic JST SH Cable](https://www.adafruit.com/product/4209)

### Part:  Hook-up Wire Spool Set
quantity: 1
 22AWG Solid Core - 6 x 25 ft
[ Hook-up Wire Spool Set](https://www.adafruit.com/product/1311)

# Scrambled Number Security Keypad

## Macropad Assembly

https://youtu.be/_aW90ufD6X0?t=45

The Macropad features hot-swap sockets for the switches -- gone are the days of having to _commit_ to one type of switch and solder it down! Now, you can plug in your Cherry MX red keyswitches, use them for a while, get bored, decide its time to test out some lubed, filmed, re-sprung Invyr Holy Pandas, and swap them just like that!

## Switches into Plate

First, insert a couple of keyswitches through the keyswitch plate. The plate mechanically connects the switches to each other, which lends some nice lateral stability to the keys.

![circuitpython_mp01.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/450/medium640/circuitpython_mp01.jpg?1626465592)

![circuitpython_mp02.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/451/medium640/circuitpython_mp02.jpg?1626465609)

## Connect to Board

Carefully press the two switches into the switch sockets, being very careful to align the legs so none bend!

![circuitpython_mp03.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/452/medium640/circuitpython_mp03.jpg?1626465642)

![circuitpython_mp04.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/453/medium640/circuitpython_mp04.jpg?1626465661)

## Add Switches

Continue adding switches, being mindful of their orientation.

![circuitpython_mp05.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/454/medium640/circuitpython_mp05.jpg?1626465704)

![circuitpython_mp06.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/455/medium640/circuitpython_mp06.jpg?1626465720)

![](https://cdn-learn.adafruit.com/assets/assets/000/103/456/medium800/circuitpython_mp08.jpg?1626465770)

## Backplate

You can add the optional backplate using four M3 x 6mm screws.

![circuitpython_mp09.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/457/medium640/circuitpython_mp09.jpg?1626465803)

![circuitpython_mp10.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/458/medium640/circuitpython_mp10.jpg?1626465823)

![](https://cdn-learn.adafruit.com/assets/assets/000/103/459/medium800/circuitpython_mp11.jpg?1626465846)

## Keycaps

Now, you can add your keycaps! simply press them onto the keyswitch stems until they are fully seated.

![circuitpython_mp12.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/460/medium640/circuitpython_mp12.jpg?1626465875)

![circuitpython_mp13.jpg](https://cdn-learn.adafruit.com/assets/assets/000/103/461/medium640/circuitpython_mp13.jpg?1626465894)

![](https://cdn-learn.adafruit.com/assets/assets/000/103/462/medium800/circuitpython_mp14.jpg?1626465905)

# Scrambled Number Security Keypad

## Lock Circuit

When the correct code is entered into the lock, the key on the lower right will glow green and the screen will say Open. For educational use that's good. But for an action, such as opening a lock, additional hardware is required.

## Optional Solenoid Lock Driver Circuit

The MacroPad has very limited digital input and output, mainly one STEMMA QT/Qwiic I2C connector on the left side of the keypad under the display. There are two signals, SDA and SCL for I2C, along with power and ground.&nbsp;

The optional lock activation uses the SDA pin as a digital output line, in addition to the ground connection. It's non-standard to how things are to work for a STEMMA QT connection, but this use is electrically and programmatically just fine.

The circuit to take the digital signal and translate that into powering a higher voltage, high current lock/solenoid is shown below.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/310/medium800/circuitpython_Scramblepad_bb.jpg?1630443818)

The SDA and Ground (Blue and Black, respectively) from the STEMMA QT connection are on the left. The digital signal feeds a TIP120 Darlington transistor at it's base through a 2.2K ohm current limiting resistor. The emitter from the transistor is grounded and the collector is connected through the solenoid to power. When the digital signal from the MacroPad SDA goes high, it triggers the transistor like a switch, sending power through the solenoid to ground, making the solenoid retract the bolt.

A 1N4001 diode is used across the solenoid. When the power no longer flows through the solenoid, a collapsing magnetic field will cause a reverse voltage. The reverse voltage flows through the diode and not the transistor, protecting the transistor from the dangerous spike.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/315/medium800/circuitpython_project.jpg?1630509300)

## Power Supply Requirements
The voltage and current in to the circuit via the jack shown should match the voltage and current requirements of the solenoid you use.

The Adafruit #1512 solenoid uses 9 to 12 volts DC and draws 650mA at 12V, 500 mA at 9V when activated (per the [product page](https://www.adafruit.com/product/1512 "product page")). I used a 9 volt, 1 amp supply as the current from the supply should be more than the maximum the solenoid needs (to keep the power supply from reaching it's maximum often, which would lowering its lifespan). [Adafruit #63](https://www.adafruit.com/product/63 "Adafruit #63") works great.

If you decide on a 12 volt supply (which will retract the bolt a bit more forcefully), it needs 650 ma. The [Adafruit #798](https://www.adafruit.com/product/798 "Adafruit #798") 12V 1A supply would do well.

## For high power/current needs

For any high power switching, you should consider two solutions:

For higher voltage DC devices, consider a circuit similar to the one above but replace the solenoid with a 9-12V relay. You can connect the relay outputs to a suitable lock and power source.

For wall power (mains, 110/230 volt), a relay with suitable output handling capabilities could be used. The safer alternative is to use a [Controllable Four Outlet Power Relay Module](https://www.adafruit.com/product/2935 "Controllable Four Outlet Power Relay Module") version 2 - (Power Switch Tail Alternative). It will take the digital output from the STEMMA QT and switch several outlets (110 volt only).

Danger: 

# Scrambled Number Security Keypad

## CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

## CircuitPython Quickstart

Follow this step-by-step to quickly get CircuitPython running on your board.

[Download the latest version of CircuitPython for this board via circuitpython.org](https://circuitpython.org/board/adafruit_macropad_rp2040/)
 **Click the link above to download the latest CircuitPython UF2 file.**

Save it wherever is convenient for you.

![install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/655/medium640/install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg?1618943202)

![](https://cdn-learn.adafruit.com/assets/assets/000/103/264/medium800/adafruit_products_MacroPad_boot_reset.jpg?1625068553)

Info: 

To enter the bootloader, hold down the **BOOT/**** BOOTSEL button**(highlighted in red above), and while continuing to hold it (don't let go!), press and release the**reset button**(highlighted in red or blue above).&nbsp;**Continue to hold the BOOT/BOOTSEL button until the RPI-RP2 drive appears!**

If the drive does not appear, release all the buttons, and then repeat the process above.

You can also start with your board unplugged from USB, press and hold the BOOTSEL button (highlighted in red above), continue to hold it while plugging it into USB, and wait for the drive to appear before releasing the button.

A lot of people end up using charge-only USB cables and it is very frustrating! **Make sure you have a USB cable you know is good for data sync.**

You will see a new disk drive appear called **RPI-RP2**.

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **RPI-RP2.**

![install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/656/medium640/install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg?1618943666)

![install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/657/medium640/install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg?1618943674)

The **RPI-RP2** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

That's it, you're done! :)

![install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/658/medium640/install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg?1618943864)

## Safe Mode

You want to edit your **code.py** or modify the files on your **CIRCUITPY** drive, but find that you can't. Perhaps your board has gotten into a state where **CIRCUITPY** is read-only. You may have turned off the **CIRCUITPY** drive altogether. Whatever the reason, safe mode can help.

Safe mode in CircuitPython does not run any user code on startup, and disables auto-reload. This means a few things. First, safe mode _bypasses any code in_ **boot.py** (where you can set **CIRCUITPY** read-only or turn it off completely). Second, _it does not run the code in_ **code.py**. And finally, _it does not automatically soft-reload when data is written to the_ **CIRCUITPY** _drive_.

Therefore, whatever you may have done to put your board in a non-interactive state, safe mode gives you the opportunity to correct it without losing all of the data on the **CIRCUITPY** drive.

### Entering Safe Mode
To enter safe mode when using CircuitPython, plug in your board or hit reset (highlighted in red above). Immediately after the board starts up or resets, it waits 1000ms. On some boards, the onboard status LED (highlighted in green above) will blink yellow during that time. If you press reset during that 1000ms, the board will start up in safe mode. It can be difficult to react to the yellow LED, so you may want to think of it simply as a slow double click of the reset button. (Remember, a fast double click of reset enters the bootloader.)

### In Safe Mode

If you successfully enter safe mode on CircuitPython, the LED will intermittently blink yellow three times.

If you connect to the serial console, you'll find the following message.

```terminal
Auto-reload is off.
Running in safe mode! Not running saved code.

CircuitPython is in safe mode because you pressed the reset button during boot. Press again to exit safe mode.

Press any key to enter the REPL. Use CTRL-D to reload.
```

You can now edit the contents of the **CIRCUITPY** drive. Remember, _your code will not run until you press the reset button, or unplug and plug in your board, to get out of safe mode._

## Flash Resetting UF2

If your board ever gets into a really _weird_ state and CIRCUITPY doesn't show up as a disk drive after installing CircuitPython, try loading this 'nuke' UF2 to RPI-RP2. which will do a 'deep clean' on your Flash Memory. **You will lose all the files on the board** , but at least you'll be able to revive it! After loading this UF2, follow the steps above to re-install CircuitPython.

[Download flash erasing "nuke" UF2](https://cdn-learn.adafruit.com/assets/assets/000/101/659/original/flash_nuke.uf2?1618945856)
# Scrambled Number Security Keypad

## Code

## Text Editor

Adafruit recommends using the&nbsp; **Mu** &nbsp;editor for editing your CircuitPython code. You can get more info in&nbsp;[this guide](https://learn.adafruit.com/welcome-to-circuitpython/installing-mu-editor).

Alternatively, you can use any text editor that saves simple text files.

Info: 

## Download the Project Bundle

Your project will use a specific set of CircuitPython libraries and the&nbsp; **code.py** &nbsp;file, along with a folder full of key configuration files. To get everything you need, click on the&nbsp; **Download Project Bundle** &nbsp;link below, and uncompress the .zip file.

Plug your assembled MacroPad into your computer via a known good USB cable. The board should show up as a new flash drive in your file explorer/finder named **CIRCUITPY.**

Drag the contents of the uncompressed bundle directory onto your MacroPad&nbsp; **CIRCUITPY** &nbsp;drive, replacing any existing files or directories with the same names, and adding any new ones that are necessary.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/MacroPad_Scramble_Lock/code.py

## Passcode Changes and Security

The passcode is coded into the CircuitPython program, the default is "2468". You can change this by editing the **code.py** file with Mu or another text file editor. The passcode must be composed of digits 0 to 9 and may be of any length greater than one.

Note that embedding the passcode in the file is not the most secure. The best method would be to read it from a file, such as **settings.toml** or even some encrypted methodology. This project does not go to great lengths for this demonstration and the user may augment their own program to provide passcode security, multiple passcodes, and other improvements.

## Files

The **CIRCUITPY** drive should have the following files in the root directory and **lib** folder.

![Directory](https://adafruit.github.io/Adafruit_Learning_System_Guides/MacroPad_Scramble_Lock.png )

# Scrambled Number Security Keypad

## Use

The project works much like a Hirsch Scramblepad but with a couple of simplifications. Here is the operation:

When the MacroPad is powered up via the USB port, the title bar on the display will say Scramblepad. The spaces below correspond to the 12 keys in the keypad. The program will label those appropriately during each mode of operation.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/314/medium800/circuitpython_start.jpg?1630509208 START Mode - press the lower left key to begin)

## START Mode

The mode where there is inly the word START in the lower left corner is the initial starting mode. No keypad input works except the lower left key. That must be pressed to enable the ability to enter a passcode.

I used [black windowed lamp keycaps](https://www.adafruit.com/product/5112 "black windowed lamp keycaps") for this key and for the lower right key. Lower right only indicates open and closed, it is not used to enter data). Differentiating these keys with darkened, windows keys helps with understanding operation. If you could find a key that actually says START it'd be a huge bonus.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/313/medium800/circuitpython_project.jpg?1630508954 ENTRY mode)

## ENTRY Mode

Once the START key has been pressed, the keyboard will flash and random sequences of keys will be shown on the display three times.&nbsp;

Finally, ten numbers will be on the display, corresponding to the lights on the keypad.

The user is expected to enter the password one digit at a time, looking at the display to see where the next number is and pushing the corresponding key on the keypad. Do not assume the keys are numbered like a phone dialing pad, this is scrambled input.

https://youtu.be/5uwrZtHLxbU

## OPEN Mode

When the passcode is entered correctly, the lower right key will turn green and OPEN will be on the display for that key. If you have connected a solenoid per the Lock Circuit page, the lock should click open for 2 seconds.

After 7 seconds the lock will go back to START Mode.

https://www.youtube.com/watch?v=Bj86nu3ikGE

## FAIL Mode

If after the number of digits in the passcode the wrong passcode is entered, the lower left key will be marked FAIL and blink red 3 times. Then the keypad will go back to the START Mode.

## Pressing START during ENTRY

If you wish to start over entering a passcode, press the lower left START key at any time. The keypad will scramble 3 times and you can try again noting the numbers in their new locations.


## Featured Products

### Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED

[Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED](https://www.adafruit.com/product/5128)
Strap yourself in, we're launching in T-minus 10 seconds...Destination? A new Class M planet called MACROPAD! M here stands for Microcontroller because this 3x4 keyboard controller features the newest technology from the Raspberry Pi sector: say hello to the RP2040. It's a speedy...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5128)
[Related Guides to the Product](https://learn.adafruit.com/products/5128/guides)
### USB Type A to Type C Cable - approx 1 meter / 3 ft long

[USB Type A to Type C Cable - approx 1 meter / 3 ft long](https://www.adafruit.com/product/4474)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4474)
[Related Guides to the Product](https://learn.adafruit.com/products/4474/guides)
### Lock-style Solenoid - 12VDC

[Lock-style Solenoid - 12VDC](https://www.adafruit.com/product/1512)
Solenoids are basically electromagnets: they are made of a big coil of copper wire with an armature (a slug of metal) in the middle. When the coil is energized, the slug is pulled into the center of the coil. This makes the solenoid able to pull from one end.  
  
This solenoid in...

Out of Stock
[Buy Now](https://www.adafruit.com/product/1512)
[Related Guides to the Product](https://learn.adafruit.com/products/1512/guides)
### TIP120 Power Darlington Transistors - 3 pack

[TIP120 Power Darlington Transistors - 3 pack](https://www.adafruit.com/product/976)
Transistors are powerful little electronic switches, and when our little NPN transistors aren't power enough for your project, we have been known to use these beefy TIP120 Darlington transistors. Great for whenever you need to control medium to high-power electronics such as motors,...

Out of Stock
[Buy Now](https://www.adafruit.com/product/976)
[Related Guides to the Product](https://learn.adafruit.com/products/976/guides)
### Half Sized Premium Breadboard - 400 Tie Points

[Half Sized Premium Breadboard - 400 Tie Points](https://www.adafruit.com/product/64)
This is a cute, half-size breadboard with&nbsp;400 tie points, good for small projects. It's 3.25" x 2.2" / 8.3cm&nbsp;x 5.5cm&nbsp;with a standard double-strip in the middle and two power rails on both sides.&nbsp;You can pull the power rails off easily to make the breadboard as...

In Stock
[Buy Now](https://www.adafruit.com/product/64)
[Related Guides to the Product](https://learn.adafruit.com/products/64/guides)
### Female DC Power adapter - 2.1mm jack to screw terminal block

[Female DC Power adapter - 2.1mm jack to screw terminal block](https://www.adafruit.com/product/368)
If you need to connect a DC power wall wart to a board that doesn't have a DC jack - this adapter will come in very handy! There is a 2.1mm DC jack on one end, and a screw terminal block on the other. The terminals are labeled with positive/negative assuming a positive-tip configuration...

In Stock
[Buy Now](https://www.adafruit.com/product/368)
[Related Guides to the Product](https://learn.adafruit.com/products/368/guides)
### 1N4001 Diode - 10 pack

[1N4001 Diode - 10 pack](https://www.adafruit.com/product/755)
This here is a 10 pack of the classic 1N4001 power blocking diode. These are good for reverse polarity protection (put it between your DC power jack and circuitry to avoid a negative-voltage that would zap your delicate electronics), kickback protection (place across your solenoids, relays...

In Stock
[Buy Now](https://www.adafruit.com/product/755)
[Related Guides to the Product](https://learn.adafruit.com/products/755/guides)
### Through-Hole Resistors - 2.2K ohm 5% 1/4W - Pack of 25

[Through-Hole Resistors - 2.2K ohm 5% 1/4W - Pack of 25](https://www.adafruit.com/product/2782)
ΩMG! You're not going to be able to resist these handy resistor packs!&nbsp;Well, axially, they&nbsp;do all of the resisting for you!

This is a **25 Pack of 2.2K Ω Resistors.** More specifically, they are **carbon film** , through-hole...

In Stock
[Buy Now](https://www.adafruit.com/product/2782)
[Related Guides to the Product](https://learn.adafruit.com/products/2782/guides)

## Related Guides

- [Adafruit MacroPad RP2040](https://learn.adafruit.com/adafruit-macropad-rp2040.md)
- [MacroPad 2FA TOTP Authentication Friend](https://learn.adafruit.com/macropad-2fa-totp-authentication-friend.md)
- [Ableton Live MacroPad Launcher](https://learn.adafruit.com/ableton-live-macropad-launcher.md)
- [MP3 Playback on RP2040 with CircuitPython](https://learn.adafruit.com/mp3-playback-rp2040.md)
- [Keypad and Matrix Scanning in CircuitPython](https://learn.adafruit.com/key-pad-matrix-scanning-in-circuitpython.md)
- [Custom HID Devices in CircuitPython](https://learn.adafruit.com/custom-hid-devices-in-circuitpython.md)
- [3D Printed Stand for MacroPad RP2040](https://learn.adafruit.com/3d-printed-stand-for-macropad-rp2040.md)
- [MacroPad Braille Keycaps](https://learn.adafruit.com/macropad-braille-keycaps.md)
- [Dragon Drop: a CircuitPython Game for MacroPad](https://learn.adafruit.com/dragon-drop-a-circuitpython-game-for-macropad.md)
- [An Introduction to RP2040 PIO with CircuitPython](https://learn.adafruit.com/intro-to-rp2040-pio-with-circuitpython.md)
- [Minecraft Turbopad](https://learn.adafruit.com/minecraft-turbopad.md)
- [MACROPAD Hotkeys](https://learn.adafruit.com/macropad-hotkeys.md)
- [MacroPad Remote Procedure Calls over USB to Control Home Assistant](https://learn.adafruit.com/macropad-remote-procedure-calls-over-usb-to-control-home-assistant.md)
- [AdaBox 019](https://learn.adafruit.com/adabox019.md)
- [MacroPad Summer Olympics Hotkeys](https://learn.adafruit.com/macropad-olympic-hotkeys.md)
