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