#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define buzzer A2
#define uv 2
#define Clock 9
#define Data 8
#define Push 10
// menu position
int menuPos = 0;
// last menu position
int lastMenuPos = 0;
// how many menues are
int menuMax = 2;
// motor speed
int motorSpeed = 0;
// curing time
int curingTime = 0;
unsigned long currentTime = 0;
unsigned long recordTime = 0;
unsigned long diffTime = 0;
int menuOption = 0; //Use this variable to store "steps"
int currentStateClock; //Store the status of the clock pin (HIGH or LOW)
int lastStateClock; //Store the PREVIOUS status of the clock pin (HIGH or LOW)
String currentDir = ""; //Use this to print text
unsigned long lastButtonPress = 0; //Use this to store if the push button was pressed or not
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
display.clearDisplay();
pinMode(buzzer, OUTPUT);
pinMode(uv, OUTPUT);
digitalWrite(uv, LOW);
pinMode(Clock, INPUT_PULLUP);
pinMode(Data, INPUT_PULLUP);
pinMode(Push, INPUT_PULLUP);
lastStateClock = digitalRead(Clock);
}
bool haveChange = false;
void loop() {
currentStateClock = digitalRead(Clock);
//Serial.println(currentStateClock);
if (currentStateClock != lastStateClock && currentStateClock == LOW ) {
haveChange = true;
if (digitalRead(Data)) {
menuOption ++;
currentDir = "Counterclockwise";
menuOption = setCorrectValue(menuOption);
} else {
// Encoder is rotating CW so increment
menuOption --;
currentDir = "Clockwise";
menuOption = setCorrectValue(menuOption);
}
}
lastStateClock = currentStateClock;
if (haveChange) {
Serial.print(menuOption);
lcd_menu(menuOption);
Serial.print("\n");
haveChange = false;
}
/////////////////////////////
//lcd_menu(menuOption);
/*
if(menuOption == 0){
displayText("Motor spd");
}else if(menuOption == 1){
displayText("Curing spd");
}else if(menuOption == 2){
displayText("Start");
}else{
Serial.println("Err");
}
*/
/////////////////////////////
// Getting time using millis
currentTime = millis();
diffTime = currentTime - recordTime;
if (diffTime >= 10000UL) {
recordTime = currentTime;
//buzzerNotify();
}
if (diffTime >= 5000UL) {
recordTime = currentTime;
//uv_led();
}
}
int setCorrectValue(int value) {
if (value > menuMax) {
value = 0;
}
if (value < 0) {
value = menuMax;
}
return value;
}
void uv_led() {
//Serial.println("UV LED ON");
digitalWrite(uv, LOW);
}
void buzzerNotify() {
int interval = 0;
while (true) {
tone(buzzer, 1000);
delay(500);
noTone(buzzer);
delay(500);
interval++;
if (interval == 5) {
break;
}
}
}
int lcd_menu(int option) {
Serial.println(option);
//Serial.print("\n");
switch (option) {
case 0:
displayText("Motor spd");
//motorMenu();
break;
case 1:
displayText("Curing spd");
//curingMenu();
break;
case 2:
displayText("Start");
//curingMenu();
break;
default:
displayText("Error");
break;
}
}
void motorMenu() {
/*
for(int i = 0; i <= 100; i++){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.invertDisplay(true);
display.clearDisplay();
display.setCursor(1, 5);
display.println("Motor speed settings");
display.display();
display.setTextSize(5);
display.setTextColor(WHITE);
display.invertDisplay(true);
display.setCursor(32, 20);
display.println(i);
display.display();
delay(25);
}
delay(1000);
*/
}
void curingMenu() {
/*
for(int i = 0; i <= 100; i++){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.invertDisplay(true);
display.clearDisplay();
display.setCursor(1, 5);
display.println("Curing time settings");
display.display();
display.setTextSize(5);
display.setTextColor(WHITE);
display.invertDisplay(true);
display.setCursor(32, 20);
display.println(i);
display.display();
delay(25);
}
delay(1000);
*/
}
void displayText(String text) {
display.setTextSize(2);
display.setTextColor(WHITE);
display.invertDisplay(true);
display.clearDisplay();
display.setCursor(5, 24);
display.println(text);
display.display();
//delay(1);
}