|
|
- #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(){
- }
|