With the sketch provided from the tutorial: MIDI Device that uses the library Midi USB I was able to play the mapped notes, with the pot acting as intensity of the note, which is packaged and sent as a Note on/Note off command. Exactly what it is intended for.
The Guitar Pro Software Has a Learn Button to capture the notes and assign to functions, such as enable/disable custom effects. This already works fine.
One thing I noticed is that when the pot is set to minimum the buttons do not work, so the software is recording the note intensity value learned.
What I want to achieve is to make the potentiometer to control the volume slider or wah wah pedal, the software learns when a button is pressed but just goes on or off, the note intensity pot does not drive the gradative slider. The provided sketch example does not include a proper control for that.
Previous Repply from Library dev:
I see, you have to develop a program (your starting example is fine) that convert analog input (i.e. your pot) to a range that can be sent via the controlChange() function in your example, not the note on/off functions. The value you would read from say, the analog arduino port A0, would be sent via this function using the 'value' parameter that now would be your analog input value (converted to a range suitable for the midi cc "Control Change" range).Can Someone Help me?
Midi Message Commands:
https://www.midi.org/specifications/item/table-1-summary-of-midi-message
Example Sketch from:
https://www.arduino.cc/en/Tutorial/MidiDevice
/*
This examples shows how to make a simple seven keys MIDI keyboard with volume control
Created: 4/10/2015
Author: Arturo Guadalupi <a.guadalupi@arduino.cc>
http://www.arduino.cc/en/Tutorial/MidiDevice
*/
#include "MIDIUSB.h"
#include "PitchToNote.h"
#define NUM_BUTTONS 7
const uint8_t button1 = 2;
const uint8_t button2 = 3;
const uint8_t button3 = 4;
const uint8_t button4 = 5;
const uint8_t button5 = 6;
const uint8_t button6 = 7;
const uint8_t button7 = 8;
const int intensityPot = 0; //A0 input
const uint8_t buttons[NUM_BUTTONS] = {button1, button2, button3, button4, button5, button6, button7};
const byte notePitches[NUM_BUTTONS] = {C3, D3, E3, F3, G3, A3, B3};
uint8_t notesTime[NUM_BUTTONS];
uint8_t pressedButtons = 0x00;
uint8_t previousButtons = 0x00;
uint8_t intensity;
void setup() {
for (int i = 0; i < NUM_BUTTONS; i++)
pinMode(buttons[i], INPUT_PULLUP);
}
void loop() {
readButtons();
readIntensity();
playNotes();
}
// First parameter is the event type (0x0B = control change).
// Second parameter is the event type, combined with the channel.
// Third parameter is the control number number (0-119).
// Fourth parameter is the control value (0-127).
void controlChange(byte channel, byte control, byte value) {
midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
MidiUSB.sendMIDI(event);
}
void readButtons()
{
for (int i = 0; i < NUM_BUTTONS; i++)
{
if (digitalRead(buttons[i]) == LOW)
{
bitWrite(pressedButtons, i, 1);
delay(50);
}
else
bitWrite(pressedButtons, i, 0);
}
}
void readIntensity()
{
int val = analogRead(intensityPot);
intensity = (uint8_t) (map(val, 0, 1023, 0, 127));
}
void playNotes()
{
for (int i = 0; i < NUM_BUTTONS; i++)
{
if (bitRead(pressedButtons, i) != bitRead(previousButtons, i))
{
if (bitRead(pressedButtons, i))
{
bitWrite(previousButtons, i , 1);
noteOn(0, notePitches[i], intensity);
MidiUSB.flush();
}
else
{
bitWrite(previousButtons, i , 0);
noteOff(0, notePitches[i], 0);
MidiUSB.flush();
}
}
}
}
// First parameter is the event type (0x09 = note on, 0x08 = note off).
// Second parameter is note-on/note-off, combined with the channel.
// Channel can be anything between 0-15. Typically reported to the user as 1-16.
// Third parameter is the note number (48 = middle C).
// Fourth parameter is the velocity (64 = normal, 127 = fastest).
void noteOn(byte channel, byte pitch, byte velocity) {
midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
MidiUSB.sendMIDI(noteOn);
}
void noteOff(byte channel, byte pitch, byte velocity) {
midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
MidiUSB.sendMIDI(noteOff);
}