#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
//#define SLC 12
const int SLC = 12;
#define LFT 10
#define RGH 11
#define LED 13
bool selectedOption0 = false; // Flag to determine whether to show "Manual Scan" or return to menu
bool selectedOption1 = false; // Flag to determine whether to show "Manual Scan" or return to menu
byte menu();
void intro();
void func1();
void func2();
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//display.dim(true);
display.clearDisplay();
pinMode(SLC, INPUT_PULLUP);
pinMode(LFT, INPUT_PULLUP);
pinMode(RGH, INPUT_PULLUP);
pinMode(LED, OUTPUT);
display.setTextSize(1);
display.setTextColor(WHITE);
intro();
delay(3000);
}
// Introduction display
void intro() {
display.setTextColor(1);
display.setTextSize(2);
display.setCursor(8, 3);
display.setTextWrap(false);
display.print("3d Scanner");
display.setTextColor(1);
display.setTextSize(1);
display.setCursor(18, 25);
display.setTextWrap(false);
display.print("TechDiagBlog.com");
//delay(1000);
display.display();
display.clearDisplay();
}
// Main loop
void loop() {
int buttonState = digitalRead(SLC);
if (selectedOption0) {
func1();
if (buttonState == LOW) {
selectedOption0 = false;
display.clearDisplay();
}
}
else if (selectedOption1) {
func2();
if (buttonState == LOW) {
selectedOption1 = false;
display.clearDisplay();
}
}
else {
switch (menu()) {
case 0: func1(); break;
case 1: func2(); break;
}
}
}
void func1() {
//int buttonState = digitalRead(SLC);
int analogValue = analogRead(A0);
display.clearDisplay();
display.setTextColor(1);
display.setTextSize(1);
display.setCursor(39, 0);
display.setTextWrap(false);
display.print("Manual Scan");
display.setTextColor(1);
display.setTextSize(2);
display.setCursor(21, 13);
display.setTextWrap(false);
display.print(analogValue);
display.display();
selectedOption0 = true; // Set the flag to true to keep the screen fixed
}
void func2() {
//int buttonState = digitalRead(SLC);
int analogValue = analogRead(A0);
display.clearDisplay();
display.setTextColor(1);
display.setTextSize(1);
display.setCursor(39, 0);
display.setTextWrap(false);
display.print("About");
display.setTextColor(1);
display.setTextSize(2);
display.setCursor(21, 13);
display.setTextWrap(false);
display.print("bla bla");
display.display();
selectedOption1 = true; // Set the flag to true to keep the screen fixed
}
byte menu() {
int opt = 0;
const int maxOpt = 2;
bool key = false;
while (digitalRead(SLC)) {
display.setTextColor(1);
display.setTextSize(1);
display.setCursor(13, 0);
display.print("<< System Menu >>");
display.setTextColor(1);
display.setTextSize(2);
if (key && !digitalRead(RGH)) {
display.setTextColor(0);
display.fillRect(1, 10, 126, 21, 0);
opt++;
}
if (key && !digitalRead(LFT)) {
display.setTextColor(0);
display.fillRect(1, 10, 126, 21, 0);
opt--;
}
switch (opt) {
case 0:
display.setTextColor(1);
display.setTextSize(2);
display.setCursor(18, 13);
display.print("Man Scan");
break;
case 1:
display.setTextColor(1);
display.setTextSize(2);
display.setCursor(34, 13);
display.print("About");
break;
case maxOpt:
opt = 0;
break;
case -1:
opt = maxOpt - 1;
break;
}
key = true;
if (!digitalRead(LFT) || !digitalRead(RGH)) key = false;
delay(90);
display.display();
}
return opt;
}