Versión de Firmware con funciones de RAM incorporadas.

Dependencies:   mbed

Fork of VmRecorderV1dot1 by virtualmech

Committer:
JuanManuelAmador
Date:
Tue Jul 14 08:34:11 2015 +0000
Revision:
2:e818c80e6d5c
Parent:
0:3d456b8ce449
Funciones de memoria RAM introducidas.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanManuelAmador 0:3d456b8ce449 1 #include "mbed.h"
JuanManuelAmador 0:3d456b8ce449 2 #include "Menu.h"
JuanManuelAmador 0:3d456b8ce449 3
JuanManuelAmador 0:3d456b8ce449 4 extern ScreenManager SC;
JuanManuelAmador 0:3d456b8ce449 5
JuanManuelAmador 0:3d456b8ce449 6 extern DigitalIn boton1;
JuanManuelAmador 0:3d456b8ce449 7 extern DigitalIn boton4;
JuanManuelAmador 0:3d456b8ce449 8 extern DigitalIn boton5;
JuanManuelAmador 0:3d456b8ce449 9
JuanManuelAmador 0:3d456b8ce449 10 void Menu::initialize(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 11 // Se inicializa la selección
JuanManuelAmador 0:3d456b8ce449 12 setSelect(0);
JuanManuelAmador 0:3d456b8ce449 13
JuanManuelAmador 0:3d456b8ce449 14 // select font to use:
JuanManuelAmador 0:3d456b8ce449 15 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 16
JuanManuelAmador 0:3d456b8ce449 17 // Para pintar los elementos del menú primero
JuanManuelAmador 0:3d456b8ce449 18 // se calcula la posición del primer elemento y el offset hasta el siguiente elemento (eje vertical)
JuanManuelAmador 0:3d456b8ce449 19 int offset = HEIGHT/(nElementos + 1);
JuanManuelAmador 0:3d456b8ce449 20 int posy0 = offset - SEMIHEIGHTFONT;
JuanManuelAmador 0:3d456b8ce449 21
JuanManuelAmador 0:3d456b8ce449 22 // Se pintan los elementos del menu con dos particularidades:
JuanManuelAmador 0:3d456b8ce449 23 // - El elemento seleccionado se pinta "seleccionado"
JuanManuelAmador 0:3d456b8ce449 24 // - Los elementos se pintan centrados
JuanManuelAmador 0:3d456b8ce449 25
JuanManuelAmador 0:3d456b8ce449 26 for(int i = 0; i < nElementos; i++){
JuanManuelAmador 0:3d456b8ce449 27 posElement[i][2] = widthElement(i, lcd);
JuanManuelAmador 0:3d456b8ce449 28 posElement[i][0] = (WIDTH - posElement[i][2])/2;
JuanManuelAmador 0:3d456b8ce449 29 posElement[i][1] = offset*(i) + posy0;;
JuanManuelAmador 0:3d456b8ce449 30 lcd->XString(posElement[i][0], posElement[i][1], list[i]);
JuanManuelAmador 0:3d456b8ce449 31 // Si el elemento está seleccionado se marca con la forma de selección correspondiente
JuanManuelAmador 0:3d456b8ce449 32 if(i == getSelect()){
JuanManuelAmador 0:3d456b8ce449 33 drawSelection(posElement[i][0]-2, posElement[i][1]-1, posElement[i][2]+2, HEIGHTCARACTER+2, lcd);
JuanManuelAmador 0:3d456b8ce449 34 }
JuanManuelAmador 0:3d456b8ce449 35 }
JuanManuelAmador 0:3d456b8ce449 36
JuanManuelAmador 0:3d456b8ce449 37 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 38 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 39 }
JuanManuelAmador 0:3d456b8ce449 40
JuanManuelAmador 0:3d456b8ce449 41 // El botón 1 sube la selección al elemento superior al actual
JuanManuelAmador 0:3d456b8ce449 42 void Menu::button1pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 43 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 44 if((getSelect()-1) >= 0){
JuanManuelAmador 0:3d456b8ce449 45 setSelect(getSelect()-1);
JuanManuelAmador 0:3d456b8ce449 46 drawDeselection(posElement[getLastSelect()][0]-2, posElement[getLastSelect()][1]-1, posElement[getLastSelect()][2]+2, HEIGHTCARACTER+2, lcd);
JuanManuelAmador 0:3d456b8ce449 47 drawSelection(posElement[getSelect()][0]-2, posElement[getSelect()][1]-1, posElement[getSelect()][2]+2, HEIGHTCARACTER+2, lcd);
JuanManuelAmador 0:3d456b8ce449 48 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 49 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 50 }
JuanManuelAmador 0:3d456b8ce449 51 }
JuanManuelAmador 0:3d456b8ce449 52
JuanManuelAmador 0:3d456b8ce449 53 // El botón 4 baja la selección al elemento superior al actual
JuanManuelAmador 0:3d456b8ce449 54 void Menu::button4pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 55 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 56 if((getSelect()+1) <= (nElementos - 1)){
JuanManuelAmador 0:3d456b8ce449 57 setSelect(getSelect()+1);
JuanManuelAmador 0:3d456b8ce449 58 drawDeselection(posElement[getLastSelect()][0]-2, posElement[getLastSelect()][1]-1, posElement[getLastSelect()][2]+2, HEIGHTCARACTER+2, lcd);
JuanManuelAmador 0:3d456b8ce449 59 drawSelection(posElement[getSelect()][0]-2, posElement[getSelect()][1]-1, posElement[getSelect()][2]+2, HEIGHTCARACTER+2, lcd);
JuanManuelAmador 0:3d456b8ce449 60 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 61 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 62 }
JuanManuelAmador 0:3d456b8ce449 63 }
JuanManuelAmador 0:3d456b8ce449 64
JuanManuelAmador 0:3d456b8ce449 65 // El botón 5 envía a la pantalla correspondiente según el elemento seleccionado
JuanManuelAmador 0:3d456b8ce449 66 void Menu::button5pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 67 SC.changeScreen(nextScreenID[getSelect()]);
JuanManuelAmador 0:3d456b8ce449 68 }
JuanManuelAmador 0:3d456b8ce449 69
JuanManuelAmador 0:3d456b8ce449 70 // Añade un elemento al menu con el texto especificado en el primer argumento
JuanManuelAmador 0:3d456b8ce449 71 // cada elemento nos enviará a la pantalla con el identificador del segundo argumento
JuanManuelAmador 0:3d456b8ce449 72 // Devuelve el identificador del elemento añadido
JuanManuelAmador 0:3d456b8ce449 73 int Menu::addElement(char text[], char nameNextScreen[NCARSCREEN]){
JuanManuelAmador 0:3d456b8ce449 74 strcpy(list[nElementos], text);
JuanManuelAmador 0:3d456b8ce449 75 strcpy(nextScreenID[nElementos], nameNextScreen);
JuanManuelAmador 0:3d456b8ce449 76 nElementos++;
JuanManuelAmador 0:3d456b8ce449 77 return nElementos - 1;
JuanManuelAmador 0:3d456b8ce449 78 }
JuanManuelAmador 0:3d456b8ce449 79
JuanManuelAmador 0:3d456b8ce449 80
JuanManuelAmador 0:3d456b8ce449 81 // Devuelve el ancho del elemento
JuanManuelAmador 0:3d456b8ce449 82 // Para ello lo recorre sumando los pixeles que ocupa cada caracter
JuanManuelAmador 0:3d456b8ce449 83 int Menu::widthElement(int element, DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 84 int width = 0;
JuanManuelAmador 0:3d456b8ce449 85 for(int i = 0; i < (strlen(list[element])); i++){
JuanManuelAmador 0:3d456b8ce449 86 width += lcd->GetGlyph(list[element][i]).wid + 1;
JuanManuelAmador 0:3d456b8ce449 87 }
JuanManuelAmador 0:3d456b8ce449 88 return width;
JuanManuelAmador 0:3d456b8ce449 89 }
JuanManuelAmador 0:3d456b8ce449 90