//Serv Seq 1 Gijs Gieskes 2009 #include #define NBR_SERVOS 3 // the number of servos, up to 48 for Mega, 12 for other boards MegaServo Servos[NBR_SERVOS] ; // max servos is 48 for mega, 12 for other boards //digi pot #define DATAOUT 11//MOSI #define DATAIN 12//MISO - not used, but part of builtin SPI #define SPICLOCK 13//sck #define SLAVESELECT 10//ss //selected servo byte serSel = 0; int anaVOPT = 0; byte anaRVsmooth[3] = {0,0,0}; unsigned long analogR0 = 0; //activity detector timer unsigned long activityTimer = 120000; boolean activity = false; byte counterOp = 0; //volume pins byte volPots[3] = {2, 0, 1}; byte butPins[3] = {3, 5, 6}; byte ledPins[3] = {1, 9, 8}; byte anaPins[3] = {4, 3, 2}; //seq int seqSpeed = 32; unsigned long seqMillis = 0; byte seqPos[3] = {0,0,0}; byte seqArrSer[3][128]; byte seqArrVol[3][128]; void setup() { for(int i=0; i<3; i++){ for(int j=0; j<128; j++){ seqArrSer[i][j] = 30; seqArrVol[i][j] = 255; } } //DIGI POT START byte clr; pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK,OUTPUT); pinMode(SLAVESELECT,OUTPUT); digitalWrite(SLAVESELECT,HIGH); //disable device SPCR = (1< seqSpeed) { seqMillis = millis(); for(byte i=0; i<3; i++){ seqPos[i]++; if(seqPos[i] > map(analogRead(anaPins[i]), 0, 1023, 1, 127)){ //Serial.println(map(analogRead(anaPins[i]), 0, 1023, 1, 127), DEC); seqPos[i] = 0; digitalWrite(ledPins[i], HIGH); }else{ digitalWrite(ledPins[i], LOW); } } //servoPositionJoy(); seqRec(); } activityTimerF(); delay(1); } void seqRec(){ for(byte i=0; i<3; i++){ if(digitalRead(butPins[i]) == LOW){ //reset activity timer activityTimer = millis(); //Serial.println(seqArrVol[i][seqPos[i]], DEC); serSel = i; //selecteer welke servo positie settings gebruikt moeten worden. seqArrSer[i][seqPos[i]] = map(analogRead(0), 0, 1023, 20, 92); //anaRVsmooth[i]; seqArrVol[i][seqPos[i]] = smoothVol(); } //Serial.println(seqArrVol[i][seqPos[i]], DEC); Servos[i].write(seqArrSer[i][seqPos[i]]); write_pot(volPots[i], seqArrVol[i][seqPos[i]]); } } void activityTimerF(){ if(millis() - activityTimer > 120000) { // 1 minute activity = false; digitalWrite(0, LOW); //turn motor off while(!activity){ for(byte i=0; i<3; i++){ if(digitalRead(butPins[i]) == LOW){ activityTimer = millis(); //rest timer digitalWrite(0, HIGH); //turn motor on activity = true; break; }else{ digitalWrite(ledPins[i], HIGH); write_pot(volPots[i], 255); Servos[i].write(30); } } delay(8); } } } int smoothVol(){ byte smoothAmount = 3; unsigned long av = 0; //reset analogRead for(byte i=0; i