/////////////////////////////////////////////////////////////////


#include "Rotary.h";


/////////////////////////////////////////////////////////////////

#define ROTARY_PIN1	A2
#define ROTARY_PIN2	A3
#define BUTTON_PIN	9
#define CLICKS_PER_STEP 1   // this number depends on your rotary encoder 
#define INCREMENT 50
byte mode = 0;
const int modes = 4;
int analogSliderValues[modes];
int pos[modes];
bool Muted[modes] = {false, false, false, false};
int Mute = 0;

long buttonTimer = 0;
long longPressTime = 250;

boolean buttonActive = false;
boolean longPressActive = false;
/////////////////////////////////////////////////////////////////

Rotary r;


/////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  r.begin(ROTARY_PIN1, ROTARY_PIN2, CLICKS_PER_STEP, INCREMENT);
  r.setChangedHandler(rotate);

  
}
///////////////////////////////////////////////////////////////////
void loop() {
  delay(100);
  r.loop();
 // readbutton();
  
for (int i = 0; i <= modes - 1; i++) {
    if (Muted[i]){
  analogSliderValues[i] = Mute;
 } else {
  analogSliderValues[i] = pos[i];
  }
}
  Serial.print("pos: ");
  Serial.print(pos[0]);
  Serial.print(" | anal: ");
  Serial.print(analogSliderValues[0]);
  Serial.print(" | Toggle: ");
  Serial.print(Muted[0]);
  Serial.print(" | Mode: ");
  Serial.println(mode);

if (digitalRead(BUTTON_PIN) == LOW) {

		if (buttonActive == false) {

			buttonActive = true;
			buttonTimer = millis();

		}

		if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) {

			longPressActive = true;
			//Long press

      switch(mode){
      case 0:
        Muted[0] = !Muted[0];
        break;
      case 1:
         Muted[1] = !Muted[1];
        break;
      case 2:
         Muted[2] = !Muted[2];
        break;
      case 3:
         Muted[3] = !Muted[3];
        break;
      
      }
      
		}

	} else {

		if (buttonActive == true) {

			if (longPressActive == true) {

				longPressActive = false;

			} else {

				//Short press
          mode++;
          if (mode > modes - 1) {
          mode = 0;
  }
			}

			buttonActive = false;

		}

	}


}
/////////////////////////////////////////////////////////////////

// on change
void rotate(Rotary& r) {

switch(mode){

case 0:{
pos[0] = r.getPosition();
break;  
}
case 1:{
pos[1] = r.getPosition();  
break; 
}
case 2:{
pos[2] = r.getPosition();  
break; 
}
case 3:{
pos[3] = r.getPosition(); 
break;  
}  

}
}


/////////////////////////////////////////////////////////////////