Introduction: DIGIKEYPAD (DigiSpark)

Picture of DIGIKEYPAD  (DigiSpark)

In this Instructables i will use a DigiSpark with a CD4021 Shift Register and read 6 mechanical switches.

Depending on the switch pressed, the DigiSpark will send some key strokes back to the PC. Making a sort of a Macro keypad, where we can assign each tactile switches to send key stroke.

Key Features :

  • Programmable keys
  • Shortcut keys With one press of a button.
  • Volume control keys (for windows)

Step 1: Parts List

Picture of Parts List
  • 1x Digispark (Ebay).
  • 1x CD4021 Shift register . ( Ebay)
  • 16 pin IC socket
  • 1x Tactile Momentary Switches (Ebay)

(mechanical keys) (Ebay) (Banggood)

  • 10K resistors. (number of resistors depend on the number of switches used)
  • Micro USB cable or USB-to-USB cable Depends on type of digispark.

Step 2: Tools

Picture of Tools
  • Soldering iron
  • Breadboard
  • wires
  • jumper wires
  • Prototyping board
  • Wire strippers /cutters
  • USB cable ( depends on the type of the digispark model)
  • Multimeter

Skills required:

  • Basic soldering skills
  • Basic programming skills

Step 3: Digispark (Software Config)

Picture of  Digispark (Software Config)

The Digispark is an Attiny85 based microcontroller development board similar to the Arduino line, only cheaper, smaller, and a bit less powerful. IT use the familiar Arduino IDE the Digispark is a great way to jump into electronics, or perfect for when an Arduino is too big or too much.


  • Support for the Arduino IDE 1.0+ (OSX/Win/Linux)
  • Power via USB or External Source - 5v or 7-35v (automatic selection)
  • On-board 500ma 5V RegulatorBuilt-in USB (and serial debugging)
  • 6 I/O Pins (2 are used for USB only if your program actively communicates over USB, otherwise you can use all 6 even if you are programming via USB)
  • 8k Flash Memory

Installing the Digispark Drivers

Make sure to use Arduino IDE version 1.6.7 otherwise uploading error will occur.

Watch this video to learn how to install Digispark drivers (That is created by Brainy Bits)

the Best Tutorial that i found. check their site for more information

And Check this link to learn how to connect and program the Digispark using the Arduino IDE



Make sure to use Arduino IDE version 1.6.7

Because i got avr errors when uploading the code.

Arduino IDE

Step 4: Connections

Picture of Connections

Pins Connections (digispark to shift-register)

• Digispark GND -------------- CD4021 GND/VSS
• Digispark 5V/VCC ---------- CD4021 VCC/VDD

• Digispark (P2 , D2) --- CD4021 LOAD / (pin 09 )

• Digispark (P1 , D1) --- CD4021 CLOCK / (pin 10)

• Digispark (P0 , D0) -- CD4021 SER OUT / Q8 / (pin 03)

Tactile Buttons (8 switches)

One leg of the Tactile Switches/ mechanical switch is connected to the 5V line.

The other leg of the Tactile Switches/mechanical switches are connected to pin 1-2-3-4-5-6-7 of the CD4021.

Pins 1-2-3-4-5-6-7 also have some 10K resistors connected to ground for switch pullups.

Look At the circuit layout for further clarifications.

Step 5: Soldering

Picture of Soldering

The parts were soldered on piece of perfboard that will fit in my enclosure .Just follow the circuit diagram in the above step.

Step 6: Enclosure

Picture of Enclosure

The plywood parts were laser cut and I used wood glue to glue the parts to form the enclosure.

Step 7: The Test Code

Picture of The Test Code

Check step 4 to learn how to install the libraries.

Before verifying the code , change the board to Digispark default .this will the ensure that the Digikeyboard.h is present in Arduino IDE . otherwise the digispark libraries are not present in the IDE even though its installed properly.

Each button has its unique binary value depending on the CD4021 pin , therefore to find out which is which upload this test code to the digispark

open the notepad and press the buttons and check the output.

Step 8: Code

Picture of Code

Upload this code.

To have the DigiSpark act as a Keyboard, we will be using a library called “DigiKeyboard” created by DigiStump.

Check the PDF file to find out the Arduino key word for each keyboard key.

To send a key stroke this command is used.


To print something like "hello" this command is used.

DigiKeyboard.print ("Hello");

To put a delay this command is used:


To press two keys at once :

separate the two key commands with a comma


DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT);//copy shortcut (ctrl +v).
DigiKeyboard.sendKeyStroke(KEY_L , MOD_GUI_LEFT);//windows lock shortcut  (windows logo key + L)
  • On the keyboard the key that is pressed second should come before the comma. for example in the copy shorcut the "C" key should be before "control" key. But on the keyboard it should be "ctrl" key then the "c" key.

To press three keys at once:

separate two keys with a comma and the third command with a


(Ctrl + Shift + Enter)

  • Always the the last key that should be pressed must come before the comma. In the above case "ENTER" must come before the comma.

To only press the windows key:

DigiKeyboard.sendKeyStroke(0, MOD_GUI_LEFT );

To execute a command with a single press:

To open "CMD" in administrator mode , assign a key to this code and change the binary value .

if (RegisterValue == B10) {
DigiKeyboard.sendKeyStroke(0,MOD_GUI_LEFT ); // press the windows key DigiKeyboard.delay(1000); // wait a second DigiKeyboard.print("cmd"); DigiKeyboard.delay(1000); // wait a second DigiKeyboard.sendKeyStroke(KEY_ENTER,MOD_CONTROL_LEFT | MOD_SHIFT_LEFT ); // Ctrl+shift+enter DigiKeyboard.delay(1000); // wait a second DigiKeyboard.sendKeyStroke(KEY_ARROW_LEFT ); DigiKeyboard.sendKeyStroke(KEY_ENTER ); }

UsefulWindows 10 shortcut keys

After uploading is done , remove the USB cable and plug it back again.

If you receive and error saying the USB is not recognized try unplugging and plugging back it again and while its initializing press any key repeatedly until it works.

Step 9: Volume Controls (optional)

Picture of Volume Controls (optional)

If you need to control the volume using this keypad Try this

Assign two mechanical or tactile switches with key strokes that does not have a certain function for windows or any other application in the above code (arduino code).


for example : alt key + letter key (ALT + O) or (ALT + R)

DigiKeyboard.sendKeyStroke(KEY_O , MOD_ALT_LEFT) // no action	
DigiKeyboard.sendKeyStroke(KEY_R , MOD_ALT_LEFT) // no action

Download this software and install it.

3RVX (created by Matthew Malensek)

  • After installing click on the settings icon
  • Go to the Hotkey Tab Click on the + icon
  • Then click the "key" tab located below
  • when a window pops up press a key on the keypad
  • Set its function using drop down menu and apply the changes.
  • Then press the blue 3RVX icon to startup.

All done

check this video:

Step 10: Final Thoughts

Picture of Final Thoughts

Thanks for reading! I'd love to hear your thoughts.


TiltedBretzel_ (author)2017-10-02

The program is working well.
If you have issues with a "const unsigned char ascii_to_scan_code_table" compiling error, just edit the "scancode_ascii_table.h" like there : , it makes it working for me.

Good job for the rest by the way ! and Thanks !

Thanks for pointing that out .

About This Instructable




More by tharindurc :DIGIKEYPAD  (DigiSpark)Alarm clock  Using Atmega-328 and RTC
Add instructable to: