#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define ENCODER_CLK 2
#define ENCODER_DT 4
#define ENCODER_SW 5
int counter = 0;
volatile int encoderPos = 0;
volatile bool aState, aLastState;
//#include <Encoder.h>
//Encoder encoder(ENCODER_A, ENCODER_B);
int menuIndex = 0;
int maxMenuItems = 3;
bool menuVisible = false;
bool buttonPressed = false;
int value1 = 123;
int value2 = 345;
void setup() {
//pinMode(BUTTON_PIN, INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISR, FALLING);
Serial.begin(115200); // Any baud rate should work
Serial.println("Hello Arduino\n");
// Initialize encoder pins
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
display.clearDisplay();
display.setCursor(0, 0);
display.println("Value1 = " + String(value1));
display.display();
delay(2000);
}
void loop() {
//Serial.println(encoderPos);
//Serial.println(menuVisible);
if (digitalRead(ENCODER_SW) == LOW) {
buttonISR();
}
if (menuVisible) {
//int encoderPos = encoderPos;
if (encoderPos > 0) {
switch (menuIndex) {
case 0:
if (value1 < 500)
value1++;
break;
case 1:
if (value2 < 500)
value2++;
break;
}
displayValues();
delay(100);
} else if (encoderPos < 0) {
switch (menuIndex) {
case 0:
if (value1 > 100)
value1--;
break;
case 1:
if (value2 > 100)
value2--;
break;
}
displayValues();
delay(100);
}
}
}
void displayMenu() {
display.clearDisplay();
display.setCursor(0, 0);
switch (menuIndex) {
case 0:
display.println("Selected: Menu Item 1");
break;
case 1:
display.println("Selected: Menu Item 2");
break;
case 2:
display.println("Selected: Menu Item 3");
break;
}
display.display();
}
void displayValues() {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Value1 = " + String(value1));
display.println("Value2 = " + String(value2));
display.display();
}
void buttonISR() {
Serial.println(buttonPressed);
if (!buttonPressed) {
if (menuVisible) {
menuVisible = false;
buttonPressed = true;
display.clearDisplay();
displayMenu();
} else {
menuVisible = true;
displayValues();
}
} else {
buttonPressed = false;
// Speichere Werte hier
}
}
// void readEncoder() {
// aState = digitalRead(ENCODER_A);
// if (aState != aLastState) {
// if (digitalRead(ENCODER_B) != aState) {
// encoderPos++;
// Serial.println(encoderPos);
// } else {
// encoderPos--;
// Serial.println(encoderPos);
// }
// }
// aLastState = aState;
// }
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
encoderPos++; // Clockwise
}
if (dtValue == LOW) {
encoderPos--; // Counterclockwise
}
}
// Get the counter value, disabling interrupts.
// This make sure readEncoder() doesn't change the value
// while we're reading it.
int getCounter() {
int result;
noInterrupts();
result = counter;
interrupts();
return result;
}