/////////////////////// // vuperc sequencer 101 // gijs gieskes 2016 /////////////////////// const int LENGTH = 256; //sequencer length (dont know how large array can be) const int SENS = 3; //amount of capacitive sensors #include "TimerOne.h" #include CapacitiveSensor cs_0 = CapacitiveSensor(2,3); CapacitiveSensor cs_1 = CapacitiveSensor(4,5); CapacitiveSensor cs_2 = CapacitiveSensor(6,7); volatile int steps; volatile byte bits; volatile boolean recoutside; volatile boolean eraoutside; volatile boolean caps[3]; volatile boolean enable = true; boolean flip; boolean resetSeq; boolean prev0 = false; boolean prev1 = false; volatile byte out[SENS] = {9, 8, 17}; //pins for output volatile byte seq[SENS][LENGTH+1]; void setup(){ cs_0.set_CS_AutocaL_Millis(1000); cs_1.set_CS_AutocaL_Millis(1000); cs_2.set_CS_AutocaL_Millis(1000); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(17, OUTPUT); //record pinMode(10, INPUT); digitalWrite(10, HIGH); //erase pinMode(11, INPUT); digitalWrite(11, HIGH); //enable pinMode(14, INPUT); digitalWrite(14, HIGH); //led button pinMode(13, OUTPUT); //gate in pinMode(12, INPUT); Timer1.initialize(1000); // initialize timer1, and set a 1/10 second period Timer1.attachInterrupt(sequencerOutput); // attaches callback() as a timer overflow interrupt } void loop() { //start stop seqeuncer if(!digitalRead(14)){ if(flip){ flip = false; enable = !enable; steps = 0; digitalWrite(13, HIGH); } }else{ flip = true; } //gate in resets sequencer if(!digitalRead(12) && resetSeq){ resetSeq = false; steps = 0; }else if(digitalRead(12)){ resetSeq = true; } long total0 = cs_0.capacitiveSensor(30); long total1 = cs_1.capacitiveSensor(30); long total2 = cs_2.capacitiveSensor(30); int thres = analogRead(2) >> 1; if(total0 > thres){ caps[0] = true; }else{ caps[0] = false; } if(total1 > thres){ caps[1] = true; }else{ caps[1] = false; } if(total2 > thres){ caps[2] = true; }else{ caps[2] = false; } //record button recoutside = digitalRead(10); //erase button eraoutside = digitalRead(11); //samplerate / playbackspeed int AV1 = map(analogRead(1), 0, 1023, 300, 13000); Timer1.setPeriod(AV1); } void sequencerOutput() { boolean rec = recoutside; boolean era = eraoutside; boolean output[SENS] = {false, false, false }; for(byte i=0; i 7){ bits = 0; steps++; if(steps > LENGTH){ steps = 0; } if(enable){ if(steps < 10){ digitalWrite(13, HIGH); }else{ digitalWrite(13, LOW); } } } }