Étape 6: Le Format du Code généré
En haut du code généré sont commentaires montrant les trois menus vous avez conçu et la pfodApp des commandes plein eux. Lorsque le pfodApp tout d’abord, il connecte toujours envoyer {.} et donc obtient le Menu 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}
La méthode loop() contient une série d’if instructions else qui gèrent toutes les commandes. Les commandes. , A et C retournent au menu principal et des sous-menus, respectivement.
Les deux autres commandes, B d modifier le paramétrage de la LED et sortie D3 respectivement et renvoient une mise à jour du menu. Cette mise à jour permet d’afficher le résultat de la commande, c’est à dire l’état de la sortie pfodApp.
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 }
Messages du menu et Menu mise à jour
Il y a une différence importante entre le menu et des messages de menu (ou auxiliaire).
Des menus Démarrer avec {. (ou {^ ) et définir un nouveau menu. pfodApp voit cela et se souvient de la commande qui a produit cette réponse de menu afin que lorsque l’utilisation clique sur le bouton back, pfodApp sais ce qui commande à envoyer obtenir le menu précédent. Cela signifie que le code de l’Arduino n’a pas besoin de garder une trace de navigation de l’utilisateur dans le système de menus.
En revanche, lorsque l’utilisateur appuie sur un bouton menu qui effectue une action, comme tourner la LED allumé ou éteint, il est important de retourner une mise à jour du menu, {:, message à la place. Les messages de mise à jour de menu ne pas démarrent un nouveau menu, ils modifient uniquement l’affichage du menu existant.