dxw00d:
noteSend(0x09, 0xB0, 0x08, midiHex[0]);
What I don't get is why the OP is happy to send the first three parameters as hex literal, but not the fourth.
I've hooked up an IR receiver to my arduino and programmed it to recognize the infrared signals from a tv remote. when certain buttons are pushed on the remote, i program the arduino to send different midi signals.
I don't need every button on the remote to behave dynamically. most buttons, i can just program them to do the same thing every time, so in the code all four parameters would be hex literal...
but I am also making it so that when i push the volume and channel buttons up and down, it increases and decreases a variable integer, and that integer is used to determine which array placeholder to use in sending as a midi signal.
in my new code, i've made it so that the channel and volume buttons have 2 hex literal values, but also 2 array values that are determined by integer variables. This enables me to increase and decrease channel and volume in the way i want.
here is my new example code.
void noteSend(char midiChannel, char cmd, char data1, char data2)
{
cmd = cmd | midiChannel; // merge channel number
Serial.print(cmd, BYTE); // or Serial.write(cmd); for arduino ide 1.0
Serial.print(data1, BYTE); // or Serial.write(data1); for arduino ide 1.0
Serial.print(data2, BYTE); // or Serial.write(data2); for arduino ide 1.0
}
byte midiHex[128]= {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F};
int volume = 0;
int chan = 0;
int endloop = 0
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(endloop == 0)
{
if(volume<=126)
{
volume = volume +1;
noteSend(0x08, 0xB0, midiHex[chan], midiHex[volume]);
}
else if(volume ==127)
{
volume = volume +1;
noteSend(0x08, 0xB0, midiHex[chan], midiHex[volume]);
channel = channel+1;
volume = 0;
}
else if(channel == 129)
{
channel = 0;
endloop =1;
}
}
}
and anyone interested in my IR remote MIDI project can find updated code on this thread.
http://arduino.cc/forum/index.php/topic,81699.0.html
thanks for your help!