Proto Midi controlled VKB-100 (Vocaloid sound modules)
proposed by Prof.Satoshi Nishimura image00 / Jichi Med Univ(JAPAN)

Specs: Yamaha VKB-100 reverse-engineered.
Keyboard play is emulated from external circuits.
MIDI direct plays or computer control enabled.

E-mail: If interested (snishi-tky(a-mark)ninus.ocn.ne.jp ) image00

Back to top image00
Movie: how it runs image00



Movie: how it runs image00 Movie: how it runs image00

			

				
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;
          
        }

     }
  }
}