hulp gevraagd voor arduino regelunit voor distilleer apparaat

Antwoord op mijn eigen recentste bijdrage.

Ben je al wat verder, of ben je nu aan het genieten van het lekkere weer (eindelijk de BBQ tevoorschijn halen) ?

Ik antwoord op vragen onder anderen op dit board, omdat die mij ook tot nadenken aanzetten.
En dat ervaar ik dan meestal als ontspanning.
Zo ben ik er gisteravond laat nog even voor gaan zitten en heb voor mezelf wat in elkaar gefrutseld dat wel ongeveer doet waar jij naar vroeg en wat ik in mijn eerdere antwoorden bedoelde.
Een paar weken geleden heb ik voor iemand hier op het board een sketchje in elkaar gedraaid dat alle mogelijke tekens van het LCD van mijn LCD keypad shield laat zien.
Dat gebeurt door op de pijltjes toetsen te drukken, waarna het volgende of vorige teken getoond word samen met zijn decimale waarde.
Zo kwam ik er achter dat waarde 126 een pijltje naar rechts is, en waarde 127 een pijltje naar links.
Je kunt dus een pijltje op je scherm zetten door de waarde 126 naar de LCD te sturen i.p.v. de tekst ">" (dat is een pijltje zonder steeltje, 126 heeft wel een steeltje.
Aan de hand van de sketch waarmee ik die tekens opzocht, heb ik een indeling van 2 x 2 gemaakt op het 1602 scherm.
Omdat dit dus minder regels met minder tekens zijn, kan bij mij de tekst niet groter zijn dan 6 tekens (7 als het moet), en heb ik dus maar 2 regels.
Daarom zijn er 4 menu items.
Dat zijn Item1, Item2, Item3 en Exit.
Het kostte me ongeveer een uur om het navigeren onder controle te krijgen.
Daarbij kwam het pijltje op de juiste plaats terecht, en werd het oude pijltje verwijderd.
Met de toetsen pijltje op/neer navigeer ik nu naar de menu items.
Item2 staat onder Item1 en Item3 staat naast Item1.
Als ik voorbij Item4 (Exit) kom, kom ik terug bij Item1.
Het heeft me ongeveer anderhalf uur gekost om dat te maken.
Ik ben erg gecharmeerd van switch...case en dat kwam mooi van pas bij dat navigeren.

Vandaag heb ik een functie bedacht die ik met dat menu moest kunnen bedienen.
Item3 is nu gepromoveerd naar Dim.
Wanneer ik naar Dim ben gegaan (en alleen dan), kan ik met de pijltjes links / rechts het nivo van de LCD verlichting regelen in stapjes van 8.
Dat laatste omdat anders het verschil tussen de stappen veel te klein is.
De waarde van het Dim signaal kan niet lager worden dan 0 en niet hoger dan 255, want anders raakt het een en ander in de war.
Vanwege de beperkte ruimte is niet te zien welke Dim waarde er geldig is.
Het koste me iets meer moeite en de hulp van serial.print en de serial monitor om dat goed te krijgen, omdat er meerdere zaken gecontroleerd moeten worden voor je de dimmer gaat bedienen en een if... statement met 2 voorwaarden heb ik ook niet eerder in de praktijk gebracht.

Aangezien ik zelf ook een beginner ben (iets meer dan een half jaar bezig met Arduino en met "echt" programmeren), zijn dit ook leuke en leerzame oefeningen voor mij.
En dit ga ik zeker ook eens in een projectje gebruiken.
Volgende dat ik ga proberen is de Exit functie, waarbij ik dan op Exit moet gaan staan om dan op Select te drukken.
Na dat Select dient er iets anders op mijn scherm te verschijnen en pas als ik weer op Select druk zou dan het menu weer tevoorschijn moeten komen.
Er zijn nog wel wat dingen die ik hier kan uitproberen, zoals het gaan naar een tweede menu en zo.
En het menu dat ik nu gemaakt heb, moet eigenlijk in void.Menu dat dan op zijn beurt weer aangeroepen moet worden enzovoorts.
Maar eerst moet ik deze sketch een beetje opruimen omdat er nu al allerlei zaken uit vorige experimenten door mekaar staan.

Zo zie je maar dat jouw vragen ook anderen helpen, zelfs terwijl zij jou helpen.

Hoi mas3

Ik ben deze week weer begonnen met werken bij een nieuwe baas.
En heb het hierdoor erg druk gekregen.
Maar ik ben er wel nog mee bezig dit gaat alleen wat trager.
Morgen kan ik vier pt100 halen bij mijn kamaraat.
Dan kan ik kijken of ik deze kan uitlezen en de waarde op mijn lcd kan krijgen.
Ik bencerg benieuwd naar je code van je menu.

Ik kan op internet wel een paar codes vinden.
Alleen als ik deze dan wil controleren of uploaden.
Geeft het programma erg veel fouten aan.
Ik weet niet waar dit aan ligt?
Heb ik eindelijk erg vaak bij voorbeeld codes
Iemand hier een oplossing voir?
Ik gebruik software die ik gratis heb gedownload bij arduino sitete
Sorry voor de vele schrijf fouten.
Komt dat ik nu op mijn tablet zit.

Dus als iemand al eens gestoetd heeft met pt100 hoor ik het graag.
Ook moet ik ze nog in de distilleer ketel kunnen maken.
Hiervoor heb ik ook warpt tijd nodig.

Mvg rokf d

Hoi Rolf.

Gefeliciteerd met je nieuwe baan in deze lastige tijd om werk te vinden.
Dat typen op die virtuele toetsenborden pakt vaak anders uit dan bedoeld.

Houd er rekening mee dat je een waarde uit je pt100 krijgt die omgerekend moet worden naar een temperatuur.
Lang geleden heb ik op school tijdens de natuurkunde les geleerd hoe je een thermometer kunt kalibreren, en dat kun je ook bij deze oplossing doen.

De fouten die je tegenkomt bij voorbeelden, komen vaak doordat de sketches zijn geschreven voor een (veel) oudere versie van de IDE, en daarom niet meer kloppen.
Die fouten kun je wel oplossen, maar dat is vaak veel werk.
De IDE geeft je namelijk best wel goed aan wat er aan de hand is, en waar die fout ergens staat.
Maar dan moet je wel snappen wat er fout is en hoe dat dan veranderd moet worden.

Ik weet nog niet of ik de code van het menu hier zal neerzetten, want ik ben er eigenlijk wel voor dat je zelf (met wat aanwijzingen) uitvindt hoe dat gedaan kan worden en er zo serieus van leert.
Maar sowieso moet de code eerst nog opgeschoond worden (tussen de andere experimenten door, heb hier nu drie verschillende versies van Arduino op m'n buro liggen met verschillende experimentjes).

Leuk dat je me elke keer opweg helpt.

De eerste week zit er weer op.
Bevalt goed en ben weer een beetje gewent met mijn tijd in te delen.
Vandaag ben ik begonnen naar een eenvoudige code voor mijn pt100.
het is een exemplaar met drie draden 1 wit en twee roode draden.
Helaas is hier weinig over te vinden.
Waarom een eenvoudige code?
Dan kan ik er mee gaan stoeien en wat aan veranderen om de code te leren te begrijpen.
Ook ben ik nog naar tips opzoek om mijn menu af te maken.
Ook hier kan ik eindelijk haast niks over vinden.
Dus als iemand weet waar ik het een en ander kan vinden over deze onderwerpen.
Hou ik me aanbevolen.

tot zo ver nu
Nu veel zoeken op google.

mvg Rolf

Hoi weer.

Nou, ik heb in de tussentijd lekker gespeeld.
Voordeel van ergens de tijd voor nemen, is dat je (bijvoorbeeld onderweg met de auto naar een klus) lekker kunt brainstormen over struikelblokken die je bent tegen gekomen.
Zojuist heb ik mijn menuutje afgemaakt en doet het ding nu wat ik zo ongeveer in gedachten had.
In eerste instantie wilde ik iets maken dat een menu functie aanroept, en was ik dus druk in de weer met het bedenken hoe je waardes kunt overhevelen (heen en weer) tussen een functie en void loop().
Maar voor jouw toepassing wil je natuurlijk helemaal de loop niet verlaten.
Want dan controleer je niet meer de verschillende temperaturen, tijden en pompen.
Dus zit nu alles in void loop() en worden er wat variabelen ingezet om te kijken of een stukkie code uitgevoerd of overgeslagen moet worden.
Zoals de code nu is, lopen de processen dus gewoon door, word het display en toetsenbord voor het proces gebruikt.
Word op het select knopje gedrukt, dan verschijnt er een menu.
In dat menu kan men een andere taal kiezen (Engels, Duits, Frans, Spaans en Nederlands).
Men kan kiezen of er wel of niet de achtergrond verlichting moet knipperen als er op een knopje word gedrukt.
Men kan de helderheid van de achtergrondverlichting instellen (en dan blijft de al dan niet ingeschakelde knipper functie op dezelfde wijze functioneren).
En men kan het menu verlaten om vervolgens weer terug te komen waar men was.
Dat alles kan doordat er voldoende waardes worden bijgehouden.

Omdat ik hierbij niets anders dan een Uno en een LCD keypad shield heb gebruikt, kan ik ook niet aantonen dat de processen naast het actieve menu door blijven lopen.
Daarvoor zou er nog iets gedaan moeten worden met bijvoorbeeld potmetertjes en ledjes ofzo.

Voor mij was dit weer een leerzame oefening, iemand anders mag beoordelen of het niet wat beter en of netter kan.

Eens kijken of ik de code hier kan invoegen.

Hmm nee dat lukt niet.
Volgende poging, anders moet ik er aan plakken.

Plakken dus...

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (11.3 KB)

sorry voor de late reactie.

Ben gelijk aan de gang gegaan met je menu.
Heb een dag of twee gestoeid en heb het een en ander veranderd.
weet nu ook aardig hoe het menu opgebouwd word en gelezen.
Heb de vier menu items onder elkaar gezet.
Omdat het bij mijn 20x4 lcd mooier is.
Nadat ik dit had gedaan klopte het aanwijzen met de arrow niet meer.
na een tijd te hebben gezocht dit ook kunnen aanpassen.

wat ik niet helemaal snap is de dim functie.
als ik deze kies en druk op piiltje rechts gaat het lcd verlichting uit.
en als ik naar links duw word hij weer steeds lichter.
Wat ik graag zou zien is pijltje naar links in stappen van 8 donkerder
en pijltje naar rechts in stappen van 8 lichter.
heb al een hoop veranderd maar krijg dit niet voor elkaar?
iemand hier een idee voor?

Wat ik nu graag zou willen doen is flash veranderen voor beeper on/off
zodat er kan gekozen worden om een geluidje te horen bij het indrukken van een toets of niet.
iemand hier een idee voor?

ook ga ik nu proberen of ik het menu kan veranderen zodat ik nog een keuze optie er tussen kan zetten.
met als mogelijkheid een relay aan of uit te zetten.
Als ik dit voorelkaar kan krijgen ben ik weer een stapje veder met leren.
Hierdoor gaan er nog meer mogelijkheden voor me open.
Heb namelijk een relay bord met 4 uitgangen.
Deze zou ik dus kunnen gebruiken om de koelwaterpomp aan en uit te zetten.

hier de code hoe ik hem nu heb.
let op dit is een probeer menu geworden.
Waar ik in het een en ander kan bij of weghalen.

bedankt alvast weer mas3

heb hem bijgevoegd als bestand
te groot aan karakters als code :wink:

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (11.2 KB)

Ik heb m nog niet bekeken, maar het is raadzaam om de code na aanpassen naar jouw wensen, een andere naam te geven bij het opslaan.

De dimmer werkt bij mij precies zoals jij beschrijft het te willen laten werken, dus bij mij maakt ie wel stapjes.
Dat gaat wel eens fout, en dat heeft te maken met hoe toets "rechts" werkt (die zit namelijk direct aan GND, en niet met nog een weerstand ertussen), en hoe er gecontroleerd word op toetsdrukken.
Niet alle LCD's laten de dim functie besturen via PWM, waardoor de verlichting aan of uit gaat, maar niet mooi dimt.
Maar omdat omhoog wel goed schijnt te gaan, moet omlaag ook kunnen.

De flash functie is bijna klaar om te dienen als beep, ik heb die namelijk met die mogelijkheid in het achterhoofd erin gemaakt.
Daarvoor hoef je maar heel weinig te veranderen, namelijk het aansturen van een andere pin dan de Dim pin.
De rest daarvan kan zo ongeveer hetzelfde blijven (je kunt ook de lengte van de piep aanpassen).
O ja, je hoeft voor de piep natuurlijk geen huidige waarde te nemen en die te delen door 8, want het piepje is aan of uit.
Je kunt wel experimenteren met een lager volume voor een menu piepje als bij een alarm event.
Ik ga er van uit dat je de pieper ook wil gebruiken om een alarm weer te geven, dus zou je die pin al gedefinieerd moeten/kunnen hebben.

Het is niet erg moeilijk om menu opties toe te voegen, maar wel een beetje werk.
Daarvoor moet je wel wat extra zaken aanpassen, en je bent er inmiddels achter dat weergave van de items en het pijltje twee verschillende zaken zijn.

ja ben er erg blij mee.
Ook dat het zelf lukt.
ben nu met de buzzer bezig.
ook wil ik nu een relay bord toevoegen en kijken hoe ik die kan aansturen.
Het moeilijkste word de pt100 uitlezen en gebruiken.
Ben nu al twee weken aan het zoeken voor een simple code maar niks bruikbaars gevonden.
Wel veel draadjes er over maar niet met een werkend resultaat.
meschien dat ik toch met de dallas sensors aan de gang ga (digitaal)
hou jullie op de hoogte

mvg Rolf

De PT100 is veel simpeler aan te sluiten als een digitale variant, want je kunt m aansluiten als een weerstand.
Maar hij is wel gevoelig voor de juiste polariteit, dus je moet "plus en min" wel goed aansluiten.
De twee rode draadjes hebben hetzelfde signaal.
Het zijn er twee zodat je kunt vaststellen wat het verschil tussen de twee draden is om de nauwkeurigheid te vergroten (doordat je een afwijking veroorzaakt door het draadje kunt meten), maar dat hoeft niet per se.
Als je die compensatie niet wil doen mag je de twee draadjes samen aansluiten, zo heb ik begrepen.

Los daarvan is die ook nog eens veel eenvoudiger in jouw distilleerapparaat in te bouwen.
Dat past er zo in, je hoeft er "alleen maar" een extra invoer voor te maken en die na het insteken van de sensor weer gasdicht te maken.
De sensor zelf is normalerwijze voorzien van een RVS behuizing, je moet zelf nog nagaan of deze ook "food grade" is.

De PT100 is er in veel varianten, en daarom kun je er niet veel eenduidends over vinden.
Je zal van je bron de fabrikant moeten proberen te achterhalen om er zeker van te zijn dat je met passende gegevens gaat werken.
Wat ik gezien heb, is dat er vaak een LM235Z inzit.
Dat ding geeft 10 mV per graad Kelvin.
Kelvin is lineair met Celsius, maar nul celsius is 273,15 Kelvin.
Dat betekent dat je bij kamertemperatuur een waarde van ((273.15 + 20)*0.01) = 2.93 volt hebt, en bij kokend water heb je 3.73 volt.
Dat zijn kleine stapjes per graad.
Je wil waarschijnlijk meten in een ander bereik waarbij de laagste temperatuur hoger ligt dan kamertemperatuur, en de hoogste die een stuk hoger ligt dan 100 graden.
In dat geval zou je wat extra elektronica moeten toepassen zodat de daarbij behorende waardes worden omgezet naar een bruikbaar bereik voor de Arduino.
Je kunt wel tot zo'n 220 graden meten in een bereik van 5 volt, maar dan heb je dus 22000 stappen van je A/D omzetter nodig, en die heb je niet.
Je hebt 1024 stappen, en das inclusief nul.
Het probleem hierbij is dat je elektronica die deze versterking zou gaan doen, waarschijnlijk een grotere afwijking zal hebben dan de sensor.
Maar goed, dan lopen we wel al ver vooruit op de zaken.
Eerst maar eens met zekerheid zien uit te vinden wat je in huis hebt.

Welk temperatuurbereik wil je eigenlijk meten ?

Hoi het is een heel eind gelukt nu.
Ik heb een buzzer kunnen toevoegen in het menu inplaats van flash.
Deze piept nu bij het induwen van een toets deze kan ik ook aan en uitzetten in het menu.
nu is het me ook gelukt om de menu items onder elkaar te zetten (4 regels)
en er een item aan toe te voegen.
zoals hieronder

Ned Pomp
Buzzer
Dim
Exit

nu is het ook gelukt om de cursor netjes over het menu te laten lopen dus ook voor pomp.
Alleen krijg ik het niet voor elkaar om hier een digitale uitgang bij te voegen.
Die ik op hoog of laag kan zetten.
Zodat ik hiermee een relay kan aansturen voor de koelpomp.
Iemand een idee dit op te lossen?

Het temperatuur bereik van de sensors hoeven niet zo hoog te liggen.
Van 5 graden tot max 105 graden.
Het liefst in stappen van 98.1 98.2 98.3 dus met een cijfer achetr de komma.

ik heb de code tot nu toe bijgevoegd als bestand nieuw menu

mvg Rolf

nieuw menu.ino (13.1 KB)

Hoi.

Ik heb je bestand gedownload.
Het bestand kan niet geopend worden omdat je spaties in de naam hebt staan en dat is niet toegestaan.
Daarom heb ik de spatie voor mijn eigen gebruik vervangen door een _ , en nu kan het wel geopend worden.
Je definieert pin 11 voor de buzzer op een voor mij wat vreemde plaats.
Niet zozeer omdat je dat in de loop doet en dus elk rondje opnieuw, maar wel omdat je dat achter een voorwaarde doet.
Die voorwaarde is dat mm (staat voor menu mode) op 1 staat en dat betekent dat het menu niet actief is, en het scherm wel al helemaal in de normale stand staat).
In mm 0 is het menu ook niet actief, maar moet het normale scherm nog gebouwd worden na het verlaten van het menu.
In mm 3 is het menu wel actief maar moet dat menu nog gebouwd worden op je scherm.
En in mm 4 is het menu actief en je scherm opgebouwd.

Ik zou de buzzer pin niet telkens opnieuw definiëren, maar dat globaal doen daar waar de andere zaken ook gedefinieerd zijn.
Dan heb je een Item 6 aangemaakt, maar je hebt 5 menu items en je laat het pijltje ook correct van item 5 naar item 1 gaan.
Dat gaat niet werken, want je gaat op die manier nooit menu item 6 bereiken.
Bovendien heb je daarvoor de dim functie gekopieerd.
Wanneer je hier de pomp mee wil bedienen, zou ik de functie van flash daarvoor kopiëren, of eigenlijk je functie voor de buzzer.
De pomp is namelijk voor je menu niets anders dan je buzzer, maar dan wel op een andere pin en zonder de korte tijd dat je die wil laten gaan, en die korte tijd stel je dus niet in het menu in, maar in het hoofdprogramma.
Dus zou ik naast de pin voor de buzzer, ook nog pinnen voor de pomp(en) en voor je temperatuursensoren reserveren, en ik zou dat net onder de andere reserveringen doen.
Dan nog voor je pomp een waarde om bij te houden of die al ingeschakeld is of niet, zodat je die bij een volgende ronde kunt aanpassen, maar ook wanneer je hoofdprogramma besluit de pomp in of uit te schakelen.
Dan kun je het menu stukje voor de buzzer kopiëren naar item 5 en daar aanpassen zodat het je duidelijk is dat het daar om de pomp gaat.
Het echte in- of uitschakelen van de pomp zou ik dan weer in het hoofdprogramma doen, en dus verder onafhankelijk van het menu, maar wel beïnvloedbaar door dat menu.
De uitdaging daar ligt er dus in dat je dat stapje altijd doet, en dus onafhankelijk van de waarde van mm (dat is ook hetzelfde als de buzzer).

Houd er verder rekening mee dat je de commentaren ook bijhoud.
Haal niet (meer) kloppend commentaar ook weg, anders is dat alleen maar verwarrend.

Weer een stukkie om aan te werken, succes.

heb het menu nog even opgeruimd.
Ik krijg alles voor elkaar alleen niet als ik in het menu pijl naar rechts of links gebruik.
Zodat pin 7 hoog of laag word.
Ik heb de laatste keer geprobeerd als in de code die ik toevoeg als bijlage.
Ik heb op digital uit 7 een ledje zitten en naar de massa dit moet toch kunnen de led is heel :wink:
Wie kan mij helpen?

mvg rolf

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (12.1 KB)

homedistiller:
Ik heb op digital uit 7 een ledje zitten en naar de massa dit moet toch kunnen de led is heel :wink:

Kan zijn, maar niet voor lang (!).
Als je een LED aansluit op een digitale uitgang zonder een weerstand te gebruiken (en je hebt niet gezegd dat je dat gedaan hebt, dus heb je het niet), blaas je je LED op, en ook je processor.
Dus als de donder een weerstand er tussen voor je verder experimenteert !

Je stuurt nu zowel HIGH als LOW naar pin 7.
Daarvoor kijk je eerst naar de waarde genaamd Pomp, om te zien of die groter is geworden dan de door jou gewenste waarden en als dat wel zo is, zet je m er weer binnen.
Dat heb je op dezelfde wijze gedaan als ik eerder ook deed, en moet dus werken.
Vervolgens doe je een handeling op pin 7 en die handeling doe je altijd (!).
Je schakelt altijd de pomp in door de uitgang hoog te maken, en je schakelt m ook altijd weer vrijwel direct weer uit, dat is nergens van afhankelijk.
Dat inschakelen duurt zo kort dat het onmogelijk is voor jouw ogen om m te zien oplichten, maar dat doet ie wel.
Je schijnt te denken dat wanneer alles op 1 regel staat, het direct achter elkaar word uitgevoerd.
Maar dat is niet zo.
Als je meer dan 1 commando binnen een if... wil uitvoeren, moet je de acties die uit te voeren zijn opsluiten in {accolades}.
Dat had je ook uit de voorbeelden kunnen halen en deze accolades zijn dus ook een erg belangrijk deel van het programmeren.
Bij de IDE is de ; puntkomma een regeleinde, en niet de LF/CR (wat er gebeurt als je op de enter toets drukt).
Als je zeker weet dat je een fantastische programmeur bent die geen fouten maakt, kun je bijna alles op 1 regel zetten met veel puntkomma's er in (maar das lekker toch niet echt zo).

Nogmaals, je wil controleren welke waarde je instelt met je links/rechts toetsen, en uit die controle ga je de conclusie trekken dat je een bepaalde waarde op pin 7 moet zetten.
Dat is onnodig ingewikkeld.
Want je had er al voor gezorgd dat de waarde van Pomp alleen 0 of 1 kan zijn.
Daarom kun je volstaan met helemaal boven in void loop() te starten met de pomp in de gewenste waarde te zetten.
En die gewenste waarde, is die die al beschikbaar is in de variabele Pomp.
Dus als een van de eerste regels in void loop() kun je dan zetten:

digitalWrite(7, Pomp);

Bijkomend voordeel hiervan is dat je ook nog eens de pomp aan het begin van het uitvoeren van je programma uit schakelt, en niet ergens halverwege.
Als je dat ergens halverwege pas doet, zul je er nooit zeker van zijn dat bij het opstarten van je schakeling de pomp niet heel even per ongeluk word ingeschakeld.

Je schakelt nu ook binnen het menu en niet er buiten, dat zou ik niet doen om het aantal malen schakelen per rondje niet onnodig hoog te maken zoals je uit bovenstaande kunt zien.

net een heel stuk geschreven alles weg

Wat een ...

Nu maar nog eens alleen wat beknopter

Ik ben nu nog steeds aan het proberen om een digitale uitgang hoog of laag te krijgen.
Ik heb alle mogelijk heden geprobeerd maar zie niet hoe het moet.
Ik heb het laatste commentaar van Mas wel 10 keer door gelezen.
Maar krijg het niet voor elkaar.

Wie kan me helpen met dit stukje in de code

if ((Item==5)&&(key==0)) Pomp++;                      
if ((Item==5)&&(key==3)) Pomp--;                      
if ((Pomp)>1)Pomp=0;                                  // zelf bijgevoegd om de arrow naar pomp te sturen en een actie uit te voeren.                                  
if ((Pomp)<0)Pomp=1;

Dus ik wil als ik op Pomp sta in het menu (item==5)
en knop links of rechts digitaal pen 7
op hoog of laag kunnen zetten.

Ik heb het stukje code wat mas gebruikt bij exit
op item 5 gezet
en dan gaat hij netjes terug naar het begin.
Dus item 5 kent hij en klopt ook met de set cursor op die positie.

Heeft er iemand misschien een stukje code die ik zou kunnen gebruiken hiervoor.
En een stukje uitleg.
Want ik ben het een beetje kwijt.
Wil ook graag weten wat ik doe.

Wel vind ik de opmerking van Mas wel heel goed om de uitgang op 7
veilig te stellen zodat de pomp niet eerst per ongeluk eerst gaat draaien.
Wanneer dit niet gewild is.
Is dit bij mij niet een heel groot probleem
Maar wel een belangrijk punt is om inderdaad op te letten.

homedistiller:
Wie kan me helpen met dit stukje in de code

if ((Item==5)&&(key==0)) Pomp++;                      

if ((Item==5)&&(key==3)) Pomp--;                     
if ((Pomp)>1)Pomp=0;                                  // zelf bijgevoegd om de arrow naar pomp te sturen en een actie uit te voeren.                                 
if ((Pomp)<0)Pomp=1;





Dus ik wil als ik op Pomp sta in het menu (item==5)
en knop links of rechts digitaal pen 7
op hoog of laag kunnen zetten.

Ik heb het stukje code wat mas gebruikt bij exit
op item 5 gezet
en dan gaat hij netjes terug naar het begin.
Dus item 5 kent hij en klopt ook met de set cursor op die positie.

Heeft er iemand misschien een stukje code die ik zou kunnen gebruiken hiervoor.
En een stukje uitleg.
Want ik ben het een beetje kwijt.
Wil ook graag weten wat ik doe.

Hoi weer.

De code heb je al en hoef je dus niet van iemand anders te krijgen.
Maar je moet de tel niet kwijtraken, en dat is hier denk ik wel gebeurd.
Want je gaat dus zoals je zelf zegt naar Item 5.
En dan ga je controleren of er op pijltje links of rechts gedrukt word.
Maar dat doe je niet bij Item 5, want daar wil je op enter drukken om het menu te verlaten.
Het verlaten van het menu zal je dan nu ook niet lukken.
Wat je hebt die twee nog niet ontrafeld, in ieder geval niet in de laatste sketch die ik gezien heb.
Bij mijn check heb ik dus ook niet goed opgelet, omdat ik dat over het hoofd heb gezien.
Je controleert daar bij Item 4 of er op enter word gedrukt zodat het menu verlaten word.
En bij Item 6 of er op pijltjes word gedrukt zodat je de motor kunt starten.
Dat moet je dus nog aanpassen.
Maar als je nu bij Item 4 (Pomp) op enter drukt en bij Item 5 (Exit) op links/rechts, dan werkt waarschijnlijk je virtuele pomp wel en verlaat je het menu ook..
Je moet ook nog even kijken of je niet 2 keer naar Item 5 kijkt want je verhaal hierboven doet dat vermoeden wel rijzen.
Als dit verhaal niet klopt met je huidige sketch en je er nog niet uitkomt, graag de meest actuele sketch plaatsen.

Hoi weer.

Ik zal het even uitleggen.
Pomp is nu de laatste keuze in het menu.
is geen probleem deze kan ik verplaatsen binnen het menu.
Weet dan ook dat ik rekening moet houden met tellen.
En dat ik dit in de code moet veranderen.

Ik voeg het laatste code bij en zou graag willen of je hier even na zou willen kijken.
Wat nu niet lukt is het volgende
als ik met de pijl voor de menu optie Pomp ga staan.
(Dit gedeelte werkt nog)
Dan zou ik met de toets rechts of links de Pomp willen aanzetten of uitzetten.
b.v: toets naar rechts Pomp aan voor onbepaalde tijd
toets naar links Pomp uit voor onbepaalde tijd

Dit gedeelte krijg ik niet voor elkaar.
Ik heb het op meerdere manieren geprobeerd maar nog geen oplossing kunnen vinden.
Ik heb in de code voor comentaar 4x //// gebruikt waar ik nog aan twijfel of graag extra uitleg over zou willen hebben.
Hoop dat je me hier mee wilt en kunt helpen.

bedankt voor de tijd die je hiervoor instopt
mvg Rolf

p.s
Later wil ik het menu nog helemaal veranderen alleen wil ik dit ook begrijpen.
Vandaar het proberen van meerdere dingen binnen in het menu.
Ik wil later ook nog monitoren van temperatuur en instellen van waardes in een menu voor schakelingen.

mvg Rolf

laatste_menu_tot_nu_toe (2).ino (13.4 KB)

Hoi.

Ik heb er even naar gekeken, en het volgende gezien:

Je hebt nog niets gedaan met wat ik in antwoord nummer 20 heb verteld, dat heb ik nu aangepast.

Het toegevoegde Item, is binnen de afhandeling van Item 4 blijven hangen.
Doordat je m direct achter Item 4 had gezet, maar nog binnen de { } accolades van Item 4, kijk je dus eerst of je op Item4 zit, om dan te kijken of je ook op Item 5 zit.
En dat kan natuurlijk nooit.
Het is heel belangrijk dat je weet dat alles wat je wil doen na een if.. controle, tussen de { }staat (tenzij je maar 1 ding wil doen want dan heb je de { } niet nodig).
Ik heb je sketch aangepast, maar niet getest.
Wel heb ik gekeken of de IDE m ook wil compilen en dat gaat goed.

Ik heb ook een opmerking gemaakt over een onnodige if (mm == 3).
Dat is ook een onnodige controle die ik zelf in mijn menu heb gestopt.
De reden dat dat er in zit, is dat ik het behandelen van de menu Items en het plaatsen van de pijl apart gehouden heb.
Je ziet ook dat eerst de plaats van de cursor/pijl word bepaald, vervolgens de pijl altijd op die plaats word afgebeeld, en dat daarna pas de Items behandeld worden.
Dat werkt goed, en heb ik daarom nu niet veranderd (maar dus wel een opmerking voor mezelf er over gemaakt).

Verder heb ik ook een beetje de commentaren op een rijtje gezet, want dat leest veel gemakkelijker.
De nieuw toegevoegde commentaren zien er uit als // << .
En wat vragen van je in de commentaren beantwoord.

Ben benieuwd of het nu wel werkt zoals je in gedachten had.

Edit: Nog iets gezien in de sketch en dat ook nog aangepast (en hier genoemd).

distiller_3.zip (4.94 KB)

Hoi Mas

Het werkt nu!
Nu ik het bekijk is het ook logies.
Alleen heb ik er telkens over heen gelezen.
Ook ben ik nog maar een beginnende arduino kenner

Ik ben nu bezig om het menu naar mijn zin te maken.
Dus de tekst wat aangepast en de indeling.
Dit is nu klaar.

Ook heb ik nu een echte toets toon toegevoegd.
Die ik ook van toon kan veranderen in de code.
Dit werkt nu ook.

nu komt het moeilijkste van alles.
Alles opnieuw maken met de rest van mijn wensen er in.
en nog een hoofd menu
in het hoofd menu wil ik dit menutje onder opties zetten.

Dus kort omschreven wat ik nu als doel heb:

stroom aan.
print op eerste regel WELKOM in het midden
delay 4 sec
Print op tweede regel VEEL PLEZIER MET
delay 2 sec
Print op derde rij DISTILLEREN
delay 3 sec
clear display
print op tweede rij in het midden AUTOMATIC STILL
delay 2 sec
Print op de 4 rij V.1.0 Press
(Dit gedeelte is af en werkt)
Als je nu op ok duwt wil ik naar een hoofdmenu gaan met drie opties/keuzes


MAAK EEN KEUZE
HANDMATIG AUTOMATISCH
OPTIES


onder OPTIES wil ik nu het bestaande menu weergeven


NED TAAL
TOETS TOON
HELDERHEID LCD
POMP TEST EXIT


Als je kiest voor EXIT Moet je weer in het hoofd menu komen.
Kies je voor FRA TAAL gaat hij terug naar de begin tekst alleen nu in het frans en het menu ook in het frans. (Dit wil ik als laatste doen)
de rest van het OPTIE menu werkt!

als ik kies voor HANDMATIG in het hoofd menu.
Wil ik hier een nieuw menu toevoegen


WATERKOELING I
I_________________________
AAN UIT I I
I I
___________________________ I
I V
V AAN I UIT
I I
______________________________ I
IS ER VOLDOENDE I I
KOELWATER AANWEZIG? I I
INDIEN NODIG AANVULLEN I I
press OK I I
I I
I pomp aan I
I
_____<_____
I
I


volgende actie of vraag

Dus als iemand ideen heeft voor het volgende stukje?
Hoor ik het graag

de nieuwste code staat hieronder Tot waar ik nu ben en met alle veranderingen

mvg Rolf

distiller_4.ino (17.5 KB)

Zo ben weer een stukje veder.

Ik heb de hele code nog eens nagelopen.
En gelijk ook even opgeschoond.
Ik heb het gedeelte om de taal te veranderen,
uit het menu en uit de code gehaald.

Ook gelijk de indeling weer netjes onder elkaar gezet.
Nu is het dus zo:

TOETS TOON
HELDERHEID LCD
POMP TEST
EXIT

Ook heb ik het nu voor elkaar dat als ik voor EXIT kies.
Dat hij nu netjes naar het nieuwe hoofdmenu gaat.
Dat ziet er nu zo uit:

HANDMATIG
AUTOMATISCH
OPTIES

Allen loop ik nu tegen twee problemen aan.

1:
Als ik het programma nu opstart gaat hij naar het menu OPTIES.
In plaats naar het nieuwe hoofdmenu.
Dit is nu geen probleem.

2:
Nu wil ik het gedeelte gaan maken dat de ARROW
Weer voor de menu items komt te staan.
Alleen als ik het stukje code na het nieuwe menu zet:

if (mm == 1) {
  lcd.clear();                                                // Nieuw stuk
   
    lcd.setCursor(1,0);
    lcd.print("HANDMATIG");
    lcd.setCursor(1,1); 
    lcd.print("AUTOMATISCH");
    lcd.setCursor(1,2); 
    lcd.print("OPTIES");

Dus deze code

 if (mm ==3){ 
  switch (Item){;                                          // I love the switch ... case statement
case 1:{ 
  lcd.setCursor(x,y);                                   // Because we registered a keypress to an other Item, we reset the cursor to the last position
  lcd.print(" ");                                             // And erase it by printing a space over it
  y=0;                                                          // After erasing the arrow, we can now set the pointer to the new position
  x=0;                                                          // Remember counting starts at zero
  break;
}                                                                  // << Sluit case 1
case 2:{
  lcd.setCursor(x,y);
  lcd.print(" ");
  y=1;
  x=0;
  break;
}                                                                  // << Sluit case 2
case 3:{
  lcd.setCursor(x,y);
  lcd.print(" ");
  y=2;
  x=0;
  break;
}                                                                  // << Sluit Case 3

wil ik hierachter zetten
Om de cursor weer zichtbaar te krijgen.

Krijg ik de foutmelding:

a function-definition is not allowed here before "{" is token.
Wat ik ook probeer krijg elke keer een melding dat de {} niet goed staan

Wat doe ik verkeerd?
Zal de nieuwste code toevoegen.

distiller_5.ino (15.2 KB)

Ik heb je sketch gedownload en bekeken.
Deze sketch geeft geen fouten als je m compileert (maar hij zal ook niet goed werken).
Dus het is niet de sketch waar jij je probleem mee had.

Wat gebeurt er van regel 139 tot regel 143 ?

Als je de code exact zo hebt geplakt als je nu hebt weergegeven, dan mis je inderdaad een }.
Dat is degene die hoort bij de if (mm == 3).
Dus als je onderaan nog deze regel toevoegt:

  }                                       // Sluit de if (mm == 3)

Zou het volgens mij weer ok moeten zijn.

Verder moet je ook opletten dat je mm goed controleert en aanpast aan waar je in het echt bent.
Want als je nu twee menu's maakt dan ben je dus niet altijd in mm == 3.
Zoals je hebt gezien, heeft elk menu bij mijn voorbeeld 2 stappen.
In de eerste stap word het menu afgebeeld ("gebouwd").
In de tweede stap word het menu bediend.
Jij kunt dus verder gaan op die wijze door het aantal geldige waarden voor mm te vergroten en daarvan afhankelijk iets te doen.

Op dit moment gebeurt er helemaal niets met mm == 0, behalve dat mm dan meteen naar 1 word gezet.
In het begin, als de variabele word gedefinieerd word ie ook al op 1 gezet.
Dus als dat zo moet blijven, kun je ook achterwege laten hem ooit op 0 te zetten.
Maar ik denk niet dat dat je bedoeling was.
Wat je hebt staan bij mm == 1, is vergelijkbaar met wat ik bij mm == 0 had staan, namelijk het opbouwen van de tekst op het scherm.
Bij mijn mm == 1 word dan het menu afgehandeld met het pijltje en dergelijke, en daarbij hoeft dan niet dat menu telkens opnieuw opgebouwd te worden.
1 van de redenen daarvoor is dat dat opbouwen langzamer gaat als de rest van de handelingen.
Niet voor je Arduino, maar wel voor je scherm.
De Arduino is dan dus allang verder als je scherm nog bezig is met het (telkens weer) tekenen van de letters.
Dat zal resulteren in een knipperende tekst terwijl dat op de manier waarop ik het heb gemaakt dus niet hoeft.

Ik hoop dat je weer een stap verder komt.