|  | @ -1,16 +1,15 @@ | 
														
													
														
															
																|  |  | #define MAX_OPTIONS 10      //Maximum number of options for each menu |  |  |  | 
														
													
														
															
																|  |  | #define MAX_MENUS 3 |  |  |  | 
														
													
														
															
																|  |  | #define MAX_GRAPH 3 |  |  |  | 
														
													
														
															
																|  |  | #define __DEBUG__ |  |  |  | 
														
													
														
															
																|  |  | #include <Arduino.h> |  |  |  | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | #include <SPI.h> |  |  | #include <SPI.h> | 
														
													
														
															
																|  |  | #include <Wire.h> |  |  | #include <Wire.h> | 
														
													
														
															
																|  |  | #include <Adafruit_GFX.h> |  |  | #include <Adafruit_GFX.h> | 
														
													
														
															
																|  |  | #include <Adafruit_SSD1306.h> |  |  | #include <Adafruit_SSD1306.h> | 
														
													
														
															
																|  |  |  |  |  | #define __DEBUG__ | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | #define DISP_WIDTH 128 // OLED display width |  |  |  | 
														
													
														
															
																|  |  | #define DISP_HEIGHT 64 // OLED display height |  |  |  | 
														
													
														
															
																|  |  |  |  |  | #define MAX_OPTIONS 10      //Maximum number of options for each menu | 
														
													
														
															
																|  |  |  |  |  | #define MAX_MENUS 3 | 
														
													
														
															
																|  |  |  |  |  | #define MAX_GRAPH 3 | 
														
													
														
															
																|  |  |  |  |  | #define DISP_WIDTH 128      // OLED display width | 
														
													
														
															
																|  |  |  |  |  | #define DISP_HEIGHT 64      // OLED display height | 
														
													
														
															
																|  |  |  |  |  | #define REFRESH 10          //Refresh time in ms | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | Adafruit_SSD1306 display(DISP_WIDTH, DISP_HEIGHT, &Wire, -1); |  |  | Adafruit_SSD1306 display(DISP_WIDTH, DISP_HEIGHT, &Wire, -1); | 
														
													
														
															
																|  |  | int i = 0; |  |  | int i = 0; | 
														
													
												
													
														
															
																|  | @ -83,7 +82,7 @@ class Menu{    //ContentTypeMenu true, it is a menu | 
														
													
														
															
																|  |  | int optPPage; |  |  | int optPPage; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | int previousScreen = 0; |  |  | int previousScreen = 0; | 
														
													
														
															
																|  |  | int previousContentType = true; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | int previousContentType = 0; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | public: |  |  | public: | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
												
													
														
															
																|  | @ -116,6 +115,14 @@ class Menu{    //ContentTypeMenu true, it is a menu | 
														
													
														
															
																|  |  | display.display(); |  |  | display.display(); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | int extractPos(){ | 
														
													
														
															
																|  |  |  |  |  | return(this->pos); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | int extractOptNumber(){ | 
														
													
														
															
																|  |  |  |  |  | return(this->options); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void increasePos(){ |  |  | void increasePos(){ | 
														
													
														
															
																|  |  | this->pos++; |  |  | this->pos++; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
												
													
														
															
																|  | @ -481,11 +488,13 @@ class Screen{ | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void increasePos(){ |  |  | void increasePos(){ | 
														
													
														
															
																|  |  | this->menu[this->currentScreen].increasePos(); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if(this->menu[this->currentScreen].extractPos() < this->menu[this->currentScreen].extractOptNumber() - 1) | 
														
													
														
															
																|  |  |  |  |  | this->menu[this->currentScreen].increasePos(); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void decreasePos(){ |  |  | void decreasePos(){ | 
														
													
														
															
																|  |  | this->menu[this->currentScreen].decreasePos(); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if(this->menu[this->currentScreen].extractPos() > 0) | 
														
													
														
															
																|  |  |  |  |  | this->menu[this->currentScreen].decreasePos(); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void goTo(){ |  |  | void goTo(){ | 
														
													
												
													
														
															
																|  | @ -525,19 +534,120 @@ class Screen{ | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void plusAction(){ |  |  | void plusAction(){ | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if(contentType == 0){ | 
														
													
														
															
																|  |  |  |  |  | increasePos(); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void minusAction(){ |  |  | void minusAction(){ | 
														
													
														
															
																|  |  |  |  |  | if(contentType == 0){ | 
														
													
														
															
																|  |  |  |  |  | decreasePos(); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | }; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | class Keyboard{ | 
														
													
														
															
																|  |  |  |  |  | private: | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | byte goTo; | 
														
													
														
															
																|  |  |  |  |  | byte goBack; | 
														
													
														
															
																|  |  |  |  |  | byte plus; | 
														
													
														
															
																|  |  |  |  |  | byte minus; | 
														
													
														
															
																|  |  |  |  |  | byte debounceTime; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | Screen * screen; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | public: | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | Keyboard(byte goTo, byte goBack, byte plus, byte minus, byte debounceTime, Screen * screen){ | 
														
													
														
															
																|  |  |  |  |  | this->goTo = goTo; | 
														
													
														
															
																|  |  |  |  |  | this->goBack = goBack; | 
														
													
														
															
																|  |  |  |  |  | this->plus = plus; | 
														
													
														
															
																|  |  |  |  |  | this->minus = minus; | 
														
													
														
															
																|  |  |  |  |  | this->debounceTime = debounceTime; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | this->screen = screen; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | pinMode(goTo, INPUT_PULLUP); | 
														
													
														
															
																|  |  |  |  |  | pinMode(goBack, INPUT_PULLUP); | 
														
													
														
															
																|  |  |  |  |  | pinMode(plus, INPUT_PULLUP); | 
														
													
														
															
																|  |  |  |  |  | pinMode(minus, INPUT_PULLUP); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void checkGoTo(){ | 
														
													
														
															
																|  |  |  |  |  | static char cont; | 
														
													
														
															
																|  |  |  |  |  | if(digitalRead(this->goTo) == LOW) | 
														
													
														
															
																|  |  |  |  |  | cont++; | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | if(cont == debounceTime/REFRESH){ | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | this->screen->goTo(); | 
														
													
														
															
																|  |  |  |  |  | while(digitalRead(this->goTo) == LOW){ | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void checkGoBack(){ | 
														
													
														
															
																|  |  |  |  |  | static char cont; | 
														
													
														
															
																|  |  |  |  |  | if(digitalRead(this->goBack) == LOW){ | 
														
													
														
															
																|  |  |  |  |  | cont++; | 
														
													
														
															
																|  |  |  |  |  | Serial.println("Ayudaaaaa"); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | if(cont == debounceTime/REFRESH){ | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | this->screen->goBack(); | 
														
													
														
															
																|  |  |  |  |  | Serial.println("Ayudaaaaant"); | 
														
													
														
															
																|  |  |  |  |  | while(digitalRead(this->goBack) == LOW){ | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void checkPlus(){ | 
														
													
														
															
																|  |  |  |  |  | static char cont; | 
														
													
														
															
																|  |  |  |  |  | if(digitalRead(this->plus) == LOW) | 
														
													
														
															
																|  |  |  |  |  | cont++; | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | if(cont == debounceTime/REFRESH){ | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | this->screen->plusAction(); | 
														
													
														
															
																|  |  |  |  |  | while(digitalRead(this->plus) == LOW){ | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void checkMinus(){ | 
														
													
														
															
																|  |  |  |  |  | static char cont; | 
														
													
														
															
																|  |  |  |  |  | if(digitalRead(this->minus) == LOW) | 
														
													
														
															
																|  |  |  |  |  | cont++; | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | if(cont == debounceTime/REFRESH){ | 
														
													
														
															
																|  |  |  |  |  | cont = 0; | 
														
													
														
															
																|  |  |  |  |  | this->screen->minusAction(); | 
														
													
														
															
																|  |  |  |  |  | while(digitalRead(this->minus) == LOW){ | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void control(){ | 
														
													
														
															
																|  |  |  |  |  | this->checkGoTo(); | 
														
													
														
															
																|  |  |  |  |  | this->checkGoBack(); | 
														
													
														
															
																|  |  |  |  |  | this->checkPlus(); | 
														
													
														
															
																|  |  |  |  |  | this->checkMinus(); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  | }; |  |  | }; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | Screen screen; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | Screen screen, * disp = &screen; | 
														
													
														
															
																|  |  |  |  |  | Keyboard keyboard(14, 4, 12, 13, 40, disp); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void setup(){ |  |  | void setup(){ | 
														
													
														
															
																|  |  | screen.configure(true); |  |  | screen.configure(true); | 
														
													
														
															
																|  |  |  |  |  | Serial.println("Screen created"); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | screen.createMenu(128, 13);             //Menu 0 |  |  | screen.createMenu(128, 13);             //Menu 0 | 
														
													
														
															
																|  |  | screen.createMenu(128, 13);             //Menu 1 |  |  | screen.createMenu(128, 13);             //Menu 1 | 
														
													
												
													
														
															
																|  | @ -571,7 +681,7 @@ void setup(){ | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void loop(){ |  |  | void loop(){ | 
														
													
														
															
																|  |  | screen.control();            //Controls the screen and redraws if needed |  |  | screen.control();            //Controls the screen and redraws if needed | 
														
													
														
															
																|  |  | delay(10); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | keyboard.control(); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | if(i <= 100){ |  |  | if(i <= 100){ | 
														
													
														
															
																|  |  | screen.graphAssignValue(1, i);    //Assigning a demo value to Graph 1 |  |  | screen.graphAssignValue(1, i);    //Assigning a demo value to Graph 1 | 
														
													
												
													
														
															
																|  | @ -580,4 +690,6 @@ void loop(){ | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | else |  |  | else | 
														
													
														
															
																|  |  | i = 0; |  |  | i = 0; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | delay(REFRESH);                   //Refresh time (approx) | 
														
													
														
															
																|  |  | } |  |  | } |