int board=1; //borad 1 (6/12) AOHIGH or 2 (7) A0LOW
int inch=0;
void setup()
{
//read board type
int aread = analogRead(0);
int waittime;
if(aread<212)
{
board=1;
}
else
{
board=2;
}
int aread2 = analogRead(1);
if(aread2>212)
{
inch=5;
}
//set PINS
{
pinMode(6,OUTPUT); // 1 in 7
pinMode(7,OUTPUT); // 2 in 7
pinMode(8,OUTPUT); // 3 in 7
pinMode(9,OUTPUT); // 4 in 7
pinMode(10,OUTPUT); // 5 in 7
pinMode(11,OUTPUT); // 6 in 7
pinMode(12,OUTPUT); // 7 in 7
pinMode(3,OUTPUT); // 0 in 6
pinMode(4,OUTPUT); // 1 in 6
pinMode(5,OUTPUT); // 2 in 6
}
//demos
//k=0 72 i=71
//k=1
if(board==1) //E- E F
{
waittime = 80;
for (int k=1; k<7; k++)
{
for (int i=0; i<3; i++)
{
digitalWrite( 5-(i%3), HIGH);
digitalWrite( 12-(k%7), HIGH);
delay(waittime);
digitalWrite( 5-(i%3), LOW);
digitalWrite( 12-(k%7), LOW);
delay(20);
}
}
}
if(board==2) //C C+
{
delay(1000);
waittime = 80;
for (int k=0; k<7; k++)
{
for (int i=0; i<3; i++)
{
digitalWrite( i%3+3, HIGH);
digitalWrite( 12-(k%7), HIGH);
delay(waittime);
digitalWrite( i%3+3, LOW);
digitalWrite( 12-(k%7), LOW);
delay(20);
}
}
}
//set zero
for (int i=0;i<7;i++)
{
digitalWrite (i+6,LOW);
}
//start MIDI in/out
Serial.begin(31250);
}
int lastkey=-1;
unsigned long last_time=millis();
void loop()
{
// check time
unsigned long el_time=millis();
int difftime = -last_time +el_time;
last_time = el_time;
// clear unknown data in 10sec
if(el_time % 10000 == 0)
{
for (int i=0;i<1;i++)
{
if (Serial.available() > 0)
{
int inNULL = Serial.read();
}
else
{
i++;
}
}
}
//check inkey from MIDI
if (Serial.available() > 2)
{
int inByte1 = Serial.read();
int inByte2 = Serial.read();
int inByte3 = Serial.read();
//NOTEON
if (inByte1 == (0x90+inch))
{
int inkey=inByte2;
lastkey=inkey;
}
//NOTEOFF
if (inByte1 == (0x80+inch))
{
for (int i=3;i<13;i++)
{
digitalWrite (i,LOW);
}
int inkey=inByte2;
if(inkey==lastkey)
{
lastkey=-1;
}
}
if(inByte1 == (0x90+inch) && lastkey!=-1)
{
for (int i=3;i<13;i++)
{
digitalWrite (i,LOW);
}
int swkey=lastkey%12;
switch(swkey)
{
case 0:
if(board==1)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(3,HIGH);
}
break;
case 1:
if(board==2)
{
if(inByte2<49)
{
digitalWrite(11,HIGH);
}
else if (inByte2<61)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(5,HIGH);
}
break;
case 2:
if(board==2)
{
if(inByte2<49)
{
digitalWrite(11,HIGH);
}
else if (inByte2<61)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(4,HIGH);
}
break;
case 3:
if(board==2)
{
if(inByte2<49)
{
digitalWrite(11,HIGH);
}
else if (inByte2<61)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(3,HIGH);
}
break;
case 4:
if(board==1)
{
if(inByte2<52)
{
digitalWrite(11,HIGH);
}
else if (inByte2<63)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(5,HIGH);
}
break;
case 5:
if(board==1)
{
if(inByte2<49)
{
digitalWrite(11,HIGH);
}
else if (inByte2<61)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(4,HIGH);
}
break;
case 6:
if(board==1)
{
if(inByte2<49)
{
digitalWrite(11,HIGH);
}
else if (inByte2<61)
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(7,HIGH);
}
digitalWrite(3,HIGH);
}
break;
case 7:
if(board==2)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(5,HIGH);
}
break;
case 8:
if(board==2)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(4,HIGH);
}
break;
case 9:
if(board==2)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(3,HIGH);
}
break;
case 10:
if(board==1)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(5,HIGH);
}
break;
case 11:
if(board==1)
{
if(inByte2<37)
{
digitalWrite(12,HIGH);
}
else if (inByte2<49)
{
digitalWrite(10,HIGH);
}
else if (inByte2<61)
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(6,HIGH);
}
digitalWrite(4,HIGH);
}
break;
}
}
}
}