Stap 6: De gegenereerde Code formaat
Aan de bovenkant van de gegenereerde code zijn opmerkingen te zien van de drie menu's u hebt ontworpen en de pfodApp de open opdrachten hen. Wanneer de pfodApp verbindt het eerst altijd krijgt verzenden {.} en zo het hoofdmenu.
/* ===== 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}
De loop-methode bevat een aantal als anders verklaringen die omgaan met alle commando's. De opdrachten. , A en C resulteren in het hoofdmenu en de submenu's.
De andere twee opdrachten, B andD wijzigen van de instelling van de LED en uitgang D3 respectievelijk en een update van het menu terug te keren. Deze update laat pfodApp waarin het resultaat van de opdracht, dat wil zeggen de staat van de uitvoer weergegeven.
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 }
Menu-meldingen en berichten van de Update van het Menu
Er is een belangrijk verschil tussen menu (of submenu) berichten en updates van het menu.
Menu's beginnen met {. (of {^ ) en het definiëren van een nieuwe menu. pfodApp ziet dit en onthoudt de opdracht die dit antwoord menu zodat wanneer het gebruik op de back-knop drukt, pfodApp weten wat commando te sturen naar het vorige menu te krijgen. Dit betekent dat de Arduino code hoeft niet om van de gebruiker navigatie door het menusysteem bij te houden.
Aan de andere kant, wanneer de gebruiker op een knop op het menu dat een handeling uitvoert, zoals het draaien van de LED in- of uitschakelen, het is belangrijk om terug te keren een update van het menu, {:, message in plaats daarvan. Menu updateberichten niet beginnen een nieuw menu, zij alleen de weergave van het bestaande menu wijzigen.