hulp gevraagd voor arduino regelunit voor distilleer apparaat

Nou, weer een toevoeging gemaakt.

Ik heb nu menu modus 4 en 5 toegevoegd, en helemaal onderaan staat dat nog een keer als commentaar.
Dat onderste stukje kun je als macro gebruiken.
Als je een nog een menu verder wil gaan, kun je dat stukje als basis pakken.
Knippen tussen de /* en */, en dan in loop plakken.
Daarna aanpassen aan jouw wensen, en je hebt er weer een menu bij getoverd.
Hier zijn nu 3 regels (waarvan 1 de titel is) gebruikt, maar je kan dus ook hier weer uitbreiden tot 4 regels en meerdere kolommen zoals in mijn eerste voorbeeld van een paar maanden geleden.

Ik heb ook wat ingebouwd dat moet voorkomen dat je maar heel kort in je menu blijft.
Ik had namelijk ooit iets gemaakt om te zien of er een nieuwe toets was ingedrukt.
Dan werd de variabele KeyDet 1.
In dat geval werd die toets pas afgehandeld.
Alleen werd KeyDet nergens meer gewist, in ieder geval niet in mm 3.
Dus als je dan in mm 4 terecht kwam, dan was KeyDet nog steeds 1 maar er was in werkelijkheid helemaal geen nieuwe toets geregistreerd.
Door de waarde direct te wissen (er een 0 van te maken), nadat geconstateerd was dat deze 1 was, kan dat niet meer gebeuren.
Ik weet niet zeker of dat het probleem ook echt was, maar het was in ieder geval iets dat niet klopte.
Omdat mm 4 en 5 direct na mm 2 en 3 worden uitgevoerd als aan de voorwaarden word voldaan, moest deze aanpassing sowieso gemaakt worden.

Distiller_januari.ino (21.2 KB)

super heb hem geupload en het werkt bijna.
Het probleem wat er nu nog inzit
Is nog steeds dat hij kijkt of er op ok gedrukt word.
Dit heb ik toen zelf ingezet.
als ik nu instellingen selecteer en duw rustig op ok gaat hij weer terug naar mm=2
Kies ik instellingen en druk snel op toets ok
gaat hij wel netjes naar mm=4

Dit komt volgens mij door mijn toegevoegde code in het begin van de scets.
Ik denk dat hij bij elke keer bij het doorlopen van de loop.
Controleerd of de ok toets word gebruikt.

Ik zou dit ook kunnen oplossen door in plaats van press oke
hier een delay neer kan zetten van een paar seconden
en het stukje code verwijderen van press oke.
Wat denk jij daarvan?

Een delay vind ik bijna altijd een slecht idee.
De delays die niet in de loop zitten zijn wel ok, maar in de loop vind ik dat daar betere oplossingen voor zijn.

Het probleem dat je nu nog ziet komt vermoedelijk omdat dat het eerste is wat je doet als je een toetsdruk hebt binnengehaald.
Het maakt nu ook niet uit in welke menu mode je dan bent.
Daarom kun je beter controleren of niet alleen zojuist de OK toets werd gedrukt, maar ook of we wel in mm 1 zitten, want alleen dan willen we met de OK toets in mm 2 terecht komen.
Dus heb ik de regel:  if ((key ==4))       // Waneer toets 4 "OK" gedetecteerd word ga dan naar menu 2
Aangepast als volgt:  if ((mm==1)&&(key ==4))  // Waneer toets 4 "OK" gedetecteerd word ga dan naar menu 2
Hierdoor worden beide voorwaarden gecontroleerd voor er naar mm 2 word gegaan in het opstartscherm.

Dan heb ik er nog een extra veiligheidje ingebouwd.
Wanneer in mm 5 het menu word verlaten door op item 2 te gaan staan en de OK toets word gedrukt, dan word niet alleen de menu modus omgeschakeld, maar word ook de informatie van de toets gewist door er -1 (betekent geen toets gedrukt) in te zetten.
Toch klopte daar nog iets anders niet zie ik net.
Want er werd ook naar mm 4 teruggeschakeld als je in mm 5 zat.
Dat betekent ook dat wanneer je daar eenmaal inzit, je er niet meer uit kunt.
Want mm 4 word maar 1 keer uitgevoerd, en dan word direct naar mm 5 omgeschakeld.
Dat was ook een foutje.
Er moet naar een andere menu mode dan 4 worden omgeschakeld.
Het lijkt me wel logisch dat je dan naar mm 2 wil gaan maar je zegt zelf dat dat niet de bedoeling is.
Waar wil je heen als je uit menu 4 (en 5) gaat door exit te kiezen ?
Of heb je die keuze om dat menu te verlaten niet ?

In mm 2 word de hoofdkeuze gemaakt tussen distilleren of instellingen.
En in mm 1 word nu alleen nog maar gewacht op de OK toets.
Je kunt ook in mm 1 meetwaardes op je scherm zetten die dan worden getoond zolang er niet op OK word gedrukt.
Dat kun je doen nadat je een keer in mm 2 bent geweest om de keuze te maken tussen instellen en distilleren.
Als je dat wil dan laat je dus eerst je startscherm zien zoals nu, en een volgende keer als je het menu verlaten hebt komen dan je waardes tevoorschijn.
Dat heb ik nu dus niet ingebouwd, dus kom je terug in mm 2.

Ik heb weer een aangepaste versie aangehangen.

Edit: Leesbaarheid en tiepvaud verbeterd.

Distiller_januari_1.ino (21.4 KB)

Hoi mas

Inderdaad een betere oplossing dan die van mij.
Ook vind ik het wat profesioneler overkomen.
Inplaats van een delay

Wat je schrijft aan het eind is uiteindelijk mijn bedoeling.
Bij instellingen kun je alle waarden gaan aanpassen.
Als je dit hebt gedaan kom je weer in het menu instellingen distilleren.
Dan gaan we distileren waarin je in een paar stapen het distilleren begint.
En je in een begin scherm komt met temperaturen .
Ben bezig om een overzicht te maken in blokken wat ik wil.
Deze zal ik je van de week even toe sturen.
Heb je een idee wat ik wil maken.
Waarschijndelijk heb je hier ook ideeen over.

Ben ook bezig om de onewire dallas temp sensors in de ketel te plaatsen.
Hierna ga ik de naald kraan automatiseren.
Weet nog niet of ik dit met een servo of stappen motor ga doen.
Wat zou het makkelijksre zijn met software schrijven?

Al met al nog een hoop te doen.
Maar dit uitdokteren maken en over lezen om te leren.
Vind ik reuze leerzaam om te doen.

Nou dan word er in een volgende versie mm 0 toegevoegd.
Als je begint en er een welkomst scherm word weergegeven, ben je dan in mm 0.
Daar kom je ook nooit meer terug als je er eenmaal uit bent.
Na het drukken op de OK toets gaat het zo als het nu is, maar als je dan het menu uiteindelijk verlaat door te kiezen voor distilleren, kom je in mm 1.
mm 1 is dan dus wat het meest op je scherm zal staan en dat zijn dus je meetwaardes en zo van het distilleren zelf.

Voor je naaldkraan (geen idee wat dat is), is aansturen met een servo het eenvoudigst.
Niet alleen vanwege de software, maar ook vanwege de hardware.
Want om een stappenmotor te kunnen gebruiken voor zoiets als dit, moet je ook een sensor hebben die registreert wanneer je aan het beginpunt bent aangekomen (kraan == dicht).
Ik weet alleen niet of zo'n servo wel sterk genoeg is om dat te doen, en een servo heeft een maximale verdraaiing van 180 graden.

Hoi Mas.

Ik ben al heel wat aan het stoeien geweest met het nieuw menu.
Om te weten hoe het werkt.
Door je comentaren is het nu een stuk duidelijker!
Weet nu ook hoe dit werkt.

Ik heb nu weer een vraagje waar ik niet uit kom.
Ik heb een menu opgebouwd onder instellingen.
Ik zal het hier proberen weer te geven hoe dit op het scherm er uitziet.

  1. -INSTELLINGEN-
    Instellen temp.
    voorloop opvang.
    <+/->

Het menu heb ik nu weergegeven als hierboven
Dit staat onder mm=4
Nu dit is opgebouwd is sluit ik mm=4
En ga ik naar mm=5
Hieronder heb ik drie (cases) gemaakt.
Zodat het pijltje voor <+/-> komt te staan.
Ook is het me gelukt om het pijltje op de juiste manier over deze 3 keuzes te laten gaan.
Het selecteren is ook geen probleem.
Maar wat ik graag zou willen is om niet met de knoppen omhoog omlaag over deze 3 keuzes te gaan
Maar met pijltje links en rechts.
Omdat ik de 5 knoppen zoals onder in het bedieningspaneel wil zetten

^
< OK >
v

Zodat het wat logischer word.
Weet jij een manier om deze twee toetsen daar aan te koppelen?
De waarde van toets links is 448 en rechts is 0

Ik zal de code met het nieuwe stukje menu er bij zetten

Distiller_jan_13.ino (21.7 KB)

Nog een kleine aanvulling.
Het menu zoals je de laatste keer hebt aangepast
Werkt nu zonder problemen!!
bedankt.

Een naaldkraan is eindelijk een gewone kraan alleen wat precieser af te stellen.
Dus niet zo van open en dicht maar druppel voor druppel.

Deze kraan gaat heel soepel open en dicht.
Ik heb hier wat servos liggen die erg veel kracht kunnen leveren.
En waar ik mee heb getest en die krijgen de kraan met gemak open.
Ik ben alleen iets aan het bedenken om de slag van 180 graden om te zetten naar twee omwentellingen
van de naaldkraan.

De opening van de naaldkraan word later in stappen gedaan
Die daar dan voor zijn ingesteld bv 0 dicht 128 volledig open.

Nog genoeg om mee te hobbyen.
Maar geduld en tijd is bij mij geen probleem.
Er mee bezig zijn is voor mij ook al een hobby
mvg Rolf

Hoi Mas.

Na nog eens goed naar je menu te kijken zag ik hoe ik het kon oplossen.
Eindelijk te simpel om het over het oog te zien.

met het stukje code

  if (KeyDet){                                                        // Het volgende word uitgevoerd omdat we een nieuwe toets hebben gezien, anders overgeslagen
                                                                            // Omdat we de toets vrij moeten geven voordat we naar het volgende item gaan, moeten we kijken of de waarde nieuw is of niet
  if ((key)==0) Item++;                                         // Toets UP, dus Item verhogen ( is nu 0 dus toets RECHTS geworden)
  if ((key)==3) Item--;                                           // Toets DOWN, dus Item verlagen (is nu dus 3 geworden LINKS)
  if ((Item)==4) Item=1;     //  5-1                         // dit stukje is hoe de pijl over het menu gaat en weer terug    // Als we voorbij de hoogste komen, gaan we weer terug naar de eerste
  if ((Item)==0) Item=3;     //  0-4                         // Ga naar de laatste item // Als we onder de laagste komen, gaan we naar de hoogste
  if ((Item==2)&&(key==4)) {                               // Waneer "INSTELLINGEN" is gekozen en op de toets (4) OK word geduwd
  Item = 1;                                                           // Zet Item terug, anders zouden we per ongeluk het menu de voelgnde keer op de verkeerde plaats binnenkomen en er gelijk weer uit raken voor we er goed en wel in zijn.
  mm = 2;                                                           // Zet menu mode terug zodat we het volgende "rondje" het menu hebben verlaten
  key = -1;                                                           // Wis key waarde ( -1 is geen key geregistreerd) zodat ie niet de volgende ronde nog blijft hangen.
        }                                                                  // Sluit Instellingen OK

Ik hoefde alleen toets links en rechts aan te geven.0=rechts en 3 is links.
Weer een voorbeeld dat je menu dus
beginners vriendelijk is.
Ook is het makkelijk dat je dit per menu kunt veranderen of toevoegen.

Dus weer een stukje veder met het opbouwen van het menu.
Hou je op de hoogte!!

Heel goed.
Ik was je al uitgebreid aan het vertellen hoe dit kan maar je had het zelf al uitgevogeld.

zo weer een stapje veder.

Ik heb het menu weer wat veder opgebouwd.
Als je in het menu instellingen komt ga ik daar veder met 1 keuze per display grootte.
Ik zal proberen dit even uit te leggen met een tekeningetje.

  1. -INSTELLINGEN-
    INSTELLEN TEMP.
    VOORLOOP OPVANG
    <+/->

Dit zie je nu in het display.
Duw je nu op de OK toets.
Dan kom je in het volgende scherm uit:

VOORLOOP TEMPERATUUR
INSTELLEN:
87'C
<+/->

In de toekomst kun je in dit scherm met de pijltjes omhoog/omlaag de temp veranderen.
Deze staat nu op 87 graden zoals in het voorbeeld ziet.
Druk je op het pijltje naar links (ESC) kom je in menu instellingen 1 terug.
Dit werkt nu
Als je nu weer in het menu instellingen bent en je drukt op het pijltje naar beneden
kom je in het volgende scherm.
dit werkt ook allemaal naar behoren ook kun je via menu 2 van instellingen via de ok toets in een volgend menu komen.

Maar als ik nu dit zo door doen naar menu instellingen 3 gebeurt er iets vreemds dan werkt
het menu niet meer.?
ik zal de code toevoegen hoe het allemaal werkt
en de code waar ik een derde menu aan heb geknoopt en het niet meer werkt.
ziet iemand hier de fout waar het mis gaat?

Hier een stukje code als voorbeeld wat ik heb gemaakt

 if (mm ==4)                                                 // Zitten we in menu mode 4 ?
  {                                                           // We gaan het menu afbeelden
    lcd.clear();                                              // Wis het display zodat we klaar zijn voor het normale scherm
    lcd.setCursor(0,0);                                       // Ik ben er niet helemaal zeker van dat we die cursor echt al terug moeten zetten
    lcd.print("1) -INSTELLINGEN-");
    lcd.setCursor(1,1);                                       // Tweede regel, tweede positie
    lcd.print(" INSTELLEN TEMP.");
    lcd.setCursor(1,2);                                       // Derde regel, tweede positie
    lcd.print(" VOORLOOP OPVANG");
    lcd.setCursor(0,3);                                       // Derde regel, tweede positie
    lcd.print("<ESC>  <+/->    <OK>");
    mm = 5;                                                   // Het menu is gemaakt, nu gaan we naar de volgende stap, namelijk bediening ervan
  }                                                           // Sluit MM 4; het menu is gemaakt
  if (mm ==5) 
  if (KeyDet){                                                // Het volgende word uitgevoerd omdat we een nieuwe toets hebben gezien, anders overgeslagen
  KeyDet = 0;                                                 // Omdat we de toets vrij moeten geven voordat we naar het volgende item gaan, moeten we kijken of de waarde nieuw is 
  if ((mm==5)&&(key ==4)) {                                   // Waneer toets (4) OK word geduwd
  Item = 1;                                                   // Zet Item terug, anders zouden we per ongeluk het menu de voelgnde keer op de verkeerde plaats binnenkomen en er gelijk weer uit raken voor we er goed en wel in zijn.
  mm = 6;                                                     // Zet menu mode terug zodat we het volgende "rondje" het menu hebben verlaten
  key = -1;                                                   // Wis key waarde ( -1 is geen key geregistreerd) zodat ie niet de volgende ronde nog blijft hangen.
        }                                                     // Sluit toets OK 
  if ((mm==5)&&(key ==3))                                     // Waneer toets 3 "ESC" gedetecteerd word ga dan naar menu 2
  {                                                           // 3    
  mm = 2;                                                     // zie hierboven: ga naar menu modus 2
  }                                                           // Einde 3; Deze stond eerst verderop maar hier past ie beter 
  if ((mm==5)&&(key ==2))                                     // Waneer toets 2 "OMLAAG" gedetecteerd word ga dan naar menu 8
  {                                                           // 3    
  mm = 8;                                                     // zie hierboven: ga naar menu modus 8
  
  }                                                           // Einde 3; Deze stond eerst verderop maar hier past ie beter 
    }                                                         // -- Sluit KeyDet --

Distiller_jan_17_1.ino (28.8 KB)

Distiller_jan_17_2.ino (30.3 KB)

Wat werkt er dan niet meer ?
Heb je bemerkt dat je maar de 1e helft van zo'n menu hebt gekopieerd, en niet de 2e ?
Je maakt dus de inhoud van het scherm van mm12 , maar niet de verwerking die je in mm 13 zou doen.
mm 13 word wel ingesteld als huidige modus, maar je doet niets als je in mm ==13 zit.
Dus eigenlijk klopt het nog steeds en werkt een en ander precies zoals je gemaakt hebt.

Als je tevreden bent met jouw mm 10 en je mm 12 op vergelijkbare wijze wil laten werken, kun je beter mm 10 en 11 samen kopiëren en daar 12 en 13 van maken.
Die pas je dan weer aan naar de juiste gegevens.

Vergeet niet de commentaren goed bij te werken, ik zie dat sommige opmerkingen niet meer kloppen en dat zal vroeg of laat tot verwarring leiden.

Hoi mas heb het even geprobeerd wat je zij met kompleet copieren.
Ik zal de code even toevoegen zoals ik dit net heb getest
Ik heb hen nu voor me liggen

( wat is dit verslaafd om te doen zeg droom er gewoon soms van)

Als ik hem nu aanzet
loopt mooi door het welkomst tekst
kies ok
werkt ook goed kom ik in het menu waar ik kan kiezen met het pijltje instellingen/distilleren
kies instellingen
kom ik in het eerste menu van instellingen (kun je ook zien aan de 1 links boven in het display.
duw ik nu op het pijltje naar beneden.
Kom ik gelijk in menu 3 met de tekst test
hij gaat niet eerst naar menu 2 wat hij met de code zonder menu 3 wel netjes deed omhoog en omlaag
maar het vreemde is hou ik de toets omlaag in kom ik menu 2
laat ik hem los kom ik weer in menu 3
maar terug naar menu 1 lukt niet
duw ik op pijltje links (esc)
heb ik het zelfde probleem als met pijltje omhoog?

Distiller_jan_17_3.ino (33 KB)

Nogmaals: zorg dat je commentaren kloppen, dat scheelt heel veel zoeken.

  if (mm ==13) 
  if (KeyDet){                                                // Het volgende word uitgevoerd omdat we een nieuwe toets hebben gezien, anders overgeslagen
  KeyDet = 0;
                                                              // Omdat we de toets vrij moeten geven voordat we naar het volgende item gaan, moeten we kijken of de waarde nieuw is 
  if ((mm==13)&&(key ==4)) {                                             // Waneer toets (4) OK word geduwd
  Item = 1;                                                   // Zet Item terug, anders zouden we per ongeluk het menu de voelgnde keer op de verkeerde plaats binnenkomen en er gelijk weer uit raken voor we er goed en wel in zijn.
  mm = 14;                                                     // Zet menu mode terug zodat we het volgende "rondje" het menu hebben verlaten
  key = -1;                                                   // Wis key waarde ( -1 is geen key geregistreerd) zodat ie niet de volgende ronde nog blijft hangen.
        }                                                     // Sluit Instellingen OK
  if ((mm==13)&&(key ==1))                                              // Waneer toets 2 "OMLAAG" gedetecteerd word ga dan naar menu 2
  delay(50); 
  {                                                           // 3    
  mm = 8;                                                     // zie hierboven: ga naar menu modus 8
  lcd.clear();                                                // maak het lcd scherm leeg oftewel wis het vorige menu
  }                                                           // Einde 3; Deze stond eerst verderop maar hier past ie beter   
  if ((mm==13)&&(key ==2))                                              // Waneer toets 2 "OMLAAG" gedetecteerd word ga dan naar menu 2
  {                                                           // 3    
  mm = 16;                                                     // zie hierboven: ga naar menu modus 8
  
  }               
  if ((mm==13)&&(key ==3))                                              // Waneer toets 3 "ESC" gedetecteerd word ga dan naar menu 2
  {                                                           // 3    
  mm = 8;                                                     // zie hierboven: ga naar menu modus 2
  lcd.clear();                                                // maak het lcd scherm leeg oftewel wis het vorige menu
  }                                                           // Einde 3; Deze stond eerst verderop maar hier past ie beter 
  
    }                                                         // -- Sluit KeyDet --
 }                                                            // -- Sluit loop; hier is de loop dus beëndingd --

Hier gebeuren rare dingen.
Ten eerste op de eerste regel die hierboven staat, die doet het volgende:

Als menu mode == 13

(doe niets en ga verder met de volgende regel)

Dat is niet de bedoeling.
Met het veranderen van 11 in 13, heb je vermoedelijk ook de daarbij geplaatste { gewist.
En omdat je daarna een foutmelding kreeg heb je ook de } die je over had gewist.
Door dit hele stuk weer in te sluiten tussen { }, hoef je verderop helemaal niet te controleren of we in mm 13 zitten, want dit stukje tussen { } word alleen uitgevoerd als we in mm 13 zitten.
Dus dan hoef je alleen nog maar te controleren welke toets er gedrukt werd.
Bij toets 1 ga je naar mm 8.
Bij toets 2 ga je naar mm 16 die niet bestaat.
Bij toets 3 ga je naar mm 8.
Ik vraag me af in hoeverre dat jouw bedoeling was.

Nogmaals: zorg dat je commentaren kloppen, dat scheelt heel veel zoeken.

lcd.clear();                                                // maak het lcd scherm leeg oftewel wis het vorige menu

Gebruik alleen commentaar als het echt nodig is om te begrijpen wat er gebeurt.
Hier staat dus echt 3x hetzelfde, zelfs een beginner van het eerste uur zal lcd.clear begrijpen.
Dat is dus (1) zonde van de type inspanning en (2) het vertroebeld de relevante commentaren

door gebruik te maken van eenduidige functie en variable namen wordt code stukken leesbaarder en hoef je minder commentaar te gebruiken. In plaats van korte cryptische variabelnamen besteed je type tijd aan goede namen. ook juiste datatype helpt enorm.

Overal staat " if (mm == 13) " dat kun je er ook uithalen

Ik heb het stukje code van de vorige post herschreven met betere namen voor de variabelen. Daarbij ook nog een bug gevonden.

Vraag aan jou, was al het commentaar nodig?

// bovenaan in je programma definieren
const int KEY_NONE = -1;
const int KEY_OMHOOG = 1;
const int KEY_OMLAAG = 2;
const int KEY_ESC = 3;
const int KEY_WEETNIET = 4;  // betere naam nodig 

if (menuMode == 13)
{
    if (NewKeyDetected == true)    <<<<<<<<<   naam en type veranderd (weet niet of type verandering kan, afh. rest vd code
    {
        NewKeyDetected = false;

        if ( key == KEY_WEETNIET )
        {
            Item = 1;
            menuMode = 14;    
            key = NOKEY;
        }
        else if ( key == KEY_OMHOOG )    <<<<   let op de ELSE die toegevoegd is.
        {
            delay(50);          <<<<<<<<   verzet, stond buiten de { }
            menuMode = 8;
            lcd.clear();
        }
        else if ( key == KEY_OMLAAG )
        {
            menuMode = 16;
        }
        else if ( key == KEY_ESC )
        {
            menuMode = 8;
            lcd.clear();
        }
    }
}

ipv de nummers voor menumodes kun je ook const int's hiervoor definieren, bv
const int MENU_CONFIG=42;

my 2 cents.

Hoi Rob.

Dat stukje gaat zo te zien alleen over het eerder door mij aangehaalde stukje uit het geheel.
De waarde 'key' komt uit een functie die dus de ingedrukte toets binnenhaalt.
De commentaren die er staan zijn in de loop van de tijd toegevoegd door homedistiller en mij om elke stap uit te leggen.
Daarna zijn delen van de code geknipt en geplakt, maar daarbij niet alle commentaren aangepast.
Ik ben het met je eens dat een commentaar dat eenmaal gegeven is, niet herhaald hoeft te worden.
Als er iets verandert dan kun je dat wel weer toelichten.
homedistiller heeft wel behoefte aan veel commentaar om te begrijpen wat er allemaal gebeurt, en dan word het erg vervelend als dat commentaar onjuist is.
Vandaar mijn opmerking daar over.

Ik heb in mijn vorige post proberen uit te leggen dat de controle op mm == 13 niet telkens hoeft te worden herhaald en dat de eerste keer als die controle word uitgevoerd, er niets mee gedaan word.
Dat alles door het wegvallen van de { }.

Dit menu heb ik ooit voor mezelf gebouwd om te zien of ik dat kon, zonder gebruik te maken van andere menu's en zaken die ik toen nog niet begreep.
Dat heb ik gebouwd aan de hand van een voorbeeld sketch dat de toetsen binnenhaalt uit mijn lcd keypad shield, nadat ik die had aangepast om goed om te gaan met variaties in de toetswaardes (er word nu gecontroleerd op een range in plaats van op absolute waardes).
Het was een eenvoudig menu dat niet dieper ging dan 2 schermpjes (plus het normale scherm buiten het menu).
De variabele namen waren voor mij voldoende duidelijk en ik vond kortere namen lekkerder (minder typen bijvoorbeeld).
Inderdaad leest en werkt het wel een stuk sneller als je niet controleert op een toetswaarde, maar op de toets functie, zoals omhoog, omlaag, links en rechts.
En dan heb je ook minder snel een stukje commentaar nodig om het te begrijpen.
Het moet ook een niet al te groot probleem zijn dat alsnog te gaan doen (wel een beetje werk).
En als het menu zo groeit tot een groot ding, kun je inderdaad beter proberen om meer passende variabelen te gebruiken.
Ik heb eerder gezegd dat je het best eerst een overzicht kunt maken van alle menu schermen die je wil maken en waar die ten opzichte van elkaar moeten komen.
Want dan kun je van te voren al een idee krijgen hoe het er uit ziet en welke variabelen (en diens types) je gaat gebruiken.
Je laatste tip volg ik niet helemaal.
Bedoel je dat je de menu mode wil controleren aan de hand van de variabele contante naam (if mm == MENU_CONFIG) ?
Dat is inderdaad ook weer duidelijker (door een naam in plaats van een abstract getal), maar gebruik je dan niet wat veel variabelen constanten terwijl daar telkens slechts 1 keer op gecontroleerd word ?

Dat menu dat ik gemaakt had heb ik hier in het begin aangeboden als mogelijkheid op homedistiller's vraag naar een menu.
Maar hij wil een stuk dieper gaan met een hele menu structuur.
Dat moet ook kunnen, en in eerste instantie kun je dan dingen herhalen met andere waarden en andere kleine wijzigingen.
Wellicht is er een veel efficiëntere manier om dit te doen (met een aantal functies bijvoorbeeld), maar ik ben bang dat homedistiller het dan niet meer kan volgen.
Aangezien homedistiller hier regelmatig vragen over heeft, is elke stap inmiddels toegelicht.
En aan het eind is er nu ook een stuk commentaar dat geknipt en geplakt kan worden en dan heel snel als nieuw menu scherm kan worden gebruikt na wat relatief kleine aanpassingen..

Helemaal duidelijk, in die zin is commentaar heel goed en je merkt terecht op dat het wel in overeenstemming moet zijn

ik heb/had niet de hele thread gelezen - mea culpa :wink:

Niks mea culpa, je hebt me aan het denken gezet.
Alle input is welkom wat dat betreft, dus ik ben eens aan de hand van jouw opmerkingen gaan kijken in het menu.
Daar valt inderdaad best wat te verbeteren qua duidelijkheid, en niet eens heel moeilijk om te doen.
Ik had aan het begin van deze thread ook als eens gezegd dat alle commentaar op mijn aanpak welkom is.
Dus bedankt voor jouw 2 cents.

@homedistiller:

Ik zag net dat je in de andere delen ook die dubbele controle op de menu modus had, dat heb je al in mm 5 en alle volgende.
Het zit niet in de kopie die ik gemaakt had en aan het eind gezet zodat je die eenvoudig kunt kopiëren naar een volgend menu.
Maar daar werkte ik met switch.. case om de verschillende items af te handelen.
Jij hebt dat veranderd omdat je liever maar 1 menu item per keer hebt en je hebt daarom de switch... case verwijderd, vermoed ik.
De test die je doet, kun je echter ook in een switch.. case zetten.
Ik houd daar van dus ik zou die daar toegepast hebben.

Aan de hand van Rob's wijzigingen, heb ik nog eens naar de if.. else gekeken.
In principe gebeurt er daar hetzelfde, maar de beschrijving ervan hier op het reference gedeelte van de site, vertelt dat if.. else efficiënter is dan meerdere if..'s na elkaar.
Dat omdat er bij een if.. else maar 1 keer een test word uitgevoerd die meerdere resultaten kan hebben (als ik het goed begrepen heb), maar bij meerdere if..'s word er dus elke keer afzonderlijk getest.

Dus als je nu bij elke regel zoals deze:

  if (mm ==5)

Een { toevoegt en vóór de regel met het commentaar "Sluit KeyDet" een regel met alleen een } toevoegt, verbeter je de code.
En als je naar Rob's voorbeeld de na de eerste keer if.. in zo'n stuk een else gebruikt, dan word de code ook beter (en sneller afgehandeld).

Nog het een en ander geprobeerd.
Maar hij blijft in het menu naar menu3 lopen bij instellingen.
meerdere dingen veranderd zoals voor gesteld maar het probleem blijft.
Zou iemand hier voor mij naar willen kijken?
als ik een werkend voorbeeld heb kan ik veder met het menu indelen.

gr Rolf

Hoi Rolf.
Ik ben er weer eens mee bezig geweest, en ook nog steeds mee bezig.
Maar ik kom wat vreemde commentaren tegen.
Daarom wil ik graag van je weten welke codes er voor je toetsen gelden.
Anders kloppen de commentaren straks niet, en dan ga je er niet meer uitkomen als je later nog wat wil uitbreiden of op een andere manier wil veranderen.
Klopt het onderstaande lijstje voor jouw knoppen ?

Right=0
Down=1
Up=2
Esc =3
OK=4

Als dit niet klopt, graag even laten weten wat het wel moet zijn.

Hoi mas

ik hen

omhoog = 2 waarde is (153)
omlaag = 1 waarde is (330)
rechts = 0 waarde (0)
links =3 waarde is (448)
ok/select + 4 waarde is (656)

je mag het ook veranderen hoe jij het zou doen

ben ook met proefjes bezig om zelf folie toetsen te maken voor het display.
dus ik kan het nog zo maken als ik het wil.
wel heb ik de sensoren bijna klaar voor in de ketel.
dus ook al hoor je niks van mij
ik ben er nog volop mee bezig!

mvg Rolf