Paso 6: El formato del código generado
En la parte superior del código generado son comentarios mostrando los tres menús que ha diseñado y el pfodApp manda el abierto ellos. Cuando el pfodApp primero conecta siempre enviar {.} y así obtiene el menú principal.
/* ===== pfod Command for Menus Tutorial ====pfodApp msg {.} --> {.<+4>UNO LED and Output Control|A~<+3>Control LED|C~<+6>Output Control} */ /* ===== pfod Command for subMenu_LED ==== pfodApp msg {A} --> {.<+4>Uno LED Control|B~<+4>Led is `0~~Off\On} */ /* ===== pfod Command for subMenu_Output ==== pfodApp msg {C} --> {.<+5>Set D3 Output|D~<+5>D3 is `0~~Low\High}
El método loop() contiene una serie de if else declaraciones que manejar todos los comandos. Los comandos. , A y C volver al menú principal y los submenús respectivamente.
Los otros dos comandos, andD B cambian la configuración del LED y salida D3 respectivamente y volver a una actualización del menú. Esta actualización permite pfodApp mostrar el resultado del comando, es decir el estado de la salida.
void loop() { byte cmd = parser.parse(); // pass it to the parser // parser returns non-zero when a pfod command is fully parsed if (cmd != 0) { // have parsed a complete msg { to } byte* pfodFirstArg = parser.getFirstArg(); // may point to \0 if no arguments in this msg. long pfodLongRtn; // used for parsing long return arguments, if any if ('.' == cmd) { // pfodApp has connected and sent {.} , it is asking for the main menu // send back the menu designed sendMainMenu(); // now handle commands returned from button/sliders } else if('A'==cmd) { // user pressed -- 'Control LED' // in the main Menu of Menus Tutorial // this opens subMenu_LED sendSubMenu_A(); // send back the menu. } else if('C'==cmd) { // user pressed -- 'Output Control' // in the main Menu of Menus Tutorial // this opens subMenu_Output sendSubMenu_C(); // send back the menu. } else if('B'==cmd) { // user moved slider -- 'Led is ' // in subMenu_LED -- opened by button -- 'Control LED' // set output based on slider 0 == LOW, 1 == HIGH parser.parseLong(pfodFirstArg,&pfodLongRtn); // parse first arg as a long digitalWrite(cmd_B_pin,pfodLongRtn); // set output sendSubMenuUpdate_A(); // always send back a pfod msg otherwise pfodApp will disconnect. } else if('D'==cmd) { // user moved slider -- 'D3 is ' // in subMenu_Output -- opened by button -- 'Output Control' // set output based on slider 0 == LOW, 1 == HIGH parser.parseLong(pfodFirstArg,&pfodLongRtn); // parse first arg as a long digitalWrite(cmd_D_pin,pfodLongRtn); // set output sendSubMenuUpdate_C(); // always send back a pfod msg otherwise pfodApp will disconnect. } else if ('!' == cmd) { // CloseConnection command closeConnection(parser.getPfodAppStream()); } else { // unknown command parser.print(F("{}")); // always send back a pfod msg otherwise pfodApp will disconnect. } } // <<<<<<<<<<< Your other loop() code goes here }
Menú mensajes y mensajes del menú actualización
Hay una diferencia importante entre los mensajes de menú (o submenú) y menú actualizaciones.
Menús comienzan con {. (o {^ ) y definir un nuevo menú pfodApp ve esto y recuerda el comando que produce esta respuesta de menú para que cuando el uso presiona el botón back, pfodApp saber qué comando a enviar para obtener el menú anterior. Esto significa que el código de Arduino no es necesario hacer un seguimiento de la navegación del usuario a través del sistema de menú.
Por otra parte, cuando el usuario presiona un botón en el menú que realiza una acción, como encender el LED de encendido o apagado, es importante volver a una actualización del menú, {:, en lugar del mensaje. Mensajes de actualización del menú no ponga en marcha un nuevo menú, sólo modifican la pantalla de menú existente.