Arduino to MIDI: Difference between revisions
More actions
No edit summary |
No edit summary |
||
| Line 106: | Line 106: | ||
delay(10); | delay(10); | ||
} | } | ||
<nowiki>###</nowiki> ☎️ 2 potmeters 2 buttons code | |||
```cpp | |||
<nowiki>#</nowiki>include <MIDIUSB.h> | |||
int lastValueA0 = 0; | |||
int lastValueA1 = 0; | |||
int lastState2 = HIGH; | |||
int lastState3 = HIGH; | |||
void setup() { | |||
pinMode(A0, INPUT); // Pot 1 | |||
pinMode(A1, INPUT); // Pot 2 | |||
pinMode(2, INPUT_PULLUP); // Button 1 | |||
pinMode(3, INPUT_PULLUP); // Button 2 | |||
} | |||
void loop() { | |||
// ══════════════════════════════════════════════════════════ | |||
// POTENTIOMETER 1 (A0) → CC 1 | |||
// ══════════════════════════════════════════════════════════ | |||
int valueA0 = analogRead(A0) / 8; | |||
if (valueA0 != lastValueA0) { | |||
midiEventPacket_t event = {0x0B, 0xB0, 60, valueA0}; | |||
MidiUSB.sendMIDI(event); | |||
MidiUSB.flush(); | |||
lastValueA0 = valueA0; | |||
} | |||
// ══════════════════════════════════════════════════════════ | |||
// POTENTIOMETER 2 (A1) → CC 2 | |||
// ══════════════════════════════════════════════════════════ | |||
int valueA1 = analogRead(A1) / 8; | |||
if (valueA1 != lastValueA1) { | |||
midiEventPacket_t event = {0x0B, 0xB0, 61, valueA1}; | |||
MidiUSB.sendMIDI(event); | |||
MidiUSB.flush(); | |||
lastValueA1 = valueA1; | |||
} | |||
// ══════════════════════════════════════════════════════════ | |||
// BUTTON 1 (Pin 2) → Note 60 (Middle C) | |||
// ══════════════════════════════════════════════════════════ | |||
int state2 = digitalRead(2); | |||
if (state2 != lastState2) { | |||
if (state2 == LOW) { | |||
midiEventPacket_t noteOn = {0x09, 0x90, 60, 127}; | |||
MidiUSB.sendMIDI(noteOn); | |||
} else { | |||
midiEventPacket_t noteOff = {0x08, 0x80, 60, 0}; | |||
MidiUSB.sendMIDI(noteOff); | |||
} | |||
MidiUSB.flush(); | |||
lastState2 = state2; | |||
} | |||
// ══════════════════════════════════════════════════════════ | |||
// BUTTON 2 (Pin 3) → Note 61 (C#) | |||
// ══════════════════════════════════════════════════════════ | |||
int state3 = digitalRead(3); | |||
if (state3 != lastState3) { | |||
if (state3 == LOW) { | |||
midiEventPacket_t noteOn = {0x09, 0x90, 61, 127}; | |||
MidiUSB.sendMIDI(noteOn); | |||
} else { | |||
midiEventPacket_t noteOff = {0x08, 0x80, 61, 0}; | |||
MidiUSB.sendMIDI(noteOff); | |||
} | |||
MidiUSB.flush(); | |||
lastState3 = state3; | |||
} | |||
delay(10); | |||
} | |||
``` | |||
Revision as of 14:42, 19 January 2026
## Setup
1. Install MIDIUSB library https://docs.arduino.cc/libraries/midiusb/
2. Add the MIDIUSB.h Library: Go to Tools < Manage Libraries...
3. Search for "MIDIUSB" by Gary Grewal
4. Install the latest version
5. Select your board: Tools > Board > Arduino Leonardo (or Pro Micro)
🎛️🎚️ Potentiometers / Sliders
### What you need:
- 1 potentiometer or slider
- 3 wires
### How to connect:
```
Potentiometer:
├─ Left pin / GND → GND
├─ Middle pin / Signal → A0 (or A1, A2, A3...)
└─ Right pin / VCC / Power → 5V
#include <MIDIUSB.h>
int lastValue = 0;
void setup() {
pinMode(A0, INPUT); // ← Change A0 to your pin
}
void loop() {
int value = analogRead(A0) / 8; // ← Change A0 to match setup
if (value != lastValue) {
midiEventPacket_t event = {0x0B, 0xB0, 1, value};
// ↑ ← CC number
MidiUSB.sendMIDI(event);
MidiUSB.flush();
lastValue = value;
}
delay(10);
}
## 🔘 Note button
### What you need
- 1 push button
- 2 wires
### How to connect
```
Button:
├─ One side → Pin 2 (or 3, 4, 5...)
└─ Other side → GND
```
#include <MIDIUSB.h>
int lastState = HIGH;
void setup() {
pinMode(2, INPUT_PULLUP); // ← Change 2 to your pin
}
void loop() {
int state = digitalRead(2); // ← Change 2 to match setup
if (state != lastState) {
if (state == LOW) {
// Button pressed
midiEventPacket_t noteOn = {0x09, 0x90, 60, 127};
// ↑ ↑
// note velocity
MidiUSB.sendMIDI(noteOn);
} else {
// Button released
midiEventPacket_t noteOff = {0x08, 0x80, 60, 0};
// ↑
// note
MidiUSB.sendMIDI(noteOff);
}
MidiUSB.flush();
lastState = state;
}
delay(10);
}
### ☎️ 2 potmeters 2 buttons code
```cpp
#include <MIDIUSB.h>
int lastValueA0 = 0;
int lastValueA1 = 0;
int lastState2 = HIGH;
int lastState3 = HIGH;
void setup() {
pinMode(A0, INPUT); // Pot 1
pinMode(A1, INPUT); // Pot 2
pinMode(2, INPUT_PULLUP); // Button 1
pinMode(3, INPUT_PULLUP); // Button 2
}
void loop() {
// ══════════════════════════════════════════════════════════
// POTENTIOMETER 1 (A0) → CC 1
// ══════════════════════════════════════════════════════════
int valueA0 = analogRead(A0) / 8;
if (valueA0 != lastValueA0) {
midiEventPacket_t event = {0x0B, 0xB0, 60, valueA0};
MidiUSB.sendMIDI(event);
MidiUSB.flush();
lastValueA0 = valueA0;
}
// ══════════════════════════════════════════════════════════
// POTENTIOMETER 2 (A1) → CC 2
// ══════════════════════════════════════════════════════════
int valueA1 = analogRead(A1) / 8;
if (valueA1 != lastValueA1) {
midiEventPacket_t event = {0x0B, 0xB0, 61, valueA1};
MidiUSB.sendMIDI(event);
MidiUSB.flush();
lastValueA1 = valueA1;
}
// ══════════════════════════════════════════════════════════
// BUTTON 1 (Pin 2) → Note 60 (Middle C)
// ══════════════════════════════════════════════════════════
int state2 = digitalRead(2);
if (state2 != lastState2) {
if (state2 == LOW) {
midiEventPacket_t noteOn = {0x09, 0x90, 60, 127};
MidiUSB.sendMIDI(noteOn);
} else {
midiEventPacket_t noteOff = {0x08, 0x80, 60, 0};
MidiUSB.sendMIDI(noteOff);
}
MidiUSB.flush();
lastState2 = state2;
}
// ══════════════════════════════════════════════════════════
// BUTTON 2 (Pin 3) → Note 61 (C#)
// ══════════════════════════════════════════════════════════
int state3 = digitalRead(3);
if (state3 != lastState3) {
if (state3 == LOW) {
midiEventPacket_t noteOn = {0x09, 0x90, 61, 127};
MidiUSB.sendMIDI(noteOn);
} else {
midiEventPacket_t noteOff = {0x08, 0x80, 61, 0};
MidiUSB.sendMIDI(noteOff);
}
MidiUSB.flush();
lastState3 = state3;
}
delay(10);
}
```