Pages: [1]   Go Down
Author Topic: switch matrix polyphony  (Read 421 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hey. im stuck.

im trying to make a midi controller with added features of tanspose functions with led interfacing, which all works fine

but im struggling in finding a way of making it so i can read more than 1 switch at a time without getting phantom notes playing?

i have put pull down resistors in with each switch and a diode. what would you say id do?

ive made this code from a mixture of things ive found on the forum

int HotPin[6] = {2,3,4,5,6,7}; //Hot (output) pins                                             //
int GndPin[6] = {14,15,16,17,18,19}; //Ground (input) pins                                             //
int OldKeyPress[36] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};           //
int NewKeyPress[36] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};           //
int KeyNum = 1; //Identifies the key being read                                                  //
int MidiNote = 60; //The MIDI note to be played (Middle C is 60)
int midnote = 56; // the midi note automatically transposed to
int val = 0;// to store state of transpose button up
int val1 = 0;// to store state of transpose button down
int state = 0;

void setup()                                                                                   
{                                                                                               
Serial.begin(31250);
    pinMode(2, OUTPUT); 
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(8, INPUT); //transpose up
    pinMode(9, INPUT); //transpose down
    pinMode(10, OUTPUT); //leg one of bipolar LED 1
    pinMode(11, OUTPUT); // leg two of bipolar LED 1
    pinMode(12, OUTPUT); // leg one of bipolar LED 2
    pinMode(13, OUTPUT); // leg two of bipolar LED 2
    pinMode(14, INPUT);
    pinMode(15, INPUT);
    pinMode(16, INPUT);
    pinMode(17, INPUT);
    pinMode(18, INPUT);
    pinMode(19, INPUT);
   
   
    digitalWrite (10, HIGH);
    digitalWrite (11, LOW);
    delay (100);
    digitalWrite (10, LOW);
    digitalWrite (11, HIGH);
    delay (100);
    digitalWrite (10, HIGH);
    digitalWrite (11, LOW);
    digitalWrite (12, LOW);
    digitalWrite (13, HIGH);
    delay (100);
    digitalWrite (10, LOW);
    digitalWrite (11, LOW);
    digitalWrite (12, HIGH);
    digitalWrite (13, LOW);
    delay (100);
    digitalWrite (12, LOW);
    digitalWrite (13, HIGH);
    delay (100);
    digitalWrite (12, LOW);
    digitalWrite (13, LOW);
   
}

void loop()                                                                                     


  for (int h=0; h <= 5; h++)                                                                   
  {                                                                                             
    digitalWrite(HotPin[h], HIGH);                                                             
    {                                                                                           
      for (int g=0; g <=5; g++)                                                               
      {                                                                                       
        KeyNum = (g * 6) + h; //Sets KeyNum to a value from 0 to 31 (C1 is 04)
        if(analogRead(GndPin[g]) >= 600)
       {
          NewKeyPress[KeyNum] = 1;
        }
        else
        {
          NewKeyPress[KeyNum] = 0;
        }
        //Find out if the key if pressed         
        MidiNote = KeyNum + midnote; //Makes C1 on the keyboard middle C                             
        if (NewKeyPress[KeyNum] == 1 && OldKeyPress[KeyNum] == 0) //If key is pressed         
        {                                                                                     
          MidiMessage(0x90, MidiNote, 0x70); //note on, channel 1                             
        }                                                                                       
        else if (NewKeyPress[KeyNum] == 0 && OldKeyPress[KeyNum] == 1) //If key is released     
        {                                                                                       
          MidiMessage(0x80, MidiNote, 0x70); //note off, channel 1                             
        }                                                                                       
        OldKeyPress[KeyNum] = NewKeyPress[KeyNum]; //Set state for next check                   
      }                                                                                         
    }
    digitalWrite(HotPin[h], LOW);                                                                                           
  }


{   
 
val = digitalRead(smiley-cool ; //reads button value
if (val == HIGH) {
midnote = 1 + midnote;
state = state + 1;
delay (250);}

val1 = digitalRead(9) ; //reads button value
if (val1 == HIGH) {
midnote = midnote - 1;
state = state - 1;
delay (250);
}


if (state == 0) {
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);}
 
  if (state == 1) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);}
 
  if (state == 2) {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);}
 
  if (state == 3) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  }
 
  if (state == 4) {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  }
 
  if (state == 5) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  }
 
  if (state == 6) {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  }
 
  if (state == 7) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  }
 
  if (state == smiley-cool {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  }
 
  if (state == 9) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  }
 
  if (state == 10) {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  }
 
  if (state == 11) {
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  }
 
  if (state == 12) {
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(13,HIGH);
  }
 
 
   if (state == -1) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);}
 
  if (state == -2) {
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);}
 
  if (state == -3) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  }
 
  if (state == -4) {
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
  }
 
  if (state == -5) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  }
   if (state == -6) {
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
  }
 
  if (state == -7) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  }
  if (state == -8) {
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
  }
 
  if (state == -9) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  }
  if (state == -10) {
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
  }
 
  if (state == -11) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  }
   if (state == -12) {
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  }
}
}

                                                                                           
//=================================================================================================
void MidiMessage(char cmd, char data1, char data2)                                               //
{                                                                                                //
  Serial.print(cmd, BYTE);                                                                       //
  Serial.print(data1, BYTE);                                                                     //
  Serial.print(data2, BYTE);                                                                     //
}                                                                                                //
//=================================================================================================
 



any help would be much appreciated!

thanks

sam
Logged

Pages: [1]   Go Up
Jump to: