Versión de Firmware con funciones de RAM incorporadas.
Dependencies: mbed
Fork of VmRecorderV1dot1 by
ScreenManager/Mensaje.cpp@2:e818c80e6d5c, 2015-07-14 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
JuanManuelAmador | 0:3d456b8ce449 | 1 | #include "mbed.h" |
JuanManuelAmador | 0:3d456b8ce449 | 2 | #include "Mensaje.h" |
JuanManuelAmador | 0:3d456b8ce449 | 3 | |
JuanManuelAmador | 0:3d456b8ce449 | 4 | extern ScreenManager SC; |
JuanManuelAmador | 0:3d456b8ce449 | 5 | extern DigitalIn boton5; |
JuanManuelAmador | 0:3d456b8ce449 | 6 | |
JuanManuelAmador | 0:3d456b8ce449 | 7 | Mensaje::Mensaje(char nextScreen[], char newAdvice[]){ |
JuanManuelAmador | 0:3d456b8ce449 | 8 | strcpy(nextScreenID, nextScreen); |
JuanManuelAmador | 0:3d456b8ce449 | 9 | strcpy(advice, newAdvice); |
JuanManuelAmador | 0:3d456b8ce449 | 10 | } |
JuanManuelAmador | 0:3d456b8ce449 | 11 | |
JuanManuelAmador | 0:3d456b8ce449 | 12 | void Mensaje::setNextScreen(char nameScreen[NCARSCREEN]){ |
JuanManuelAmador | 0:3d456b8ce449 | 13 | strcpy(nextScreenID, nameScreen); |
JuanManuelAmador | 0:3d456b8ce449 | 14 | } |
JuanManuelAmador | 0:3d456b8ce449 | 15 | |
JuanManuelAmador | 0:3d456b8ce449 | 16 | void Mensaje::initialize(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 17 | |
JuanManuelAmador | 0:3d456b8ce449 | 18 | // select font to use: |
JuanManuelAmador | 0:3d456b8ce449 | 19 | lcd->XFont = xfont_11; |
JuanManuelAmador | 0:3d456b8ce449 | 20 | |
JuanManuelAmador | 0:3d456b8ce449 | 21 | // Para pintar los elementos del menú primero |
JuanManuelAmador | 0:3d456b8ce449 | 22 | // se calcula la posición del primer elemento y el offset hasta el siguiente elemento (eje vertical) |
JuanManuelAmador | 0:3d456b8ce449 | 23 | int offset = HEIGHT/(nElementos + 1); |
JuanManuelAmador | 0:3d456b8ce449 | 24 | int posy0 = offset - SEMIHEIGHTFONT; |
JuanManuelAmador | 0:3d456b8ce449 | 25 | |
JuanManuelAmador | 0:3d456b8ce449 | 26 | // Se pintan los elementos del menu con dos particularidades: |
JuanManuelAmador | 0:3d456b8ce449 | 27 | // - El elemento seleccionado se pinta "seleccionado" |
JuanManuelAmador | 0:3d456b8ce449 | 28 | // - Los elementos se pintan centrados |
JuanManuelAmador | 0:3d456b8ce449 | 29 | |
JuanManuelAmador | 0:3d456b8ce449 | 30 | for(int i = 0; i < nElementos; i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 31 | posElement[i][2] = widthElement(i, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 32 | posElement[i][0] = (WIDTH - posElement[i][2])/2; |
JuanManuelAmador | 0:3d456b8ce449 | 33 | posElement[i][1] = offset*(i) + posy0;; |
JuanManuelAmador | 0:3d456b8ce449 | 34 | lcd->XString(posElement[i][0], posElement[i][1], list[i]); |
JuanManuelAmador | 0:3d456b8ce449 | 35 | } |
JuanManuelAmador | 0:3d456b8ce449 | 36 | |
JuanManuelAmador | 0:3d456b8ce449 | 37 | // select font to use: |
JuanManuelAmador | 0:3d456b8ce449 | 38 | lcd->XFont = xfont_8; |
JuanManuelAmador | 0:3d456b8ce449 | 39 | |
JuanManuelAmador | 0:3d456b8ce449 | 40 | // Se escribe el consejo en la parte inferior de la pantalla |
JuanManuelAmador | 0:3d456b8ce449 | 41 | lcd->XString(OFFSETX, HEIGHT - 8, advice); |
JuanManuelAmador | 0:3d456b8ce449 | 42 | |
JuanManuelAmador | 0:3d456b8ce449 | 43 | // transmit work screen to physical screen: |
JuanManuelAmador | 0:3d456b8ce449 | 44 | lcd->Flush(); |
JuanManuelAmador | 0:3d456b8ce449 | 45 | } |
JuanManuelAmador | 0:3d456b8ce449 | 46 | |
JuanManuelAmador | 0:3d456b8ce449 | 47 | // El botón 5 envía a la pantalla correspondiente según el elemento seleccionado |
JuanManuelAmador | 0:3d456b8ce449 | 48 | void Mensaje::button5pressed(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 49 | SC.changeScreen(nextScreenID); |
JuanManuelAmador | 0:3d456b8ce449 | 50 | } |
JuanManuelAmador | 0:3d456b8ce449 | 51 | |
JuanManuelAmador | 0:3d456b8ce449 | 52 | // Añade un elemento al menu con el texto especificado en el primer argumento |
JuanManuelAmador | 0:3d456b8ce449 | 53 | // cada elemento nos enviará a la pantalla con el identificador del segundo argumento |
JuanManuelAmador | 0:3d456b8ce449 | 54 | // Devuelve el identificador del elemento añadido |
JuanManuelAmador | 0:3d456b8ce449 | 55 | int Mensaje::addElement(char text[]){ |
JuanManuelAmador | 0:3d456b8ce449 | 56 | strcpy(list[nElementos], text); |
JuanManuelAmador | 0:3d456b8ce449 | 57 | nElementos++; |
JuanManuelAmador | 0:3d456b8ce449 | 58 | return nElementos - 1; |
JuanManuelAmador | 0:3d456b8ce449 | 59 | } |
JuanManuelAmador | 0:3d456b8ce449 | 60 | |
JuanManuelAmador | 0:3d456b8ce449 | 61 | |
JuanManuelAmador | 0:3d456b8ce449 | 62 | // Devuelve el ancho del elemento |
JuanManuelAmador | 0:3d456b8ce449 | 63 | // Para ello lo recorre sumando los pixeles que ocupa cada caracter |
JuanManuelAmador | 0:3d456b8ce449 | 64 | int Mensaje::widthElement(int element, DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 65 | int width = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 66 | for(int i = 0; i < (strlen(list[element])); i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 67 | width += lcd->GetGlyph(list[element][i]).wid + 1; |
JuanManuelAmador | 0:3d456b8ce449 | 68 | } |
JuanManuelAmador | 0:3d456b8ce449 | 69 | return width; |
JuanManuelAmador | 0:3d456b8ce449 | 70 | } |