From b66d2c1d3551197c61100fc4952a84d4563f7d3c Mon Sep 17 00:00:00 2001 From: stefano Date: Wed, 10 Jan 2024 17:23:31 +0100 Subject: [PATCH] Better documentation --- README.md | 107 +++++++++++------------- SYSEX-MIDI-IMPLEMENTATION.md | 53 ++++++++++++ arduino/push-push/push-push.ino | 139 +++++++++++++++----------------- schematics/wiring-example.png | Bin 0 -> 43245 bytes 4 files changed, 164 insertions(+), 135 deletions(-) create mode 100644 SYSEX-MIDI-IMPLEMENTATION.md create mode 100644 schematics/wiring-example.png diff --git a/README.md b/README.md index 0a9201b..b4de501 100644 --- a/README.md +++ b/README.md @@ -1,90 +1,77 @@ # ![Push Push Logo](push-push-logo.png) Push Push -Push Push is a very easy to build device (based on Arduino) that provides you with a number of buttons (or pedals) that can send keystrokes combinations to your computer. +Push Push is a very easy to build device (based on Arduino) that allows you to send keystrokes to a computer by emulating a USB keyboard. -While you can find a lot of similar DIY project on the web, Push Push is pretty unique because it can be configured to send keystrokes of your choice with it's own [editor](https://garubi.github.io/push-push-editor/), without the need to change the firmware code e withaout the need of Arduino compiler. -Simply connect it to the [editor](https://garubi.github.io/push-push-editor/) and configure your Push Push. +Up to 20 buttons can be used connected to digital pins 2, 3, 4 and 5... +Each button can send a configurable keystroke, including non-printable controls -![An animated preview of the Push Push editor](animated-editor-preview.gif) +While you can find a lot of similar DIY project on the web, **Push Push is pretty unique because it can be configured with it's own [editor](https://garubi.github.io/push-push-editor/)** to send keystrokes of your choice, without the need to change the firmware code e without the need of Arduino compiler. +You simply connect it to the [editor](https://garubi.github.io/push-push-editor/) and configure your Push Push. # How to build it ## The hardware +The hardware part is really basic: they are just pushbuttons connected to an Arduino. -## The software - -## The configuration - -# References +The script expects to be run on a **Arduino Leonardo** or **Arduino Pro Micro**, but it should run without problems on any boards that supports `HID` protocol, like *Leonardo*, *Micro*, *Due*, *Zero*, *UNO R4 Minima*, *UNO R4 WiFi*, *Giga R1*, *Nano ESP32*, *MKR Family* (i.e. all the boards supported by the [Keyboard library](https://www.arduino.cc/reference/en/language/functions/usb/keyboard/)) -## MIDI sysex implementation for configuration +All you have to do is connect one end of each push button to the GND pin and the other to one of the available digital pins. -The communication between Push Push and the editor is based on the MIDI protocol, exchanging System Exclusive Messages. +Then update the script (see [section below](#the-software)) with the number of buttons connected and the digital pins they are connected to -While you can send the sysex message with any software that can send system exclusive, I recommend using the dedicated editor here: (https://garubi.github.io/push-push-editor/) +You can find some example schematics in the [`/schematics`](/schematics/) folder -``` - IDENTIFIER MESSAGE_TYPE ACTION CONTENT_TYPE -F0 X_MANID1 X_MANID2 X_PRODID [REQ, REPL] [ GET, SET ] [...] F7 +![A wiring example for 2 buttons](/schematics/wiring-example.png) -const uint8_t X_MANID1 = 0x37; // Manufacturer ID 1 (UBIStage) -const uint8_t X_MANID2 = 0x72; // Manufacturer ID 2 (UBIStage) -const uint8_t X_PRODID = 0x10; // Product ID (Push Push) +## The software +If you are using just 2 buttons, you can use the `push-push.ino` file included in the [/arduino/push-push](/arduino/push-push/) folder without any modification. Just install the required libraries (see below), compile and upload it to your Arduino. -const uint8_t X_MODELID = 0x10; // Model ID (Specific Push Push implementations: num of buttons etc) +If you have a different number of buttons, you have to change just two rows in the script -const byte VERSION_MAJOR = 1; -const byte VERION_MINOR = 0; -const byte VERSION_PATCH = 0; +At the beginning the script, find the following section and change the buttons count and Pin numbers with yours +```C++ +// *************** START EDITING HERE *********************** // +// Depending on the number of buttons you'll use +// edit the following defines -const byte REQ = 0x00; // Request -const byte REP = 0x01; // Replay + // Write the number of buttons used (For Arduino Leonardo I recommend no more than 20) + #define NUM_BUTTONS 2 -const byte GET = 0x00; -const byte SET = 0x01; -const byte X_ERROR = 0x7F; + // Write the Digital Pins where the buttons are connected to + const int buttonPins[NUM_BUTTONS] = {2, 3}; -const byte FAILED = 0x7F; -const byte OK = 0x01; +// *************** STOP EDITING HERE ********************** // ``` +When finished, save the script, compile and upload +>[!WARNING] +>Be sure to have the following libraries installed in your IDE before compiling. +> +>- [FortySevenEffects MIDI Library](https://github.com/FortySevenEffects/arduino_midi_library) +>- [lathoub Arduino-USBMIDI](https://github.com/lathoub/Arduino-USBMIDI) +>- [Arduino Keyboard library](https://www.arduino.cc/reference/en/language/functions/usb/keyboard/) +>- [Arduino EEPROM Library](https://docs.arduino.cc/learn/built-in-libraries/eeprom) -### The Editor ask the current configuration to Push Push: - -`F0 X_MANID1 X_MANID2 X_PRODID REQ GET F7` - -**Push Push answer:** - -`F0 X_MANID1 X_MANID2 X_PRODID REP GET VERSION_MAJOR VERION_MINOR VERSION_PATCH X_MODELID BUTTON_QTY KEYS_SEQUENCE_SIZE BTN_n_MODIFIER_CODE_1 BTN_n_MODIFIER_CODE_2 BTN_n_MODIFIER_CODE_3 BTN_n_MODIFIER_CODE_4 BTN_n_KEY_CODE [...] F7` -### The Editor stores a new configuration in Push Push: - -`F0 X_MANID1 X_MANID2 X_PRODID REQ SET VERSION_MAJOR VERION_MINOR VERSION_PATCH X_MODELID BUTTON_QTY KEYS_SEQUENCE_SIZE BTN_n_MODIFIER_CODE_1 BTN_n_MODIFIER_CODE_2 BTN_n_MODIFIER_CODE_3 BTN_n_MODIFIER_CODE_4 BTN_n_KEY_CODE [...] F7` - -**Push Push answer** - -`F0 X_MANID1 X_MANID2 X_PRODID REP SET [OK, FAILED ] F7` - -### Push Push receives a unknown command - -**Push Push reply** - -`F0 X_MANID1 X_MANID2 X_PRODID REP X_ERROR F7` - -## usbMIDI libraries: - -- https://github.com/lathoub/Arduino-USBMIDI +## The configuration +The strength of Push Push is the ease of configuration: you don't need to modify the Arduino code or use complex software to configure the key sequences to send: just use the **Push Push Editor**. +[**>>>> GO TO PUSH PUSH EDITOR <<<<**](https://garubi.github.io/push-push-editor/) -## macro keyboards /stream deck +The communication between Push Push and the editor is based on the MIDI protocol, exchanging System Exclusive Messages. +If you are curious you can find the implemetation details in the [SYSEX-MIDI-IMPLEMENTATION.md](SYSEX-MIDI-IMPLEMENTATION) file -- https://www.partsnotincluded.com/diy-stream-deck-mini-macro-keyboard/ +### How to install and use the Push Push Editor +Since the editor is contained in a web page, you don't have to install anything: just open the editor page and follow the simple instructions. +The editor works on desktop computers, tablets and mobile phones, on any operating system: all you need is an internet browser and a USB port to connect Push Push to. -## how to change board name: +Here is a preview: - - https://forum.arduino.cc/t/multiple-leonardos-as-hid-joystick-how-to-change-the-names/402646 +![An animated preview of the Push Push editor](animated-editor-preview.gif) - - https://gist.github.com/Hyratel/80017369fedd1bbc9eef4c8e7a896225 +[**>>>> GO TO PUSH PUSH EDITOR <<<<**](https://garubi.github.io/push-push-editor/) - - https://github.com/NicoHood/HID/issues/125 - +### How to know the current Push Push configuration +You have two way to read the current configuration: +1. The easy way: Connect to the [Push Push Editor](https://garubi.github.io/push-push-editor/) and you will see all the configurations +1. The "developer" way: Open the Arduino Serial Monitor and type `?` then push `ENTER`. Push Push will display informations on the Serial Monitor diff --git a/SYSEX-MIDI-IMPLEMENTATION.md b/SYSEX-MIDI-IMPLEMENTATION.md new file mode 100644 index 0000000..96bbbbd --- /dev/null +++ b/SYSEX-MIDI-IMPLEMENTATION.md @@ -0,0 +1,53 @@ +## Push Push MIDI sysex implementation for configuration + +The communication between Push Push and the editor is based on the MIDI protocol, exchanging System Exclusive Messages. + +While you can send the sysex message with any software that can send system exclusive, I recommend using the dedicated editor here: (https://garubi.github.io/push-push-editor/) + +``` + IDENTIFIER MESSAGE_TYPE ACTION CONTENT_TYPE +F0 X_MANID1 X_MANID2 X_PRODID [REQ, REPL] [ GET, SET ] [...] F7 + +const uint8_t X_MANID1 = 0x37; // Manufacturer ID 1 (UBIStage) +const uint8_t X_MANID2 = 0x72; // Manufacturer ID 2 (UBIStage) +const uint8_t X_PRODID = 0x10; // Product ID (Push Push) + +const uint8_t X_MODELID = 0x10; // Model ID (Specific Push Push implementations: num of buttons etc) + +const byte VERSION_MAJOR = 1; +const byte VERION_MINOR = 0; +const byte VERSION_PATCH = 0; + +const byte REQ = 0x00; // Request +const byte REP = 0x01; // Replay + +const byte GET = 0x00; +const byte SET = 0x01; +const byte X_ERROR = 0x7F; + +const byte FAILED = 0x7F; +const byte OK = 0x01; +``` + + +### The Editor ask the current configuration to Push Push: + +`F0 X_MANID1 X_MANID2 X_PRODID REQ GET F7` + +**Push Push answer:** + +`F0 X_MANID1 X_MANID2 X_PRODID REP GET VERSION_MAJOR VERION_MINOR VERSION_PATCH X_MODELID BUTTON_QTY KEYS_SEQUENCE_SIZE BTN_n_MODIFIER_CODE_1 BTN_n_MODIFIER_CODE_2 BTN_n_MODIFIER_CODE_3 BTN_n_MODIFIER_CODE_4 BTN_n_KEY_CODE [...] F7` + +### The Editor stores a new configuration in Push Push: + +`F0 X_MANID1 X_MANID2 X_PRODID REQ SET VERSION_MAJOR VERION_MINOR VERSION_PATCH X_MODELID BUTTON_QTY KEYS_SEQUENCE_SIZE BTN_n_MODIFIER_CODE_1 BTN_n_MODIFIER_CODE_2 BTN_n_MODIFIER_CODE_3 BTN_n_MODIFIER_CODE_4 BTN_n_KEY_CODE [...] F7` + +**Push Push answer** + +`F0 X_MANID1 X_MANID2 X_PRODID REP SET [OK, FAILED ] F7` + +### Push Push receives a unknown command + +**Push Push reply** + +`F0 X_MANID1 X_MANID2 X_PRODID REP X_ERROR FAILED F7` \ No newline at end of file diff --git a/arduino/push-push/push-push.ino b/arduino/push-push/push-push.ino index 03a44c1..b5907b3 100644 --- a/arduino/push-push/push-push.ino +++ b/arduino/push-push/push-push.ino @@ -2,24 +2,33 @@ #include #include -// Questo script di Arduino permette di inviare keystrokes a un computer emulando una tastiera USB -// Si possono usare fino a 20 pulsanti collegati ai pin digitali 2, 3, 4 e 5 ... -// Ogni pulsante può inviare una sequenza di tasti configurabile, compresi i tasti di controllo non stampabili -// La configurazione dei tasti da inviare è salvata nella eprom e può essere modificata tramite System Exclusive via MIDI USB +// This Arduino script allows you to send keystrokes to a computer by emulating a USB keyboard. +// Up to 20 buttons can be used connected to digital pins 2, 3, 4 and 5... +// Each button can send a configurable keystroke, including non-printable controls +// The configuration of the keys to be sent is saved in the eprom and can be modified via System Exclusive via MIDI USB -// Definire il numero di pulsanti da usare (da 1 a 20) -#define NUM_BUTTONS 2 +// *************** START EDITING HERE *********************** // +// Depending on the number of buttons you'll use +// edit the following defines -// Definire i pin digitali a cui sono collegati i pulsanti -const int buttonPins[NUM_BUTTONS] = {2, 3}; + // Write the number of buttons used (For Arduino Leonardo I recommend no more than 20) + #define NUM_BUTTONS 2 -// Definire la dimensione massima della sequenza di tasti da inviare per ogni pulsante (in byte) + // Write the Digital Pins where the buttons are connected + const int buttonPins[NUM_BUTTONS] = {2, 3}; + +// *************** STOP EDITING HERE ********************** // + +// Define the maximum size of the keystroke to send for each button (in bytes) #define KEYS_SEQUENCE_SIZE 5 // firmware version const byte VERSION_MAJOR = 1; const byte VERSION_MINOR = 0; -const byte VERSION_PATCH = 0; +const byte VERSION_PATCH = 1; + +// ********************************************************* // +// SysEx implementation for remote configuration // const uint8_t X_MANID1 = 0x37; // Manufacturer ID 1 (UBIStage) const uint8_t X_MANID2 = 0x72; // Manufacturer ID 2 (UBIStage) @@ -36,96 +45,68 @@ const byte X_ERROR = 0x7F; const byte X_FAILED = 0x7F; const byte X_OK = 0x01; +// ********************************************************* // -// Definire l'indirizzo iniziale della eprom dove salvare la configurazione dei tasti +// Define the initial address of the EPROM where to save the key configuration #define EEPROM_START_ADDRESS 0 -// Creare un array per memorizzare lo stato dei pulsanti +// Create an array to store the state of the buttons int buttonState[NUM_BUTTONS]; -// Creare un array per memorizzare la sequenza di tasti da inviare per ogni pulsante +// Create an array to store the keystroke to send for each button byte keySequence[NUM_BUTTONS][KEYS_SEQUENCE_SIZE]; -/* ************************************************************************* - * MIDI initialization: we use MIDI only to send e receive the configuration from the editor via SysEx - */ - +// MIDI initialization: we use MIDI only to send e receive the configuration from the editor via SysEx USBMIDI_CREATE_DEFAULT_INSTANCE(); void setup() { // pinMode(LED_BUILTIN, OUTPUT); - // Inizializzare la comunicazione seriale a 9600 baud + // Initialize the serial communication at 9600 baud Serial.begin(115200); - // while(!Serial); + // while(!Serial); // commenting out becouse it blocks the MIDI over USB communication (Why???????) - // Inizializzare la tastiera USB + // Initialize USB keyboard Keyboard.begin(); - // Inizializzare il MIDI per comunicare con l'editor via SysEx + // Initialize MIDI to communicate with the editor via SysEx MIDI.begin(1); MIDI.setHandleSystemExclusive(receiveSysExConfig); - // Impostare i pin dei pulsanti come input con resistenza di pull-up interna + // Set the button pins as inputs with internal pull-up resistor for (int i = 0; i < NUM_BUTTONS; i++) { pinMode(buttonPins[i], INPUT_PULLUP); } - // Leggere la configurazione dei tasti dalla eprom e metterla nell'array keySequence + // Read the key configuration from the eprom and put it in the keySequence array for (int i = 0; i < NUM_BUTTONS*KEYS_SEQUENCE_SIZE; i++) { keySequence[i / KEYS_SEQUENCE_SIZE][i % KEYS_SEQUENCE_SIZE] = EEPROM.read(EEPROM_START_ADDRESS + i); // I byte successivi contengono le sequenze di tasti } - // Stampare un messaggio di benvenuto sul monitor seriale - Serial.println(F(" .----------------. .----------------. .----------------. .----------------. ")); - Serial.println(F("| .--------------. || .--------------. || .--------------. || .--------------. |")); - Serial.println(F("| | ______ | || | _____ _____ | || | _______ | || | ____ ____ | |")); - Serial.println(F("| | |_ __ \\ | || ||_ _||_ _|| || | / ___ | | || | |_ || _| | |")); - Serial.println(F("| | | |__) | | || | | | | | | || | | (__ \\_| | || | | |__| | | |")); - Serial.println(F("| | | ___/ | || | | ' ' | | || | '.___`-. | || | | __ | | |")); - Serial.println(F("| | _| |_ | || | \\ `--' / | || | |`\\____) | | || | _| | | |_ | |")); - Serial.println(F("| | |_____| | || | `.__.' | || | |_______.' | || | |____||____| | |")); - Serial.println(F("| | | || | | || | | || | | |")); - Serial.println(F("| '--------------' || '--------------' || '--------------' || '--------------' |")); - Serial.println(F(" '----------------' '----------------' '----------------' '----------------' ")); - Serial.println(F(" .----------------. .----------------. .----------------. .----------------. ")); - Serial.println(F("| .--------------. || .--------------. || .--------------. || .--------------. |")); - Serial.println(F("| | ______ | || | _____ _____ | || | _______ | || | ____ ____ | |")); - Serial.println(F("| | |_ __ \\ | || ||_ _||_ _|| || | / ___ | | || | |_ || _| | |")); - Serial.println(F("| | | |__) | | || | | | | | | || | | (__ \\_| | || | | |__| | | |")); - Serial.println(F("| | | ___/ | || | | ' ' | | || | '.___`-. | || | | __ | | |")); - Serial.println(F("| | _| |_ | || | \\ `--' / | || | |`\\____) | | || | _| | | |_ | |")); - Serial.println(F("| | |_____| | || | `.__.' | || | |_______.' | || | |____||____| | |")); - Serial.println(F("| | | || | | || | | || | | |")); - Serial.println(F("| '--------------' || '--------------' || '--------------' || '--------------' |")); - Serial.println(F(" '----------------' '----------------' '----------------' '----------------' ")); - Serial.print( F("Version: ")); - Serial.print(VERSION_MAJOR); - Serial.print(F(".")); - Serial.print(VERSION_MINOR); - Serial.print(F(".")); - Serial.print(VERSION_PATCH); - Serial.println(); - - Serial.println(F("Benvenuto nello script di Arduino per inviare keystrokes.")); + printInfo(); } void loop() { MIDI.read(); - // Leggere lo stato dei pulsanti e inviare la sequenza di tasti corrispondente se premuti +// **************** SEND KEYSTROKE WHEN BUTTON PRESSED ************************ // + + // Read the state of the buttons and send the corresponding keystroke if pressed for (int i = 0; i < NUM_BUTTONS; i++) { buttonState[i] = digitalRead(buttonPins[i]); - if (buttonState[i] == LOW) { // Se il pulsante è premuto (stato basso) + if (buttonState[i] == LOW) { // If the button is pressed (low state) Serial.println(F("premuto")); - sendKeySequence(i); // Invia la sequenza di tasti associata al pulsante - delay(500); // Aggiungi un ritardo per evitare ripetizioni accidentali + sendKeySequence(i); // Sends the keystroke associated with the button + delay(500); // Add a delay to avoid accidental repeats } } - // Controllare se è arrivato un comando dal monitor seriale +// **************** PRINT DEVICE'S INFO ON SERIAL MONITOR ************************ // +// ****************** WHEN YOU TYPE ? + ENTER ON CONSOLE ************************ // + + // Check if a command has arrived from the serial monitor if (Serial.available() > 0) { String command = Serial.readString(); // Leggere il comando come una stringa command.trim(); // Rimuovere eventuali spazi o caratteri di fine linea @@ -140,8 +121,8 @@ void loop() { } } -// Callback per gestire la ricezione dei messaggi SysEx per la configurazione -// https://forum.arduino.cc/t/midi-sysex-sending-2-bytes-from-signed-int/930637 + +// Callback to manage the receipt of SysEx messages for configuration void receiveSysExConfig( byte* sysex_message, unsigned sysExSize ) { @@ -158,11 +139,14 @@ void receiveSysExConfig( byte* sysex_message, unsigned sysExSize ) { byte count = 0; for (int btn = 0; btn < NUM_BUTTONS; btn++) { for (int i = 0; i < KEYS_SEQUENCE_SIZE; i++) { + + // Sysex has only 7 bit so for each byte representing a keystroke we have to split it in two + // see: https://forum.arduino.cc/t/midi-sysex-sending-2-bytes-from-signed-int/930637 byte nyb1 = ( keySequence[btn][i] >>7 ) & 0x7F ; byte nyb2 = keySequence[btn][i] & 0x7F; - rp[11+count] = nyb1; // Leggere il byte corrispondente al tasto da inviare - rp[11+count+1] = nyb2; // Leggere il byte corrispondente al tasto da inviare + rp[11+count] = nyb1; + rp[11+count+1] = nyb2; count = count +2; } @@ -187,11 +171,13 @@ void receiveSysExConfig( byte* sysex_message, unsigned sysExSize ) { for( byte btn = 0; btn < NUM_BUTTONS; btn++){ for(byte key = 0; key < KEYS_SEQUENCE_SIZE; key++ ){ + // Sysex has only 7 bit so we need to combine the 7 bit chunks for represent a keystroke + // see: https://forum.arduino.cc/t/midi-sysex-sending-2-bytes-from-signed-int/930637 byte res = (sysex_message[11 + index] << 7) | sysex_message[11 + index+1]; // combine the 7 bit chunks to 14 bits in the int res = res << 2 >> 2 ; // sign-extend as 16 bit keySequence[btn][key] = res ; - EEPROM.write(EEPROM_START_ADDRESS + eepr_index, res); // Salvare il byte nella eprom + EEPROM.write(EEPROM_START_ADDRESS + eepr_index, res); // Save the byte in eprom index = index + 2; eepr_index ++; } @@ -221,20 +207,21 @@ void receiveSysExConfig( byte* sysex_message, unsigned sysExSize ) { } } -// Funzione che invia la sequenza di tasti associata a un pulsante +// Function that sends the keystroke associated with a button void sendKeySequence(int buttonIndex) { Serial.println(F("sendKeySequence")); Serial.println(buttonIndex); for (int i = 0; i < KEYS_SEQUENCE_SIZE; i++) { - byte key = keySequence[buttonIndex][i]; // Leggere il byte corrispondente al tasto da inviare - Keyboard.press(key); // Premere il tasto - delay(100); // Aggiungere un ritardo per assicurare la corretta trasmissione + byte key = keySequence[buttonIndex][i]; // Read the byte corresponding to the key to send + Keyboard.press(key); // Press the button + delay(100); // Add a delay to ensure correct transmission } - Keyboard.releaseAll(); // Rilasciare il tasto + Keyboard.releaseAll(); // Release all pressed keys } +// When you type ? and press ENTER on the serial monitor, we display some info: void printInfo() { - // Stampare un messaggio di benvenuto sul monitor seriale + // Print a welcome message on the serial monitor Serial.println(F(" .----------------. .----------------. .----------------. .----------------. ")); Serial.println(F("| .--------------. || .--------------. || .--------------. || .--------------. |")); Serial.println(F("| | ______ | || | _____ _____ | || | _______ | || | ____ ____ | |")); @@ -268,15 +255,17 @@ void printInfo() { Serial.println(); - Serial.println(F("Benvenuto nello script di Arduino per inviare keystrokes.")); + Serial.println(F("Welcome to Push Push, an Arduino script for sending keystrokes.")); + Serial.println(); + Serial.println(F("Go to https://garubi.github.io/push-push-editor/ to configure")); - Serial.println(F("Push Push è collegato")); - Serial.println(F("Questa è la configurazione:")); + Serial.println(F("Push Push connected")); + Serial.println(F("Current configuration:")); for (int btn = 0; btn < NUM_BUTTONS; btn++) { Serial.print(F("Tasto ")); Serial.println(btn); for (int i = 0; i < KEYS_SEQUENCE_SIZE; i++) { - byte key = keySequence[btn][i]; // Leggere il byte corrispondente al tasto da inviare + byte key = keySequence[btn][i]; Serial.print(key); Serial.print(F(" ")); } diff --git a/schematics/wiring-example.png b/schematics/wiring-example.png new file mode 100644 index 0000000000000000000000000000000000000000..20b5ce1bd96a38f3108a166abd1ab07f710e4365 GIT binary patch literal 43245 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 RXKnyLbrl`uYDJr{{{o@cS_l9D literal 0 HcmV?d00001