#define ENCODER_CLK A0
#define ENCODER_DT A1
#define ENCODER_SW A2
void setup() {
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
}
int lastClk = HIGH;
int lastencSW = HIGH;
int zaehler = 0; //
String message = " ";
int modus = 0; //Modusnummer
String Modusname ; // welcher Parameter soll mit encoder eingestellt werden?
int rotary = 0; // encoder unverändert, -1, 0 +1
int bpm = 120; // Beats per miute - Speed also
float period = 500; // Abstand zwischen Noten - wird aus bpm erechnet
int index = 1; // welche Skala soll gespielt werden?
unsigned long startMillis = millis(); //some global variables available anywhere in the program
unsigned long currentMillis;
// unsigned long period = 1000;
void loop() {
// zuerst Auswertung des Encoderschalters
int newencSW = digitalRead(ENCODER_SW);
// Abfrage, ob Schalter gedrückt wurde, um jedesmal den Modus
// um 1 zu erhöhen, dann zurück auf 0.
if (newencSW != lastencSW) {
zaehler = zaehler +1;
if (zaehler >= 2) {
// Modus weiterschalten und derweil seriell ausgeben, es beginnt mit
modus ++;
if (modus >= 5) {modus = 0;}
// Serial.println("Switch is pressed, Modus ist " + String(modus));
// Zum schluss noch Zähler um eins erhöhen
zaehler = 0;
}
lastencSW = newencSW;
}
// dann Auswertung des Drehencoders -
// endet mit rotary als -1, 0 oder +1 unterhalb der Abfrage
rotary = 0; // start mit 0
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
// There was a change on the CLK pin
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
rotary ++;
Serial.println("Rotated clockwise ⏩ and rotary value is " + String(rotary));
}
if (newClk == LOW && dtValue == LOW) {
rotary --;
Serial.println("Rotated counterclockwise ⏪ and rotary value is "+ String(rotary));
// message = "Rotated counterclockwise ⏪";
}
}
switch (modus) {
case 0:
if (rotary == 1){bpm = bpm +1;}
if (rotary == -1) {bpm = bpm -1;}
float period = 60000/bpm;
// Serial.println("bpm = " + String(bpm) + " period = " + String(period));
// delay(15);
// Geschwindigkeit
break;
case 1:
index = index + rotary;
if (index >= 8){index = 1;}
if (index <= 0){index = 8;}
Serial.println("Index der Skala = " +String(index));
delay(15);
// Tonart
break;
case 2:
Serial.println("Case 2");
delay(15);
// Grundton
break;
case 3:
Serial.println("Case 3");
delay(500);
// Midikanal
break;
}
// Und hier jetzt die Ausgabe - abhängig von den millis...
currentMillis = millis(); //get the current time
if (currentMillis - startMillis >= period) //test whether the period has elapsed
{
// analogWrite(ledPin, brightness); //set the brightness of the LED
// brightness += increment; //will wrap round from 255 to 0 because brightness is an unsigned data type
startMillis = currentMillis; //IMPORTANT to save the start time of the current LED brightness
Serial.println("Period =" + String(period) + " Index = " + String(index) + " Modus ist " + String(modus));
}
}