Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Help with Arduino code. I am trying to have a grid of LEDs light up when a key is pressed for each note of a

Help with Arduino code. I am trying to have a grid of LEDs light up when a key is pressed for each note of a 25 key MIDI controller. The LEDs are wired in a 5x5 matrix. 5 rows and 5 columns, with 5 LEDs in a row, each LED being connected to a different coulum.my problem is when a key is pressed all the notes in that column lights up. Can you help fix the code so that when a key is pressed only that note lights up. Example: if I hit the C key on the keyboard only the LED for the C key should light up and so on for all 25 keys. The code was written in the Arduino IDE with MIDI library using the Arduino Mega 2560 with a MIDI shield.

The image is a rough Estimate of how i have it set up . the " MyHandleNoteON" is the function that will be called by the Midi Library when a MIDI NOTE ON message is received. It will be passed bytes for Channel, Pitch, and Velocity. then it will get the data for the pitch and turn on the LED by row and col.MyHandleNoteOFF is the function that will be called by the Midi Library when a MIDI NOTE OFF message is received.* A NOTE ON message with Velocity = 0 will be treated as a NOTE OFF message *It will be passed bytes for Channel, Pitch, and Velocity turning off the LED by row and col. the code is shown below

image text in transcribed

#include MIDI_CREATE_DEFAULT_INSTANCE(); int colpin1=31; int colpin2=33; int colpin3=35; int colpin4=37; int colpin5=39; int rowpin1=30; int rowpin2=32; int rowpin3=34; int rowpin4=36; int rowpin5=38; byte data1 = 0; byte data2 = 0;

void setup() { MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library OMNI sets it to listen to all channels. MIDI.setHandleNoteOn(MyHandleNoteOn);// This command tells the Midi Library to call "MyHandleNoteOn" when a NOTE ON command is received. MIDI.setHandleNoteOff(MyHandleNoteOff);// This command tells the Midi Library to call "MyHandleNoteOff" when a NOTE OFF command is received. pinMode(colpin1,OUTPUT);//set pin as output pinMode(colpin2,OUTPUT); pinMode(colpin3,OUTPUT); pinMode(colpin4,OUTPUT); pinMode(colpin5,OUTPUT); pinMode(rowpin1,OUTPUT); pinMode(rowpin2,OUTPUT); pinMode(rowpin3,OUTPUT); pinMode(rowpin4,OUTPUT); pinMode(rowpin5,OUTPUT);//set pin as ouput digitalWrite(colpin1,HIGH); digitalWrite(colpin2,HIGH); digitalWrite(colpin3,HIGH); digitalWrite(colpin4,HIGH); digitalWrite(colpin5,HIGH); digitalWrite (rowpin1,LOW); digitalWrite (rowpin2,LOW); digitalWrite (rowpin3,LOW); digitalWrite (rowpin4,LOW); digitalWrite (rowpin5,LOW); }

void loop() { // Main loop MIDI.read();// Continuously check if Midi data has been received. } void MyHandleNoteOn(byte channel, byte pitch, byte velocity) { data1 = MIDI.getData1();// this is the pitch of the note

if (data1==48)//C3 digitalWrite(colpin1,LOW);// signal to LED for col digitalWrite(rowpin1,HIGH);//signal to LED for row if (data1==49)//C3# digitalWrite(colpin2,LOW); digitalWrite(rowpin1,HIGH); if (data1==50)//D3 digitalWrite(colpin3,LOW); digitalWrite(rowpin1,HIGH); if (data1==51)//D3# digitalWrite(colpin4,LOW); digitalWrite(rowpin1,HIGH); if (data1==52)//E3 digitalWrite(colpin5,LOW); digitalWrite(rowpin1,HIGH); if (data1==53)//F3 digitalWrite(colpin1,LOW); digitalWrite(rowpin2,HIGH); if (data1==54)//F3# digitalWrite(colpin2,LOW); digitalWrite(rowpin2,HIGH); if (data1==55)//G3 digitalWrite(colpin3,LOW); digitalWrite(rowpin2,HIGH); if (data1==56)//G3# digitalWrite(colpin4,LOW); digitalWrite(rowpin2,HIGH); if (data1==57)//A3 digitalWrite(colpin5,LOW); digitalWrite(rowpin2,HIGH); if (data1==58)//A3# digitalWrite(colpin1,LOW); digitalWrite(rowpin3,HIGH); if (data1==59)//B3 digitalWrite(colpin2,LOW); digitalWrite(rowpin3,HIGH); if (data1==60)//C4 digitalWrite(colpin3,LOW); digitalWrite(rowpin3,HIGH); if (data1==61)//C4# digitalWrite(colpin4,LOW); digitalWrite(rowpin3,HIGH); if (data1==62)//D4 digitalWrite(colpin5,LOW); digitalWrite(rowpin3,HIGH); if (data1==63)//D4# digitalWrite(colpin1,LOW); digitalWrite(rowpin4,HIGH); if (data1==64)//E4 digitalWrite(colpin2,LOW); digitalWrite(rowpin4,HIGH); if (data1==65)//F4 digitalWrite(colpin3,LOW); digitalWrite(rowpin4,HIGH); if (data1==66)//F4# digitalWrite(colpin4,LOW); digitalWrite(rowpin4,HIGH); if (data1==67)//G4 digitalWrite(colpin5,LOW); digitalWrite(rowpin4,HIGH); if (data1==68)//G4# digitalWrite(colpin1,LOW); digitalWrite(rowpin5,HIGH); if (data1==69)//A4 digitalWrite(colpin2,LOW); digitalWrite(rowpin5,HIGH); if (data1==70)//A4# digitalWrite(colpin3,LOW); digitalWrite(rowpin5,HIGH); if (data1==71)//B4 digitalWrite(colpin4,LOW); digitalWrite(rowpin5,HIGH); if (data1==72)//C5 digitalWrite(colpin5,LOW); digitalWrite(rowpin5,HIGH); } void MyHandleNoteOff(byte channel, byte pitch, byte velocity) { data1 = MIDI.getData1();// this the pitch of the note

if (data1==48)//C3 digitalWrite(colpin1,HIGH);//signal to LED col digitalWrite(rowpin1,LOW);//signal to LED row if (data1==49)//C3# digitalWrite(colpin2,HIGH); digitalWrite(rowpin1,LOW); if (data1==50)//D3 digitalWrite(colpin3,HIGH); digitalWrite(rowpin1,LOW); if (data1==51)//D3# digitalWrite(colpin4,HIGH); digitalWrite(rowpin1,LOW); if (data1==52)//E3 digitalWrite(colpin5,HIGH); digitalWrite(rowpin1,LOW); if (data1==53)//F3 digitalWrite(colpin1,HIGH); digitalWrite(rowpin2,LOW); if (data1==54)//F3# digitalWrite(colpin2,HIGH); digitalWrite(rowpin2,LOW); if (data1==55)//G3 digitalWrite(colpin3,HIGH); digitalWrite(rowpin2,LOW); if (data1==56)//G3# digitalWrite(colpin4,HIGH); digitalWrite(rowpin2,LOW); if (data1==57)//A3 digitalWrite(colpin5,HIGH); digitalWrite(rowpin2,LOW); if (data1==58)//A3# digitalWrite(colpin1,HIGH); digitalWrite(rowpin3,LOW); if (data1==59)//B3 digitalWrite(colpin2,HIGH); digitalWrite(rowpin3,LOW); if (data1==60)//C4 digitalWrite(colpin3,HIGH); digitalWrite(rowpin3,LOW); if (data1==61)//C4# digitalWrite(colpin4,HIGH); digitalWrite(rowpin3,LOW); if (data1==62)//D4 digitalWrite(colpin5,HIGH); digitalWrite(rowpin3,LOW); if (data1==63)//D4# digitalWrite(colpin1,HIGH); digitalWrite(rowpin4,LOW); if (data1==64)//E4 digitalWrite(colpin2,HIGH); digitalWrite(rowpin4,LOW); if (data1==65)//F4 digitalWrite(colpin3,HIGH); digitalWrite(rowpin4,LOW); if (data1==66)//F4# digitalWrite(colpin4,HIGH); digitalWrite(rowpin4,LOW); if (data1==67)//G4 digitalWrite(colpin5,HIGH); digitalWrite(rowpin4,LOW); if (data1==68)//G4# digitalWrite(colpin1,HIGH); digitalWrite(rowpin5,LOW); if (data1==69)//A4 digitalWrite(colpin2,HIGH); digitalWrite(rowpin5,LOW); if (data1==70)//A4# digitalWrite(colpin3,HIGH); digitalWrite(rowpin5,LOW); if (data1==71)//B4 digitalWrite(colpin4,HIGH); digitalWrite(rowpin5,LOW); if (data1==72)//C5 digitalWrite(colpin5,HIGH); digitalWrite(rowpin5,LOW);

}

MIDI Cable ALESIS Q25 Keyboard MIDI Controller

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Relational Database Technology

Authors: Suad Alagic

1st Edition

354096276X, 978-3540962762

More Books

Students also viewed these Databases questions