|
|
- class Screen{
- private:
-
- Menu menu[MAX_MENUS]; //Array of menus to use
- Graph graph[MAX_GRAPHS]; //Array of graphs to use
- Modifier modifier[MAX_MODIFIERS]; //Array of modifiers to use
-
- int counterM = 0; //Number of menus created
- int counterG = 0; //Number of graphs created
- int counterMod = 0; //Number of modifiers created
- bool redraw = true; //Redraw interface for when there is a change of screen
- int currentScreen = 0;
- int contentType = 0;
-
- public:
-
-
- void configure(bool fullsetting, char address){ //This method allows the configuration of the display when the parameter is true. Otherwise only prints a greeting message.
- if(fullsetting){
- //Adafruit_SSD1306 display(DISP_WIDTH, DISP_HEIGHT, &Wire, -1);
- Serial.begin(115200);
- if (!display.begin(SSD1306_SWITCHCAPVCC, address)) {
- #ifdef __DEBUG__
- Serial.println("Display not found!");
- #endif
- while (true);
- }
- }
- display.clearDisplay();
-
- // Text size
- display.setTextSize(2);
- // Text color
- display.setTextColor(SSD1306_WHITE);
- // Text position
-
- display.setCursor(25, 20);
- display.println("Welcome");
-
-
- display.setTextSize(1);
-
- display.display();
- delay(5000);
- }
-
- void createMenu(int sizex, int sizey){ //This method is used for the creation of a menu
- this->menu[counterM].configure(sizex, sizey);
- this->counterM++;
- }
-
- void createOption(int menuIndex, String content, int destinationType, int destinationIndex){ //this method should be used for creating an option in a menu
- this->menu[menuIndex].createOption(content, destinationType, destinationIndex);
- }
-
- void createVGraph(String title, double xpos, double ypos, double width, double height,
- double yminimum, double ymaximum, double yStepSize, int digit){ //this method calls the configure() of graph for a vertical graph
- this->graph[counterG].configure(title, 'a', xpos, ypos, width, height, yminimum, ymaximum, 0, 0, yStepSize, 0, digit, 0);
- this->counterG++;
- }
-
- void createHGraph(String title, double xpos, double ypos, double width, double height,
- double xminimum, double xmaximum, double xStepSize, int digit){ //this method calls the configure() of graph for a horizontal graph
- this->graph[counterG].configure(title, 'b', xpos, ypos, width, height, 0, 0, xminimum, xmaximum, 0, xStepSize, digit, 0);
- counterG++;
- }
-
- void createCGraph(String title, double xpos, double ypos, double width, double height,
- double yminimum, double ymaximum, double xminimum, double yStepSize, double xStepSize, int digit, void * maximum){ //this method calls the configure() of graph for a cartesian chart
- this->graph[counterG].configure(title, 'c', xpos, ypos, width, height, yminimum, ymaximum, xminimum, 0, yStepSize, xStepSize, digit, maximum);
- counterG++;
- }
-
- void createModifier(String title, int *value, int max, int min, int step){ //This method is used for the creation of a menu
- this->modifier[counterMod].configure(title, value, max, min, step);
- this->counterMod++;
- }
-
- /*
- void redrawFlag(){
- this->redraw = true;
- }
- */
-
- //The following method is used for assingning a value to a graph
- //This can be avoided using pointers to the variable to plot in the graph
- void graphAssignValue(int graphIndex, double value){
- this->graph[graphIndex].assignValue(value);
- if(this->currentScreen == graphIndex && this->contentType == 1)
- this->redraw = true;
- }
-
- //This method controls the whole interface, it needs to be called within a loop
- void control(){
- if (redraw){
- if (contentType == 0){
- menu[currentScreen].drawMenu();
- }
- else if (contentType == 1){
- graph[currentScreen].drawGraph();
- }
- else if (contentType == 2){
- modifier[currentScreen].drawModifier();
- }
- this->redraw = false;
- }
- }
-
- //The following two methods allow the change in position of the cursor
- void increasePos(){
- if(this->menu[this->currentScreen].extractPos() < this->menu[this->currentScreen].extractOptNumber() - 1)
- this->menu[this->currentScreen].increasePos();
- }
-
- void decreasePos(){
- if(this->menu[this->currentScreen].extractPos() > 0)
- this->menu[this->currentScreen].decreasePos();
- }
-
- //This method lets the user go into another screen by selecting an option
- void goTo(){
- if(this->contentType == 0){
- int newScreen = this->menu[this->currentScreen].extractDestinationIndex();
- int newContentType = this->menu[this->currentScreen].extractDestinationType();
- if (newContentType == 0){
- this->menu[newScreen].setPreviousScreen(this->currentScreen);
- this->menu[newScreen].setPreviousContentType(this->contentType);
- }
- else if(newContentType == 1){
- this->graph[newScreen].setPreviousScreen(this->currentScreen);
- this->graph[newScreen].setPreviousContentType(this->contentType);
- this->graph[newScreen].reset();
- this->graph[newScreen].redrawFlag();
- }
- else if(newContentType == 2){
- this->modifier[newScreen].setPreviousScreen(this->currentScreen);
- this->modifier[newScreen].setPreviousContentType(this->contentType);
- }
- this->contentType = newContentType;
- this->currentScreen = newScreen;
- this->redraw = true;
- }
- }
-
- void goBack(){
- if(contentType == 0){
- //Gets indexes from previous screen saved in actual screen if it is a menu, and sets them as the current indexes
- this->currentScreen = this->menu[this->currentScreen].getPreviousScreen();
- this->contentType = this->menu[this->currentScreen].getPreviousContentType();
- }
- else if(contentType == 1){
- //Gets indexes from previous screen saved in actual screen if it is a graph, and sets them as the current indexes
- this->currentScreen = this->graph[this->currentScreen].getPreviousScreen();
- this->contentType = this->graph[this->currentScreen].getPreviousContentType();
- }
- else if(contentType == 2){
- this->currentScreen = this->modifier[this->currentScreen].getPreviousScreen();
- this->contentType = this->modifier[this->currentScreen].getPreviousContentType();
- }
- this->redraw = true;
- }
-
- //These methods control the plus and minus button actions
- void plusAction(){
- if(contentType == 0){
- increasePos();
- }
- else if(contentType == 2){
- this->modifier[currentScreen].increaseValue();
- }
- this->redraw = true;
- }
-
- void minusAction(){
- if(contentType == 0){
- decreasePos();
- }
- else if(contentType == 2){
- this->modifier[currentScreen].decreaseValue();
- }
- this->redraw = true;
- }
-
- int getCurrentScreen(){
- return this->currentScreen;
- }
-
- int getContentType(){
- return this->contentType;
- }
-
- };
|