hulp gevraagd voor arduino regelunit voor distilleer apparaat

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

Hmm was me niet eens opgevallen dat Links er niet bij zat.
Nou ja ik heb de code inmiddels al wat aangepast zodat ie makkelijker te volgen is, zoals Rob voorstelde.
Ben ook bezig de commentaren te verbeteren, en dubbele controles weg te werken.
Als ik daar mee klaar ben zal ik m hier weer neerzetten, jij moet m dan controleren omdat jij de passende hardware hebt.
Ik zal wel eerst zien of ie wil compileren zonder klachten.

Ik heb net weer even terug gelezen en zie dat je pijltje links ook als Esc. gebruikt, en vandaar dat die Links dus ontbrak...

Okee, ik heb weer wat veranderd nu.
Om de code beter leesbaar te maken, heb ik de key waardes nu omgezet naar de bijbehorende functies.
Eerder heb ik dat niet gedaan, omdat ik dacht dat een "const int" onnodig geheugen zou verbruiken, maar dat blijkt dus niet zo te zijn.
Dan is het beter leesbaar als je de functie noemt in plaats van een abstracte waarde.

Eerder had ik al direct nadat we zagen dat er een toets gedrukt was en we die wilden gaan verwerken, eerst de registratie van een nieuwe toetsdruk gereset.
Anders zou je kunnen krijgen dat er meerdere handelingen worden gedaan zonder dat er bewust op een toets werd gedrukt.
Zoiets heb ik er nu weer bij gemaakt, ik heb de waarde in de variabele key naar -1 gereset zodra we hebben gezien dat we in item 2 zitten en de OK toets hebben gedrukt.
Dat staat op regel 123.
Zoals vermeld in het commentaar zou dat eigenlijk niet hoeven, maar voor de zekerheid toch maar erin gezet.
Dit is in menu 3.
Maar nu vraag ik me af of jij wel dezelfde getallen aanhoudt als je zegt dat je problemen hebt in menu 2 en 3.
Je geeft namelijk in de schermpjes ook getallen weer in de linker bovenhoek 1), 2) enzovoorts, en dat gedeelte is nieuw sinds 17 januari.
En je zegt dat je in een menu komt met "test" in de tekst.
Volgens het programma is dat mm 12, maar beeld je daar wel de 3) af.
Dit is op dit moment verwarrend voor mij, en daarom lastig te volgen wat er nou fout gaat.

Na nog een paar keer je vraag in reply 75, en je sketch gelezen te hebben, zit je probleem niet in mm 2 en 3, maar in mm 9 en verder.
Daar heb je precies geprogrammeerd wat je nu als fout / ongewenst beschrijft.
In mijn reply 76 vroeg ik me al af of je bij verschillende toetsdrukken altijd naar een ander menu wilde gaan (dat doe je nu dus wel).
Er zit trouwens ook een delay (50) op diverse plaatsen, waarvan ik het nut niet inzie.

Ik wilde de aangepaste sketch hier bijvoegen, maar ik weet nu eigenlijk niet wat je wil dat er wel gebeurt.
Je hebt eerder laten zien dat je een menu toont en dat men dan op OK moet drukken om naar een volgens scherm te gaan.
Wil je met de toetsen links/rechts een bepaald gedeelte ( zoals 1), 2), 3) ) van je menu's kiezen, dan met omlaag/omhoog een item kiezen (zoals Instellen Temp., Voorloop Opvang ) ?
Als je een item gekozen hebt, dan met OK in het betreffende scherm terecht komen ?

Dat kan allemaal maar niet zoals je het op dit moment hebt gemaakt.
Graag even laten weten wat je precies wil, want anders zit ik iets heel anders te bouwen als wat jij wil.

Hoi Mas

Ik kom hier vanavond op terug.
Dan zal ik beschrijven wat ik wil.
Ik heb wel een link naar een filmpje hoe ik het in gedachten heb.

Hier zie je een menu die ik wil gebruiken.
wel met wat veranderingen er in.
Maar dan weet je wat ik bedoel.

Okee, dat filmpje maakt inderdaad duidelijk wat je na wil bouwen.
Aangezien ik niet het geduld had om een kwartier te luisteren naar de mogelijkheden van dat product (is een beetje een langdradig filmpje naar mijn smaak), weet ik niet wat je precies allemaal wil kunnen instellen.
Maar dus wel hoe het menu zou moeten werken.
En das net iets anders als wat ik dacht.
Dat gaat nog wel even duren, want je moet nog behoorlijk veel programmeren.

Ik heb je weer een stukje op weg geholpen, door mm 6 en 7 aan te passen.
Als eerste heb ik Rob's commentaar (gedeeltelijk) ter harte genomen en in plaats van nummers, de toets functies (woorden) gebruikt.
Dat maakt het volgen van de afloop van het programma een stuk eenvoudiger.
Ik heb je er zelfs een voorzet gegeven om daar echt een waarde weer te geven, en hoe je dat dan weer kunt afbeelden op je schermpje.
Je moet dan zelf nog wat bijpassende variabelen maken en die gebruiken in plaats van "waarde" en "nieuwWaarde".
Verder moet je dan in die regels waarin die variabelen voorkomen, de // weghalen.
Die regels heb ik nu met // uitgeschakeld, zodat ik kon controleren of de compiler geen klachten zou hebben.
De volgende stukken (mm 8 en 9, mm 10 en 11 enzovoorts) werken niet anders en kun je dus zelf naar voorbeeld van mm 6 en 7 aanpassen.
Verder moet je ook nog in mm 3 omgaan met wanneer de keuze "Distilleren" word gekozen, maar daar ging het nu ff niet over.
Je moet ook nog even niet al teveel op de wijzigingen letten die in de mm hoger dan 7 staan, want dat heb ik vanavond niet meer aangepast ('tis al weer wat laat).

Heb je zelf al een lijstje gemaakt met hoeveel menu schermpjes je straks gaat krijgen ?
Zo niet, raad ik je sterk aan dat alsnog te doen.
Dan is het echt eenvoudiger een en ander onder controle c.q. overzichtelijk te houden.
Het gaat dan niet alleen om de menu schermpjes, maar ook om de variabelen die daarin voorkomen.

Distiller_feb_16.ino (35.1 KB)

Hoi Mas

Het is nu een stuk duidelijker voor me.
Snap nu ook waardoor hij de fout inging.
Heb het menu nu even wat netter gemaakt
Ook de comentaren gelijk in orde gemaakt als ik iets veranderd heb
of gekopieerd
Zo blijft het inderdaad een stuk duidelijker.
het symbooltje van graden werkte niet dit heb ik veranderd

 lcd.print(223);

heb ik veranderd in

lcd.print((char)223);

0ok loopt hij nu mooi door het menu heen.
Alles wat niet relevant was heb ik verwijderd.
alleen is het nog wel zo als ik alle comenteren op een lijn zet.
komt dit anders aan bij jou en anders om.
Dan staat het ineens niet meer onder een lijn

nu ga ik me inlezen zoals je voorstelde in variable.
zal de code plaatsen zoals hij nu is tot nu toe.

gr Rolf

p.s: Ben erg blij dat je me hierin steunt het is echt super leerzaam

Distiller_feb_17.ino (33 KB)

heeft er iemand een link of side waar ik iets kan vinden.
Hoe ik in mijn menu de temperatuur kan instellen dus bv 87 graden en verlagen met 1 of verhogen met 1 graden.
via de up en down toets.
Kan hier namelijk heel weinig over vinden.
Als ik op variable zoek kom ik erg weinig tegen.
Heb het idee dat ik bij het verkeerde zoek
Mag ook lesstof zijn
mvg Rolf

Over die commentaren hoef je je geen zorgen te maken, das maar bijzaak.
Heeft er ook mee te maken welk lettertype er is ingesteld bijvoorbeeld.

Je zegt dat 'ie nu mooi door het menu loopt.
Maar in mm 7, als er op OK word gedrukt, ga je niet naar het vorige menu scherm (kan zijn dat je dat wil).
Daarvoor moet je nog eens extra op Esc. drukken.
Ik deed dat wel door bij OK, ook naar mm 4 te schakelen.

Menu 8, 10 en 12 heb je nog niet aangepast denk ik, want daar gebeuren nu rare dingen.

Vergeet niet de benodigde variabelen te reserveren voor de dingen die je in je menu wil gebruiken.
Je kunt wel wat variabelen en dus ook ruimte besparen.
Het lijkt er nu namelijk op dat de menu's erg veel gemeen hebben.
Als het zo is dat elk menu telkens 1 waarde aanpast, en die waardes van hetzelfde type (int, long int, enzovoorts) zijn, kun je de zelfde tijdelijke variabele gebruiken (ik heb m in mijn voorbeeld nieuwWaarde genoemd).
Daarvoor moet je wel eerst die variabele vullen met de juiste begin waarde.
Om dat duidelijk te maken, heb ik de sketch weer aangepast.
Het gedeelte waar de oude waarde terug word gezet in nieuwWaarde als je op Esc drukt, is nu verplaatst naar het gedeelte waar dat menu word gebouwd (mm 6).
Dan word dat telkens maar 1 keer uitgevoerd, en ook als je eerder al eens op Esc hebt gedrukt.
De foute waarde blijft dan wel in nieuwWaarde staan, maar word dus bij de volgende keer als een menu word gebouwd overschreven.
Op deze manier kun je waarschijnlijk nieuwWaarde voor alle menus gebruiken en bespaar je je wat geheugen uit die je mogelijk ergens anders beter kunt gebruiken.
Dat werkt dus weer iets efficiënter.

Als je (zoals ik in het filmpje meen te hebben gezien) wil werken met halve graden, kun je de variabelen voor de temperatuur, en dus ook nieuwWaarde, niet als int definiëren (want een int heeft geen komma).
Dat zou dan een float worden, die altijd een komma (in het Amerikaanse systeem, dus hier ook, een punt) heeft.
Als hele graden goed genoeg zijn, kun je wel beter int gebruiken want dat scheelt ook weer ruimte en een beetje snelheid (voor zover dat laatste er toe doet).

Licht aangepaste versie bijgevoegd.

Distiller_feb_17_2.ino (33.1 KB)

homedistiller:
Hoe ik in mijn menu de temperatuur kan instellen dus bv 87 graden en verlagen met 1 of verhogen met 1 graden.
via de up en down toets.
Kan hier namelijk heel weinig over vinden.

Rolf, dat stukje heb ik er gisteren al ingebouwd.
Maar dan met een halve graad.
Zoals je ziet in mijn posting van zojuist, raad ik je aan om inderdaad met 1 graad te werken.
Je hoeft daarvoor alleen de 0.5 maar de veranderen zodat het 1 word, maar als je met 1 wil verhogen of verkleinen, kun je ook ++ of -- doen.
Zorg er voor dat je goede namen gebruikt, en verander de regels die er zo uitzien:

// nieuwWaarde = nieuwWaarde +0.5;   // Doe iets met de bijbehorende waarde

Naar:

nieuwWaarde = nieuwWaarde ++;          // Doe iets met de bijbehorende waarde

Dus namen voor waarde (daar moet je een betere naam voor nemen) en nieuwWaarde definiëren, en de // voor die regels weghalen en je bent al klaar.
Het gaat om 2 regels, en nog 2 iets hoger, waar waarde naar nieuwWaarde word gekopieerd, en waar nieuwWaarde word geprint.

Ik hoop dat je dat snapt en terug vind.

Hoi Mas was er net mee bezig.
Als ik het goed begrijp uit je verhaal.
Moet ik eerst in de setup een goede naam instellen bv TempV
Ik kan dit doen met "int"
omdat ik met hele waarde werk en binnen een bereik van -32767 tot 32768 zit
Dit had ik inderdaad gevonden op internet.
Wat ik dus zou kunnen doen in de setup
Want hier wil ik dit definiëren

int TempV=87

Hier zeg ik dan volgens mij definiteer TempV is 87

Dan kan ik de regel van jou veranderen in

Tempv  = TempV  ++;          // Doe iets met de bijbehorende waarde

en voor de knop omlaag dan

Tempv  = TempV  --;          // Doe iets met de bijbehorende waarde

Of heb ik het nu helemaal verkeerd?

Update

Heb het net in het programma gezet en dit werkt nu!!!

Je hebt het nog niet helemaal goed.
Wat ik in dat stukje deed, was eerst werken met een waarde die je instelt, hoger of lager maakt.
Dan, als je op OK drukt, word die waarde in TempV gezet.
Zo kun je tijdens instellen dus terugkeren zonder echt die waarde veranderd te hebben door op Esc te drukken.
En je ingestelde waarde verandert pas als je op OK drukt en niet al tijdens instellen.

Jouw variabele TempV is wat ik waarde noemde.
Die kun je inderdaad zo definiëren, maar wel in het stukje nog voor Setup, anders geldt ie alleen tijdens Setup en we willen m ergens anders gebruiken.
Je kunt ook nieuwWaarde blijven gebruiken (of bedenk iets dat voor jou duidelijker is).
Ook die moet je dan wel nog als int definiëren voor (dus niet in) setup.
Dus TempV vervangt nieuwWaarde niet, je hebt die ernaast nodig.

Ow, en met mijn snelle reactie maak ik nog een fout daarnet.
Het moet worden:

nieuwWaarde ++;          // Doe iets met de bijbehorende waarde

Na heel wat puzelen en lezen ben ik tot het volgende gekomen.

Ik heb in de Code toch gekozen voor float
Omdat de eerste waarde echt in halve graden ingesteld moet kunnen worden.
Ik heb voor de setup (zei het verkeerd eerder ik bedoelde eindelijk ook voor de setup)
gedifinieerd

float nieuwWaardeV=87.5;
float TempV;

Ik heb in de code het stukje op regel 183 in mm=6 weggehaald.
Als ik dit niet deed,
was mijn basis temp niet 87.5 maar kwam daar 0.00 te staan.
Die kon ik wel verhogen naar 0.50, maar ik wil beginnen vanaf een standaard voor ingesteld getal/Temperatuur
namelijk (87.5) graden.

de code is zo geworden in mm=6

 if (mm ==6)                                                      // Zitten we in menu mode 6 ?
  {                                                                 // 6; We gaan het menu afbeelden
    lcd.clear();
    lcd.setCursor(0,0);                                             // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("VOORLOOP TEMPERATUUR"); 
    lcd.setCursor(1,1);                                             // Zet de cursor op de tweede regel op de tweede positie.
    lcd.print("    INSTELLEN:");
    lcd.setCursor(1,2);                                             // Zet de cursor op de derde regel op de tweede positie.
    lcd.print("       87");                                         // Zet een testtekst neer
    lcd.print((char)223);                                           //Print het graden symbooltje
    lcd.print("C");
    lcd.setCursor(0,3);                                             // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("<Esc>  <+/->    <OK>");                              // Zet de tekst neer: "Press<OK>"
     // deze regel heb ik verwijderd anders staat er 0.00 ipv 87.5  // We hebben ons bedacht en willen de nieuwe waarde niet gebruiken.Daarom word deze eerst terug gezet naar de al aanwezige waarde (anders gaat het de volgende keer fout).  
   mm = 7;
  }                                                                 // Einde 6; het scherm voor menu mode 7 is gemaakt, en we hebben al doorgeschakeld naar mode 7
  if (mm ==7) 
  {
  lcd.setCursor(1,2);                                               // Zet de cursor op de derde regel op de tweede positie.
  lcd.print("         ");                                           // Wis oude waarde
  lcd.setCursor(6,2);                                               // Zet de cursor op de derde regel op de zevende positie.
  lcd.print(nieuwWaardeV);                                          // Dusss..
  if (KeyDet){                                                      // Het volgende word uitgevoerd omdat we een nieuwe toets hebben gezien, anders overgeslagen
  KeyDet = 0;
  if (key ==Esc) {                                                  // Wanneer toets (3) "Esc" werd 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 = 4;                                                           // Zet menu mode 1 menu terug zodat we het volgende "rondje" dit menu hebben verlaten
        }                                                           // Sluit Instellingen Esc
 if (key ==Omhoog) {                                                // Wanneer toets Omhoog werd geduwd
     nieuwWaardeV = nieuwWaardeV +0.5;                              // Doe iets met de bijbehorende waarde
        }                                                           // Sluit Instellingen Omhoog
 if (key ==Omlaag) {                                                // Wanneer toets Omlaag werd geduwd
     nieuwWaardeV = nieuwWaardeV -0.5;                              // Doe iets met de bijbehorende waarde
        }                                                           // Sluit Instellingen Omhoog
 if (key ==OK) {                                                    // Wanneer toets Omhoog werd geduwd
 TempV = nieuwWaardeV;
 mm = 4;                                                            // Zet menu mode 1 menu terug zodat we het volgende "rondje" dit menu hebben verlaten
        }                                                           // Sluit Instellingen OK
     }                                                              // -- Sluit KeyDet --
  }                                                                 // -- Sluit mm 7 --  
                                                                    // Vanuit mm 7 kunnen we alleen terug naar mm 4 en 5, we kunnen niet verder naar mm 8, dat kan alleen vanuit mm 4

ik heb in dit stukje code
Het volgende toegevoegd om te kijken of TempV inderdaad veranderd in de ingestelde temp.
En niet als er op esc gedrukt word zoals je voorstelde.

 if (mm ==12)                                                       // Zitten we in menu mode 12 ?
  {                                                                 // 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("3) -INSTELLINGEN-");   
    lcd.setCursor(1,1);                                             // Tweede regel, tweede positie
    lcd.print(" TOLLERANTIE INST.");
    lcd.setCursor(1,2);                                             // Derde regel, tweede positie
    lcd.print(TempV);                                               // Om te kontroleren of ingestelde tijd goed door komt met esc en ok duwen
    lcd.setCursor(0,3);                                             // Derde regel, tweede positie
    lcd.print("<Esc>  <+/->    <OK>");
    mm = 13;                                                        // Het menu is gemaakt, nu gaan we naar de volgende stap, namelijk bediening ervan
  }                                                                 // Sluit MM 12; het menu is gemaakt

Ik zit alleen nog met het volgende.
Als ik nu de arduino reset of uitzet gaat hij weer naar de waarde 87.5.
Ik zou dit graag hebben in de ingestelde waarde.
Ook na reset en uitzetten.
Wel zou dit moeten na in het menu te kiezen voor het terug zetten naar fabrieks gegevens.
Zou dit mogelijk zijn?

Heb je mijn 2e antwoord ook nog gelezen ?
Daar heb ik het anders gedaan met nieuwWaarde bij de eerste keer printen, want daar word die eerst uit de echte variabele (TempV) gehaald.
Voor die tijd en de eerste keer dat je gaat instellen, is daar inderdaad nul aanwezig.
Op de manier waarop je het nu doet, word er altijd eerst 87 afgebeeld, en heel snel daarna de waarde die in nieuwWaarde staat.
Overigens bedacht ik me dat het nog wel beter kan.
Vermoedelijk knippert de waarde die word afgebeeld.
Dat kan voorkomen worden door m alleen te wissen en opnieuw af te drukken als ie ook echt veranderd is, en het is geen probleem om dat te doen.

Ik heb in dat 2e antwoord ook uitgelegd dat je nieuwWaarde bij elke stap (menu deel) kunt gebruiken, als je m telkens eerst vult met de te bewerken aanwezige waarde, en dan nieuwWaarde gaat bewerken zoals we hier a deden.
Als je klaar bent met bewerken kun je m dan weer in bijvoorbeeld TempV zetten na drukken op OK, of dat niet doen na drukken op Esc.

Het is inderdaad mogelijk om de waardes te bewaren wanneer de spanning uit is geweest of er een reset is geweest.
Daarvoor moeten de instellingen opgeslagen worden in de aanwezige eeprom.
Dat kun je wel doen, maar ik denk dat dat nu nog even niet aan de orde is.
Je zou dan eerst alle instellingen doen, en wanneer je het menu verlaat (en inderdaad iets gewijzigd hebt), sla je de instellinen op in dat geheugen.
Tijdens starten kun je dan die gegevens weer uit de eeprom lezen en verwerken in je programma.
Maar het lijkt me beter dat je dat in een later stadium gaat doen.
De eeprom is beperkt in het aantal keren dat ie opnieuw beschreven kan worden (ik meen iets van 1000 maal), en zolang je daar nog niet echt mee bezig hoeft te zijn lijkt het me beter dat je dat dan nog even laat zitten.
Ik zou het op het lijstje met wensen zetten.

Heb je al een overzicht gemaakt van alle dingen die je wil kunnen instellen ?

Hoi Mas

Je hebt inderdaad gelijk dat hij dan eerst op nul staat.
Maar als ik dan b.v 90.0 graden wil instellen in stappen van 0.5
Moet ik 90 x 2 = 180 x drukken

Wat ik eindelijk bedoel is als ik dan de volgende keer begin met distilleren.
En ik zet mijn ketel aan .
Ga ik naar het menu instellingen om mijn stook verloop in te stellen.
Kom ik dan in het gedeelte waar ik kan instellen tot welke temperatuur
Ik de voorloop wil opvangen staat hier o.oo en kan ik niet zien.
Wat ik de laatste keer heb ingesteld.
Of begrijp ik dit verkeerd?

Wat je zij over het knipperen klopt.
Dit was me ook opgevallen.
Vooral nu het menu zo netjes weergegeven word.
En zo soepel en snel doorloopt zonder haperingen.
Wat zou hier een oplossing voor kunnen zijn.

Ik zit nog steeds te denken hoe ik het overzicht van het menu
Moet samenvatten op papier simpel en begrijpelijk.
Ook moet ik bekijken hoe ik dit wil doen.
Vooral omdat ik dit voor het eerst doe en nog niet alle andwoorden weet
Om dit aan te sturen.
Tussen weten wat ik ongeveer wil en uitleggen op papier
Is ook niet zo heel eenvoudig.

Ik zit te denken aan een blok shema voor het menu.
En voor het programma een stuk tekst wat ik zou willen.
Als je voorstellingen hebt hoor ik die graag van je.

Wat je nu het beste kunt doen, is je programma altijd laten beginnen met een vooringestelde waarde.
Nu definieer je TempV als een lege float, en dan zit er dus nul in.
Als je doet:float TempV=87.5;Dan ben je van de lege waarde af.
Ik adviseer je om dit te doen voor alle waardes die je gaat gebruiken.

De waarde waar je het nu over hebt, werd in het filmpje ook beschreven als ergens rond de 90 graden als ik het me goed herinner.
Natuurlijk moet je dan ook een minimale en een maximale waarde bijhouden en er voor zorgen dat je niet per ongeluk te laag of te hoog kunt instellen.
Dat heb je al eens gezien, zit in mijn eerste voorbeeld (met roll over in het commentaar).

Ook het voorkomen van knipperen zit in dat eerste voorbeeld.
Daar word bijgehouden wat de oude waarde is, en of de huidige waarde anders is.
Als huidige waarde anders is als oude waarde, word het scherm gedeeltelijk gewist, en huidige waarde op het scherm gezet.
Bovendien word op dat moment huidige waarde ook gekopieerd naar oude waarde.
Zo voorkom je dat het scherm onnodig gewist word, om vervolgens met dezelfde waarde weer beschreven te worden.
Hiervoor heb je dan dus een extra variabele nodig, ik zou 'm oudWaarde noemen.

Dat heb je al eens gezien, zit in mijn eerste voorbeeld (met roll over in het commentaar).

Deze kan ik niet terug vinden.
Waar staat deze?
Heb ik weer voldoende stof om aan te werken haha.

Wel erg verslavend dit programeren en er over lezen en mee te expermiteren
Vindt het ook een aplaus waard hoeveel tijd je steekt in mensen die je niet kent.
En de vele topics waar je in reageerd petje af!
Bedankt MAS3

Het zit in antwoord #12, in de aangehangen sketch (in regels 204 en 205).
Ik weet dat je dat gezien hebt, want je hebt m zelf ook gebruikt en aangepast.

Sterker nog, dat stukje code zit ook nog in de sketch die je nu gebruikt (regels 120 en 121).
Het gaat om dit stukje code:

  if ((Item)==3) Item=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=2;  // Ga naar de laatste item // Als we onder de laagste komen, gaan we naar de hoogste

Hier houd je dus de waarde Item binnen de door jou gezette grenzen.
Je kunt een "roll over" doen, zoals hier gebeurt.
Dan ga je dus als je verder dan de maximale waarde komt, naar de minimale waarde.
En andersom.
Je kunt ook gewoon niets laten gebeuren als iemand aan het eind van je bereik is gekomen.
Dat doe je dan als volgt:

  if ((Item)==3) Item=2; // Als we voorbij de hoogste komen, gaan we terug naar de hoogste en kunnen we dus niet te ver gaan
  if ((Item)==0) Item=1;  // Als we onder de laagste komen, gaan we terug naar de laagste

Als je hèèl goed kijkt, zie je het verschil tussen deze twee venstertjes, maar het verschil in resultaat is relatief groot.
Zo tel je wel steeds verder, maar als je te ver bent gegaan zet je m eerst terug voordat ie verwerkt word.
Dat kun je prima gebruiken om de temperatuur in te stellen, want je wil daar niet als je lager gaat dan zeg maar 80, ineens op 100 ofzo uitkomen.

Inderdaad het is best verslavend om te kijken of je iets kunt maken, wat dan tot je grote verbazing ook nog lukt ;).

Ik reageer op topics die mij aan het denken zetten, of waarvan ik denk dat ik weet wat de oplossing is.
Dat laatste is lang niet altijd het geval maar, zoals al vaker gezegd, ik leer ook van de vragen van anderen.
En ik hoop dat ik ook leer van mijn eigen fouten.