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 "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 }