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