#include <Adafruit_SSD1306.h>
#include <Encoder.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
Encoder myEncoder(2, 3); // Encoder pins
const int MENU_COUNT = 2;
String menu[MENU_COUNT] = {"Extrusion", "Cleaning"};
int menuIndex = 0;
bool extrusionSelected = false;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // OLED Address
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.println("MENU:");
display.display();
updateDisplay();
}
void loop() {
if (!extrusionSelected) {
int menuSelection = readEncoder();
if (menuSelection != menuIndex) {
menuIndex = menuSelection;
updateDisplay();
}
if (digitalRead(5) == HIGH) { // Button press
if (menuIndex == 0) {
// Code for Extrusion menu item selected
display.clearDisplay();
display.setCursor((display.width() - 29) / 2, 0); // Center align "WARNING"
display.println("WARNING:");
display.setCursor(0, 10); // Set cursor to next line
display.println("Make sure the barrel is filled");
display.println("before starting process");
display.display();
extrusionSelected = true;
} else if (menuIndex == 1) {
// Code for Cleaning menu item selected
// ...
}
}
} else {
// Code for Extrusion menu item selected
// ...
// Wait for user input to start or cancel
}
}
int readEncoder() {
static int previousMenuSelection = 0;
int menuSelection = previousMenuSelection + myEncoder.read() / 4;
menuSelection = constrain(menuSelection, 0, MENU_COUNT - 1);
previousMenuSelection = menuSelection;
return menuSelection;
}
void updateDisplay() {
display.clearDisplay();
display.setCursor((display.width() - 6*7) / 2, 0); // Center align "MENU"
display.println("MENU:");
for (int i = 0; i < MENU_COUNT; i++) {
display.setCursor(0, i == 0 ? display.getCursorY() + 8 : display.getCursorY()); // Move cursor to next line
display.print(i == menuIndex ? "> " : " ");
display.print(menu[i]);
display.println();
}
display.display();
}