4 step sequencer prototype 

시퀀서를 대충 만들어봤는데요…

timer interrupt 를 이용해서 속도를 조절하고요..

라이브랑 붙여서 해봤음…

볼륨한개는
버튼 네개와 결합하여 각 단계별 음정. 별도 버튼 하나로 시퀀싱 속도를 관장하고

또 다른 한개는 피치벤드인데… 라이브에서는 필터 프리퀀시로 매핑했어요..

아래 코드는 틴지용이므로 usbMIDI 부분과 핀 부분은 수정하셔야합니다.

#include "TimerOne.h"

char button[5] = {0,1,2,3,4};
char analogPin7 = A7;
char analogPin6 = A6;
long buttonFreq[5] ={0,0,0,0,0};
long oldbuttonFreq[4]={0,0,0,0};
byte ledpin = 6;//13 for uno/duemi...
long freqVal;
long tempo = 1000000;
void setup()
{ // input button
 pinMode(button[0], INPUT);
 pinMode(button[1], INPUT);
 pinMode(button[2], INPUT);
 pinMode(button[3], INPUT); 
 pinMode(button[4], INPUT);
 pinMode(ledpin, OUTPUT);
 digitalWrite(button[0], HIGH);
 digitalWrite(button[1], HIGH);
 digitalWrite(button[2], HIGH);
 digitalWrite(button[3], HIGH); 
 digitalWrite(button[4], HIGH);
 Serial.begin(9600);
 Timer1.initialize();
 Timer1.attachInterrupt(run);
}
int num =0;
void run()
{
 digitalWrite(ledpin, digitalRead(ledpin) ^ 1);
 
   usbMIDI.sendNoteOff(oldbuttonFreq[num]/8, 0, 2);  
   if(num<3){ num++; } else {num=0;}
   usbMIDI.sendNoteOn(buttonFreq[num]/8, 120, 2);  
   oldbuttonFreq[num] = buttonFreq[num];
}
int pitchval=0, oldval=0, olderval=0;
void loop()
{
  freqVal = analogRead(analogPin7);
  for(char i = 0; i<5; i++)  
{ if (digitalRead(button[i])==0)
 {buttonFreq[i] = freqVal ;
 }
}
    
  tempo = 50000+buttonFreq[4]*500;
  Timer1.setPeriod(tempo);
pitchval = analogRead(analogPin6);
if (pitchval!=oldval && pitchval != olderval)
 {usbMIDI.sendPitchBend( pitchval*16,2);
  olderval = oldval;
      oldval = pitchval;
    }
  //Serial.println(buttonFreq[4]);

  delay(10);
}