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