#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Arduino.h>
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);
#define CLK 2
#define DIO 3
const int PinA = 2; //PinA = CLK pin
const int PinB = 3; //PinB = DT pin
const int PinSW = 6; //PinSW = switch pin
int lastCount = 0;
// Updated by the ISR
volatile int count = 0;
unsigned long previoustime;
//int LED_BUILTIN = 13;
unsigned long lastDebounceTime = 0;
unsigned long debounceTime = 50; // Zeit in Millisekunden
int lastEncoderValue = 0;
byte value, valueOld;
int encoderValue = 0;
int valA;
int valB;
int valC;
const int ButtonPin = 9;
bool ButtonStatus = LOW;
byte clk;
byte menuCount = 1;
byte UmenuCount = 1;
byte dir = 0;
bool runState = false;
bool Untermenu1 = false;
bool Untermenu2 = false;
bool Untermenu3 = false;
bool Hauptmenu1 = true;
bool Hauptmenu2 = false;
bool Hauptmenu3 = false;
bool timerStarted = false;
bool Back = false;
unsigned long startTime; //Startzeit des timers
unsigned long Time;
void setup() {
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(ButtonPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PinA, INPUT);
pinMode(PinB, INPUT);
pinMode(8,OUTPUT);
//attachInterrupt(digitalPinToInterrupt(PinA), isr, CHANGE);
Serial.begin(9600);
valueOld = digitalRead(PinA);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.display();
display.clearDisplay();
//attachInterrupt(0, doEncoder, CHANGE); // encoder pin on interrupt 0 - pin 2
}
void loop() {
clk = digitalRead(3);
ledControl();
// if (Hauptmenu1 == true || Hauptmenu2 == true || Hauptmenu3 == true ) {
// menuCheck();
// }
// if (Untermenu1 == true || Untermenu2 == true || Untermenu3 == true) {
// UmenuCheck ();
// }
// ButtonEinlesen();
staticMenu();
//isr();
//doEncoder();
EncoderZaehler ();
display.display();
display.clearDisplay();
delay(0);
Serial.print("PinA: ");
Serial.println(digitalRead(PinA));
Serial.print("PinB: ");
Serial.println(digitalRead(PinB));
Serial.print ("encoderValue: ");
Serial.println (encoderValue);
}
void ButtonEinlesen ()
{
digitalWrite(8,HIGH);
ButtonStatus = digitalRead(ButtonPin);
delay(50);
digitalWrite(8,LOW);
}
void staticMenu() {
display.setTextSize(1);
display.setTextColor(WHITE);
int Startbit1 = 1;
//wenn das aktiv ist, wird der Bildschirm die ganze Zeit über mit dem Bild überschrieben
// if (Startbit1 == 1 && Untermenu1 == false) {
// Startbit1 = 0;
// display.setCursor(10, 0); display.println("> Quelle ");
// display.setCursor(10, 10); display.println("Ausgabe ");
// display.setCursor(10, 20); display.println("Klingelton ");
// display.setCursor(100, 20); display.println(valA);
// }
if (menuCount == 1 && ButtonStatus == LOW && Hauptmenu1 == true || Back == true ) {
display.setCursor(10, 0); display.println("> Quelle ");
display.setCursor(10, 10); display.println("Ausgabe ");
display.setCursor(10, 20); display.println("Klingelton ");
Back = false;
}
//Aktivierungsbedingung Untermenü 1
else if (ButtonStatus == HIGH && menuCount == 1) {
Hauptmenu1 = false;
Untermenu1 = true;
Untermenu2 = false;
Untermenu3 = false;
UmenuCount = 1;
}
//Visualisierung Hauptmenü 1
if (Hauptmenu1 == false && Untermenu1 == true && UmenuCount == 1) {
display.setCursor(10, 0); display.println("> Eingang ");
display.setCursor(10, 10); display.println("Audio ");
display.setCursor(10, 20); display.println("Anlernen ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = true;
Untermenu2 = false;
Untermenu3 = false;
if(ButtonStatus == HIGH) {
digitalWrite(8,HIGH);}
else if (ButtonStatus == LOW) {
//delay(2000);
digitalWrite(8,LOW);
}
}
else if (Hauptmenu1 == false && Untermenu1 == true && UmenuCount == 2) {
display.setCursor(10, 0); display.println("Eingang ");
display.setCursor(10, 10); display.println("> Audio ");
display.setCursor(10, 20); display.println("Anlernen ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = true;
Untermenu2 = false;
Untermenu3 = false;
}
else if (Hauptmenu1 == false && Untermenu1 == true && UmenuCount == 3) {
display.setCursor(10, 0); display.println("Eingang ");
display.setCursor(10, 10); display.println("Audio ");
display.setCursor(10, 20); display.println("> Anlernen ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = true;
Untermenu2 = false;
Untermenu3 = false;
}
//Aktivierungsbedingung Untermenü 2
else if (ButtonStatus == HIGH && menuCount == 2) {
Hauptmenu1 = false;
Untermenu1 = false;
Untermenu2 = true;
Untermenu3 = false;
UmenuCount = 1;
}
//Visualisiierung Untermenü 2
else if (Hauptmenu1 == false && Untermenu2 == true && UmenuCount == 1) {
display.setCursor(10, 0); display.println("> Ausgang ");
display.setCursor(10, 10); display.println("Klingelton ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = false;
Untermenu2 = true;
Untermenu3 = false;
}
else if (Hauptmenu1 == false && Untermenu2 == true && UmenuCount == 2) {
display.setCursor(10, 0); display.println("Ausgang ");
display.setCursor(10, 10); display.println("> Klingelton ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = false;
Untermenu2 = true;
Untermenu3 = false;
}
//Aktivierungsbedingung Untermenü 3
else if (ButtonStatus == HIGH && menuCount == 3) {
Hauptmenu1 = false;
Untermenu1 = false;
Untermenu2 = false;
Untermenu3 = true;
UmenuCount = 1;
}
//Visualisiierung Untermenü 3
else if (Hauptmenu1 == false && Untermenu3 == true && UmenuCount == 1) {
display.setCursor(10, 0); display.println("> Klingelton: ");
display.setCursor(10, 10); display.println("Lautstaerke: ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = false;
Untermenu2 = false;
Untermenu3 = true;
}
else if (Hauptmenu1 == false && Untermenu3 == true && UmenuCount == 2) {
display.setCursor(10, 0); display.println("Klingelton: ");
display.setCursor(10, 10); display.println("> Lautstaerke: ");
display.setCursor(100, 20); display.println(valA);
Untermenu1 = false;
Untermenu2 = false;
Untermenu3 = true;
// if(ButtonStatus == HIGH) {
// digitalWrite(8,HIGH);
// delay(200);
// digitalWrite(8,LOW);
// }
}
//Aktivierungsbedingung für Zurück Button
else if (ButtonStatus == HIGH && Untermenu1 == true || Untermenu2 == true || Untermenu3 == true ) {
if (ButtonStatus == HIGH && !timerStarted) {
startTime = millis();
timerStarted = true;
}
else if (millis() - startTime >= 2000) {
display.setCursor(10, 0); display.println("> Quelle ");
display.setCursor(10, 10); display.println("Ausgabe ");
display.setCursor(10, 20); display.println("Klingelton ");
Untermenu1 = false;
Untermenu2 = false;
Untermenu3 = false;
Back = true;
Hauptmenu1 = true;
menuCount = 1;
UmenuCount = 1;
}
}
//Visualisierung Hauptmemü 2
else if (menuCount == 2 && ButtonStatus == LOW && Untermenu1 == false) {
display.setCursor(10, 0); display.println("Quelle");
display.setCursor(60, 0); display.println(" ");
display.setCursor(10, 10); display.println("> Ausgabe");
display.setCursor(60, 10); display.println(" ");
display.setCursor(10, 20); display.println("Klingelton");
display.setCursor(60, 20); display.println(" ");
display.setCursor(100, 20); display.println(valA);
}
//Visualisierung Hauptmenü 3
else if (menuCount == 3 && ButtonStatus == LOW && Untermenu1 == false) {
display.setCursor(10, 0); display.println("Quelle");
display.setCursor(60, 0); display.println(" ");
display.setCursor(10, 10); display.println("Ausgabe");
display.setCursor(60, 10); display.println(" ");
display.setCursor(10, 20); display.println("> Klingelton");
display.setCursor(60, 20); display.println(" ");
display.setCursor(100, 20); display.println(valA);
}
display.setCursor(10, 40); display.println("Start:");
display.setCursor(45, 40);
display.display();
}
void ledControl() {
if (ButtonStatus == HIGH)
{
digitalWrite(LED_BUILTIN,HIGH);
}
if (ButtonStatus == LOW)
{
digitalWrite(LED_BUILTIN,LOW);
}
if (runState == true) {
analogWrite(6, valA);
analogWrite(9, valB);
analogWrite(10, valC);
}
}
void menuCheck() {
if ( (menuCount < 4)) {
menuCount++;
}
else if (clk == LOW && menuCount == 3 ) {
menuCount = 1;
}
}
void UmenuCheck() {
if (clk == LOW && UmenuCount < 4) {
UmenuCount++;
}
else if (clk == LOW ) {
UmenuCount = 1;
}
}
//Encoder Zähler
void EncoderZaehler () {
value = digitalRead(PinA);
if (value != valueOld) {
if (digitalRead(PinB) != value) {
encoderValue++;
} else {
encoderValue--;
}
valueOld = value;
// Serial.println (encoderValue);
}
}
// if (menuCount == 1) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (menuCount == 2) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (menuCount == 3) {
// if (dir == 1) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (dir == -1) {
// display.setCursor(encoder0Pos * 10, 0);
// }
// }
// display.display();
//void doEncoder() {
// int result = 0;
// unsigned long currentTime = millis();
// if (currentTime - lastDebounceTime > debounceTime) {
// lastDebounceTime = currentTime;
// int newClk = digitalRead(PinB);
// int newDt = digitalRead(PinA);
// if (newClk != lastEncoderValue) {
// digitalWrite(8,HIGH);
// delay(100);
// digitalWrite(8,LOW);
// if (digitalRead(PinA) != newClk) {
// encoder0Pos = encoder0Pos +1;
// result = 1;
// } else {
// result = -1;
// }
// }
// lastEncoderValue = newClk;
// }
// return result;
// if (menuCount == 1) {
// if (dir == 1) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (dir == -1) {
// display.setCursor(encoder0Pos * 10, 0);
// }
// }
// else if (menuCount == 2) {
// if (dir == 1) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (dir == -1) {
// display.setCursor(encoder0Pos * 10, 0);
// }
// }
// else if (menuCount == 3) {
// if (dir == 1) {
// display.setCursor(encoder0Pos * 10, 20);
// }
// else if (dir == -1) {
// display.setCursor(encoder0Pos * 10, 0);
// }
// }
// display.display();
//}