# Bonk Machines > The personal workbench of Johannes Jan Prins in Groningen, the Netherlands: electronic instruments he designs, solders and programs by hand, and CTRL, a free MIT-licensed Arduino library for buttons, rotary encoders, potentiometers, LEDs, RGB LEDs and multiplexers. Bonk Machines instruments are prototypes and one-offs built by Johannes; the site shares them and gives back through the CTRL library. Contact: info@bonkmachines.nl. ## Machines - [TONE:96](https://www.bonkmachines.nl/machines/tone-96/): stereo effects unit for DJs and live performers; 12 beat-synced effects, each played on its own XY pad on a touchscreen; follows the beat and the key; used as a master insert or on a send/return. - [CV-3PO](https://www.bonkmachines.nl/machines/cv-3po/): Eurorack module with four control-voltage channels set by slide pots; 0-5V, 0-10V and ±5V per channel; 12-bit DAC; records and loops slider moves. - [Conundrum 16](https://www.bonkmachines.nl/machines/conundrum-16/): 16-step MIDI sequencer and controller; four slots, 96 PPQN, USB and DIN MIDI, CV/Gate out; Traktor, Modular and Custom modes. - [Traktor Beam](https://www.bonkmachines.nl/machines/traktor-beam/): MIDI controller for Traktor Pro; four-deck switching, loop and beat jump sections, two FX banks, three OLED displays, USB and DIN MIDI at once. - [All machines](https://www.bonkmachines.nl/machines/) ## CTRL library for Arduino - [CTRL overview](https://www.bonkmachines.nl/ctrl/): what the library does, supported boards (Arduino AVR, ESP32, Raspberry Pi Pico, Teensy and more), MIT license, source on GitHub: https://github.com/bonkmachines/ctrl-arduino - [Full documentation in one file](https://www.bonkmachines.nl/llms-full.txt) - [Introduction: Installation](https://www.bonkmachines.nl/ctrl/installation/): Open the Arduino IDE Library manager, search for "CTRL" and hit "INSTALL". - [Introduction: Using the library](https://www.bonkmachines.nl/ctrl/using-the-library/): how to include the whole library, or only the parts you need, in a sketch. - [Buttons: Button methods](https://www.bonkmachines.nl/ctrl/buttons/methods/): every method, with a one-line explanation - [Buttons: Pull-up button](https://www.bonkmachines.nl/ctrl/buttons/pull-up/): This sketch demonstrates the basic implementation of a button or switch, in pull-up configuration, with debouncing functionality for noisy buttons. - [Buttons: Pull-down button](https://www.bonkmachines.nl/ctrl/buttons/pull-down/): This sketch demonstrates the basic implementation of a button or switch, in pull-down configuration, with debouncing functionality for noisy buttons. - [Buttons: Alternative button](https://www.bonkmachines.nl/ctrl/buttons/alternative/): This sketch demonstrates an alternative implementation of a pull-up button or switch, with debouncing functionality for noisy buttons. - [Buttons: Advanced button](https://www.bonkmachines.nl/ctrl/buttons/advanced/): This sketch demonstrates a more advanced implementation of a pull-up button or switch, with debouncing functionality for noisy buttons. - [Buttons: Dual action button](https://www.bonkmachines.nl/ctrl/buttons/dual-action/): This sketch demonstrates the basic implementation of a dual action pull-up button or switch, that differentiates between a short and long press. - [Potentiometers: Potentiometer methods](https://www.bonkmachines.nl/ctrl/potentiometers/methods/): every method, with a one-line explanation - [Potentiometers: Basic potentiometer](https://www.bonkmachines.nl/ctrl/potentiometers/basic/): This sketch demonstrates the basic implementation of a potentiometer. - [Potentiometers: Alternative potentiometer](https://www.bonkmachines.nl/ctrl/potentiometers/alternative/): This sketch demonstrates an alternative implementation of a potentiometer. - [Potentiometers: Advanced potentiometer](https://www.bonkmachines.nl/ctrl/potentiometers/advanced/): This sketch demonstrates the advanced implementation of a potentiometer. - [Rotary encoders: Rotary encoder methods](https://www.bonkmachines.nl/ctrl/rotary-encoders/methods/): every method, with a one-line explanation - [Rotary encoders: Pull-up rotary encoder](https://www.bonkmachines.nl/ctrl/rotary-encoders/pull-up/): This sketch demonstrates the implementation of a rotary encoder in pull-up configuration. - [Rotary encoders: Pull-down rotary encoder](https://www.bonkmachines.nl/ctrl/rotary-encoders/pull-down/): This sketch demonstrates the implementation of a rotary encoder in pull-down configuration. - [Rotary encoders: Alternative rotary encoder](https://www.bonkmachines.nl/ctrl/rotary-encoders/alternative/): This sketch demonstrates an alternative implementation of a rotary encoder in pull-up configuration. - [Rotary encoders: Advanced rotary encoder](https://www.bonkmachines.nl/ctrl/rotary-encoders/advanced/): This sketch demonstrates a more advanced implementation of a rotary encoder in pull-up configuration. - [Multiplexers: Multiplexer methods](https://www.bonkmachines.nl/ctrl/multiplexers/methods/): every method, with a one-line explanation - [Multiplexers: Multiplexing buttons](https://www.bonkmachines.nl/ctrl/multiplexers/buttons/): This sketch demonstrates the implementation of a multiplexer with buttons. - [Multiplexers: Multiplexing potentiometers](https://www.bonkmachines.nl/ctrl/multiplexers/potentiometers/): This sketch demonstrates the implementation of a multiplexer with potentiometers. - [Multiplexers: Multiplexing rotary encoders](https://www.bonkmachines.nl/ctrl/multiplexers/rotary-encoders/): This sketch demonstrates the implementation of a multiplexer with rotary encoders. - [Multiplexers: Daisy chaining multiplexers](https://www.bonkmachines.nl/ctrl/multiplexers/daisy-chaining/): This sketch demonstrates the implementation of 3 daisy-chained multiplexers. - [Object groups: Group methods](https://www.bonkmachines.nl/ctrl/groups/methods/): every method, with a one-line explanation - [Object groups: Grouped buttons](https://www.bonkmachines.nl/ctrl/groups/buttons/): This sketch demonstrates the grouping of buttons, with a shared event handler. - [Object groups: Grouped potentiometers](https://www.bonkmachines.nl/ctrl/groups/potentiometers/): This sketch demonstrates the grouping of potentiometers, with a shared event handler. - [Object groups: Grouped rotary encoders](https://www.bonkmachines.nl/ctrl/groups/rotary-encoders/): This sketch demonstrates the grouping of rotary encoders, with shared event handlers. - [Object groups: Group switching](https://www.bonkmachines.nl/ctrl/groups/switching/): This sketch demonstrates how to use group enable/disable to implement page or mode switching. - [LEDs: LED methods](https://www.bonkmachines.nl/ctrl/leds/methods/): every method, with a one-line explanation - [LEDs: Blinking LED](https://www.bonkmachines.nl/ctrl/leds/blinking/): This sketch demonstrates the basic implementation of how to set up and control a blinking LED. - [LEDs: Fading LED](https://www.bonkmachines.nl/ctrl/leds/fading/): This sketch demonstrates the basic implementation of how to set up and control a fading LED. - [LEDs: LED set](https://www.bonkmachines.nl/ctrl/leds/led-set/): This sketch demonstrates how to drive an LED directly from a boolean state, using the set() method. - [LEDs: RGB LED methods](https://www.bonkmachines.nl/ctrl/leds/rgb-methods/): every method, with a one-line explanation - [LEDs: RGB LED](https://www.bonkmachines.nl/ctrl/leds/rgb/): This sketch demonstrates how to control a 4-pin RGB LED: it cycles through a few colours, then fades the brightness of a custom colour up and down. - [LEDs: RGB LED with potentiometers](https://www.bonkmachines.nl/ctrl/leds/rgb-with-potentiometers/): This sketch demonstrates how to control an RGB LED with two potentiometers: one picks the colour (turning it sweeps through the colour wheel) and the other sets the brightness. - [Real-time: External ADC](https://www.bonkmachines.nl/ctrl/real-time/external-adc/): This sketch demonstrates how to use storeRaw() with a timer ISR or DMA for non-blocking ADC reads in real-time applications. - [Real-time: Time-sliced processing](https://www.bonkmachines.nl/ctrl/real-time/time-sliced-processing/): This sketch demonstrates how to use process(count) for real-time-safe round-robin control processing. - [Real-time: Benchmark](https://www.bonkmachines.nl/ctrl/real-time/benchmark/): This sketch measures how long one process() call takes for each type of control on your board, so you can plan the time budget of your loop (for example in a real-time or audio application). - [Hookup guides: Buttons](https://www.bonkmachines.nl/ctrl/hookup-guides/buttons/): A button is a simple yet essential component in electronics, allowing you to interact with a device. - [Hookup guides: Potentiometers](https://www.bonkmachines.nl/ctrl/hookup-guides/potentiometers/): Potentiometers are versatile components commonly used in electronics to adjust levels, such as volume, brightness, and position. - [Hookup guides: Rotary encoders](https://www.bonkmachines.nl/ctrl/hookup-guides/rotary-encoders/): In this guide, we will walk you through the process of connecting an incremental rotary encoder with quadrature output to an Arduino UNO. - [Hookup guides: LEDs](https://www.bonkmachines.nl/ctrl/hookup-guides/leds/): LEDs (Light Emitting Diodes) are the simplest way to give visual feedback in your projects: a status light, a level indicator or a button that lights up when it's active. - [Hookup guides: Multiplexers](https://www.bonkmachines.nl/ctrl/hookup-guides/multiplexers/): Connecting multiple buttons to a microcontroller can be a challenge, especially when dealing with a large number of inputs. ## About - [About Johannes Jan Prins](https://www.bonkmachines.nl/about/): software engineer at Knalgeel in Groningen, builds instruments in his spare time. - [Contact](https://www.bonkmachines.nl/contact/) - Instagram: https://www.instagram.com/bonkmachines - YouTube: https://www.youtube.com/@bonkmachines - Facebook: https://www.facebook.com/bonkmachines