Proto MIDI-controlled sampller originally, PO-35 speak from teenage engineering"
proposed by Prof.Satoshi Nishimura image00 / Jichi Med Univ(JAPAN)

Specs: PO-35 is entry model of sampller, without external control.
MIDI controllable module was integrated to PO-35.

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

Back to top image00
Movie: how it runs image00


const int PIN_SER1   =  8;
const int PIN_LATCH1 =  9;
const int PIN_CLK1   = 10;

const int PIN_SER2   =  11;
const int PIN_LATCH2 =  12;
const int PIN_CLK2   = 13;

const int PIN_SER3   =  5;
const int PIN_LATCH3 =  6;
const int PIN_CLK3   = 7;

const int preset_sound=3;

int inch=0;

byte patterns[] = {
  B00000000,
  B10000000,
  B01000000,
  B00100000,
  B00010000,
  B00001000,
  B00000100,
  B00000010,
  B00000001,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000
};

void setup() {

  Serial.begin(31250);
  int aread = analogRead(0);
  if(aread<212)
  {
    inch=0;   //INCH=0;
  }
  else
  {
    inch=5;   //INCH=5;
  }
  
  //1-1 to1-8 upper
  //2-1 to2-8 lower
  //3-1 relay
  //3-2 soind
  //3-3 bpm
  //3-4 rec
  
  pinMode( PIN_SER1, OUTPUT );
  pinMode( PIN_SER2, OUTPUT );
  pinMode( PIN_SER3, OUTPUT );
  pinMode( PIN_LATCH1, OUTPUT );
  pinMode( PIN_LATCH2, OUTPUT );
  pinMode( PIN_LATCH3, OUTPUT );
  pinMode( PIN_CLK1, OUTPUT );
  pinMode( PIN_CLK2, OUTPUT );
  pinMode( PIN_CLK3, OUTPUT );

  
  
    digitalWrite( PIN_LATCH1, LOW );
    shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH1, HIGH );

    
    digitalWrite( PIN_LATCH2, LOW );
    shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH2, HIGH );

    
    digitalWrite( PIN_LATCH3, LOW );
    shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH3, HIGH );

    //sound
    digitalWrite( PIN_LATCH3, LOW );
    shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[2] );
    digitalWrite( PIN_LATCH3, HIGH );
    delay(600);
    
    //preset
    digitalWrite( PIN_LATCH1, LOW );
    shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[preset_sound] );
    digitalWrite( PIN_LATCH1, HIGH );
    delay(600);

     digitalWrite( PIN_LATCH3, LOW );
    shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH3, HIGH );
    delay(300);
    
    digitalWrite( PIN_LATCH1, LOW );
    shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH1, HIGH );
    delay(300);
  
  for ( int i=1; i<9; i++ ) {
    digitalWrite( PIN_LATCH1, LOW );
    shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[i] );
    digitalWrite( PIN_LATCH1, HIGH );
    delay(300);
    
    digitalWrite( PIN_LATCH1, LOW );
    shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH1, HIGH );
    delay(30);

  }
  for ( int i=1; i<9; i++ ) {
    digitalWrite( PIN_LATCH2, LOW );
    shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[i] );
    digitalWrite( PIN_LATCH2, HIGH );
    delay(300);
    
    digitalWrite( PIN_LATCH2, LOW );
    shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
    digitalWrite( PIN_LATCH2, HIGH );
    delay(30);

  }
}


int lastkey=-1;
unsigned long last_time=millis();

void loop() 
{
  //1-1 to1-8 upper
  //2-1 to2-8 lower
  //3-1 relay
  //3-2 soind
  //3-3 bpm
  //3-4 rec
  // 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();
    
    
    //NOTEOFF
    if (inByte1 == (0x80+inch))
    {
       //NOTE OFF
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );
    
             int inkey=inByte2;
             if(inkey==lastkey)
             {
               lastkey=-1;
             }
     }

     if(inByte1 == (0x90+inch))
     {  
      int offset=12;
        if(inByte2==36-offset)
        {
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
    
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );

    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //sound
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[1] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(600);

             digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
                else if (inByte2==37-offset)
            {
          
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );

            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );

    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //sound
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(600);

             digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
                else if (inByte2==38-offset)
            {
            
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
    
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );
    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //sound
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[3] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(600);

            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
               else if (inByte2==39-offset)
            {
       
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
    
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );

            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //sound
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(600);

            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
        
            }
                else if (inByte2==43-offset)
            {
          
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );

            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );
    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //rec
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[1] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(3600);

             digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
               else if (inByte2==44-offset)
            {
          
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );

    
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );

    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //rec
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[2] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(3600);

            digitalWrite( PIN_LATCH3, LOW );
           shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
                else if (inByte2==45-offset)
            {
          
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );

            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );

    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //rec
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[3] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(3600);

            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
               else if (inByte2==46-offset)
           {
            
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );

    
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
           digitalWrite( PIN_LATCH2, HIGH );

    
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );

            //rec
            digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(600);
    
            //preset
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[4] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(3600);

             digitalWrite( PIN_LATCH3, LOW );
            shiftOut( PIN_SER3, PIN_CLK3, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH3, HIGH );
            delay(300);
    
            digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            delay(300);  
            }
            else
            {
            }

      
        int swkey=(inByte2 %16);
        if(lastkey!=-1)
        {
           digitalWrite( PIN_LATCH1, LOW );
            shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH1, HIGH );
            digitalWrite( PIN_LATCH2, LOW );
            shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
            digitalWrite( PIN_LATCH2, HIGH );
            delay(30);
        }
        
        switch(swkey)
        {
          case 0: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[5] );
             digitalWrite( PIN_LATCH2, HIGH );
            break;
          case 1: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[6] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 2: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[7] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 3: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[8] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 4: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[1] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 5: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[2] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 6: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[3] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 7: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[4] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 8: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[5] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 9: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[6] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 10: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[7] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 11: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[8] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 12: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[1] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 13: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[2] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 14: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[3] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          case 15: 
             digitalWrite( PIN_LATCH1, LOW );
             shiftOut( PIN_SER1, PIN_CLK1, LSBFIRST, patterns[4] );
             digitalWrite( PIN_LATCH1, HIGH );
             digitalWrite( PIN_LATCH2, LOW );
             shiftOut( PIN_SER2, PIN_CLK2, LSBFIRST, patterns[0] );
             digitalWrite( PIN_LATCH2, HIGH );
             break;
          
        }
        lastkey=swkey;

     }
  }
}