seganomadsequencer

thisisasequencerthatcontrolsthecontrollerofthesegaviaabuildinsequencerthebuttonsonthenomadcanbeusedtorecordasequence
thesequenceradvancesbytriggerpulses
theabcbuttonsarealsoconnectedtorelaysthatcanbeusedtocontrolbendsviathemagneticpatchbay

// Gijs Gieskes 2009

byte ar[512]; 
//control pins
byte cPins[] = {7,8,9,10,16,15,14};
//button pins
byte bPins[] = {3,4,5, 6,11,12,13};
//record pin
byte rPin = 18;
//button instellen lengte
byte lPin = 17;

//led pin
byte led = 1;

//lengte
volatile byte length = 0;
volatile byte countA = 0;
volatile boolean go = false;

byte bank = 0;

void setup(){
  
  //controll pins
  for(byte i=0; i<7; i++){
    pinMode(cPins[i], OUTPUT);
  }
  
  //button pins
  for(byte i=0; i<7; i++){
    pinMode(bPins[i], INPUT);
    digitalWrite(bPins[i], HIGH);
  }
  
  //rec button
  pinMode(rPin, INPUT);
  digitalWrite(rPin, HIGH);
  
  //lengte button
  pinMode(lPin, INPUT);
  digitalWrite(lPin, HIGH);
  
  //led
  pinMode(led, OUTPUT);
   
  //stel 0 interupt in
  attachInterrupt(0, interCount, RISING);
}

void loop(){

  seq();
  
}

void seq(){
  
  if(go){
    go = false;
       
    //indicator led aan op stap 0 van counter b 
    if(countA == 0){
      digitalWrite(led, HIGH);
    }else{
      digitalWrite(led, LOW);
    }
    
    //als rec button low
    if(digitalRead(rPin) == LOW){
      //set outputs low zodat de read pins geen last van de aarde hebben.
      for(byte i=0; i<7; i++){
        digitalWrite(cPins[i], LOW);
      }
      //extra delay om zeker te zijn dat er geen aarde op de read pins is.
      delay(1);
      //lees de buttons in en zet ze in de byte als bit.
      for(byte i=0; i<7; i++){
        if(digitalRead(bPins[i])){
          bitClear(ar[countA], i);
        }else{
          bitSet(ar[countA], i);
        }
      }
    }else{
      //lees bits, en schrijf ze naar de pins.
      for(byte i=0; i<7; i++){
        digitalWrite(cPins[i], bitRead(ar[countA], i)); 
      }
    }
  }
}

void interCount(){
  go = true;
  
  countA++; 
  countA %= 512 >> length;
  
  if(digitalRead(lPin) == HIGH){
    length = map(analogRead(5), 0, 1023, 7, 0);
  }
}

circuits

nomad

7oneofthecoolestshitihaveseeninmylife
6ognenno
5discomusicisnotdeadawesomeyouareverytalentedkudos
4sssw33t1
3cool
2itslikesegagenegijs
1hastreetsofrageihavethatone
dragthis♥inheretapthis♥
audioabout