/*
Autore: Ivan Selva
Data 0430/03/2023
Nome: Progetto: prove di menù
Scopo: Provare a creare un menu
*/
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include "displayshield.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)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int stato = 0;
bool FIRST = true;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // attivo il monitor seriale
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // avvio il display oled
display.display(); // visualizzio
Serial.println("CIAO");
}
void loop() {
// put your main code here, to run repeatedly:
switch(stato) {
case 0:
mainloop();
break;
case 10:
mainmenu1();
break;
case 20:
mainmenu2();
break;
case 30:
mainmenu3();
break;
case 40:
mainmenuexit();
break;
case 100:
sub1();
break;
}
}
void setStato(int s){
stato = s;
FIRST = true;
int stato = 0;
display.clearDisplay();
display.display();
delay(300);
}
void mainloop() {
if (FIRST) {
display.print("running");
display.setCursor(0,1);
display.print("S:menu");
display.display();
Serial.println("running");
FIRST = false;
}
int key = readKeys();
switch (key) {
case KY_SEL:
setStato(10);
break;
}
}
void mainmenu1() {
if (FIRST) {
display.print("menu 1");
display.setCursor(0,1);
display.print("DN:next R:sub1");
display.display();
Serial.println("menu 1");
FIRST = false;
}
int key = readKeys();
switch (key) {
case KY_DOWN:
setStato(20);
break;
case KY_RIGHT:
setStato(100);
break;
}
}
void mainmenu2() {
if (FIRST) {
display.print("menu 2");
display.setCursor(0,1);
display.print("DN:next");
display.display();
Serial.println("menu 2");
FIRST = false;
}
int key = readKeys();
switch (key){
case KY_DOWN:
setStato(30);
break;
}
}
void mainmenu3() {
if (FIRST) {
display.print("menu 3");
display.setCursor(0,1);
display.print("DN:next");
display.display();
Serial.println("menu 3");
FIRST = false;
}
int key = readKeys();
switch (key){
case KY_DOWN:
setStato(40);
break;
}
}
void mainmenuexit() {
if (FIRST) {
display.print("exit menu?");
display.setCursor(0,1);
display.print("DN:next S:back");
display.display();
Serial.println("menu exit");
FIRST = false;
}
int key = readKeys();
switch (key){
case KY_DOWN:
setStato(10);
break;
case KY_SEL:
setStato(0);
break;
}
}
int x = 0;
void sub1() {
if (FIRST) {
display.print("sub1 x=");
display.setCursor(7,0);
display.print(x);
display.setCursor(0,1);
display.print("L:back U/D:chg");
display.display();
Serial.println("menu sub1");
FIRST = false;
}
int key = readKeys();
switch (key){
case KY_LEFT:
setStato(10);
break;
case KY_UP:
x++;
display.setCursor(7,0);
display.print(" ");
display.setCursor(7,0);
display.print(x);
display.display();
delay(100);
break;
case KY_DOWN:
x--;
display.setCursor(7,0);
display.print(" ");
display.setCursor(7,0);
display.print(x);
display.display();
delay(100);
break;
}
}