Browse Source

Code

First code for creating a screen containing a menu with several options.
master
parent
commit
f170d960f8
1 changed files with 185 additions and 0 deletions
  1. +185
    -0
      DisplayESP32.ino

+ 185
- 0
DisplayESP32.ino View File

@ -0,0 +1,185 @@
#define MAX_OPTIONS 10 //Maximum number of options for each menu
#define MAX_MENUS 10
#define MAX_GRAPH 10
#define __DEBUG__
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans12pt7b.h>
#define DISP_WIDTH 128 // OLED display width
#define DISP_HEIGHT 64 // OLED display height
Adafruit_SSD1306 display(DISP_WIDTH, DISP_HEIGHT, &Wire, -1);
void setDisp(bool fullsetting){
if(fullsetting){
//Adafruit_SSD1306 display(DISP_WIDTH, DISP_HEIGHT, &Wire, -1);
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
Serial.println("No se encuentra la pantalla OLED");
#endif
while (true);
}
}
display.clearDisplay();
// Tamaño del texto
display.setTextSize(2);
// Color del texto
display.setTextColor(SSD1306_WHITE);
// Posición del texto
display.setCursor(0, 16);
// Escribir texto
display.println("Hola");
display.display();
display.setCursor(0, 32);
display.println("mundo!!");
display.display();
}
class Option{
private:
int sizex;
int sizey;
String content;
int pos;
bool fill = false;
bool disp = false;
void (*f)(void);
public:
//Option(){}
void configure(String content, int sizex, int sizey, int pos){
this->sizex = sizex;
this->sizey = sizey;
this->content = content;
this->pos = pos;
this->disp = true;
}
void drawopt(int page, int pos){
if(this->disp){
if(this->pos == pos){
display.fillRect(0, (this->sizey)*(this->pos) - (page*DISP_WIDTH), this->sizex, this->sizey, WHITE);
display.setTextColor(SSD1306_BLACK);
display.setCursor((this->sizex) + 3, (this->sizey) - 3);
display.println(this->content);
display.setTextColor(SSD1306_WHITE);
}
else{
display.drawRect(0, (this->sizey)*(this->pos), this->sizex, this->sizey, WHITE);
display.setCursor((this->sizex) + 3, (this->sizey) - 3 - (DISP_WIDTH*128));
display.println(this->content);
}
}
}
void task(void (*f)(void)){
this->f = f;
}
};
class Menu{
private:
int id;
int sizex;
int sizey;
int options = 0; //This indicates the number of options created
int pos = 0; //This indicates the position of the cursor
int page = 0; //If the menu is too long, this indicates the page that is being displayed
Option opt[MAX_OPTIONS];
public:
void configure(int id, int sizex, int sizey){
this->id = id;
this->sizex = sizex;
this->sizey = sizey;
}
void createOption(String content){
this->opt[this->options].configure(content, this->sizex, this->sizey, this->options++);
}
void function(int optionindex, void (*f)(void)){ //Defines functions for each option
this->opt[optionindex].task(f);
}
void drawMenu(){
int dir;
this->page = pos/3;
for(int i = 0; i < options; i++){
this->opt[i].drawopt(this->page, this->pos);
}
}
int getid(){
int id = this->id;
return id;
}
int getoptions(){
int options = this->options;
return options;
}
void increasePos(){
this->pos++;
}
void decreasePos(){
this->pos--;
}
};
class Screen{
private:
Menu menu[MAX_MENUS];
int ids[MAX_MENUS];
int counter = 0;
int actualScreen;
public:
void createMenu(int id, int sizex, int sizey){
this->menu[counter].configure(id, sizex, sizey);
counter++;
}
void createOption(int idMenu, String content){
int mem = 0;
for(int i = 0; i < counter; i++){
if(this->ids[i] == idMenu)
mem = i;
break;
}
this->menu[mem].createOption(content);
}
void control(){
}
};
void setup(){
}
void loop(){
}

Loading…
Cancel
Save