Paso 2: Modificar el programa
El programa adjuntado se escribe con las bibliotecas de Arduino básicas de Wire.h y LiquidCrystal.h así que debe ser nada mas para descargar además de este programa.
Una de las cosas que vas a tener que modificar es la matriz de nombres de elemento de menú en línea 27 y el contenido de programación para cada submenú. He empezado con 10 posibles menús en el programa. Si quieres 10 o menos sólo modificar línea 27 para crear su estructura de menú principal.
String menuItems[] = {"ITEM 1", "ITEM 2", "ITEM 3", "ITEM 4", "ITEM 5", "ITEM 6"};
Por ejemplo, podría hacer menos artículos:
String menuItems[] = {"DISTANCE", "TIME", "REPEAT", "DIRECTION", "START", "ABOUT"};
O usted puede agregar más (hasta 10 por supuesto):
String menuItems[] = {"DISTANCE", "DELAY", "RANDOMIZE", "TIME", "REPEAT", "DIRECTION", "START", "ABOUT"};
Más allá de 10 artículos tienes que añadir "casos" adicionales a la sección "switch/case" a partir de en línea 167. También tienes que añadir [] adicional menuItemX (donde X es el 11, 12, 13, etc.) anular funciones en la parte inferior del programa.
Una vez creada la estructura de menú desea es el momento de crear el contenido para cada uno de los sub-menús. La primera función void menuItem comienza en línea 275. Puse en algún código por defecto para imprimir "Sub menú X" para que cada elemento de menú, así como un código para esperar a presionar un botón de retroceso. A continuación como un ejemplo de lo que podría hacer en el submenú. Este es el submenú que estoy usando para modificar y almacenar la variable "savedDistance". El y botones se utilizan para seleccionar la distancia y cuando se presiona la parte posterior vuelca hacia el menú principal.
void menuItem1() { // Function executes when you select the 1st item from main menu int activeButton = 0; lcd.clear(); lcd.setCursor(0, 1); drawInstructions(); lcd.setCursor(0, 0); lcd.print("DISTANCE: "); lcd.print(savedDistance); lcd.print(" in"); while (activeButton == 0) { int button; readKey = analogRead(0); if (readKey < 790) { delay(100); readKey = analogRead(0); } button = evaluateButton(readKey); switch (button) { case 2: button = 0; savedDistance = savedDistance + 1; savedDistance = constrain(savedDistance,0,36); lcd.setCursor(10,0); lcd.print(" "); lcd.setCursor(10,0); lcd.print(savedDistance); lcd.print(" in"); break; case 3: button = 0; savedDistance = savedDistance - 1; savedDistance = constrain(savedDistance,0,36); lcd.setCursor(10,0); lcd.print(" "); lcd.setCursor(10,0); lcd.print(savedDistance); lcd.print(" in"); break; case 4: // This case will execute if the "back" button is pressed button = 0; lcd.clear(); lcd.setCursor(2,0); lcd.print("-- VALUES --"); lcd.setCursor(2,1); lcd.print("-- STORED --"); delay(1500); activeButton = 1; break; } } }
Esta función genera el menú de distancia que se muestra en la foto de arriba.