hulp gevraagd voor arduino regelunit voor distilleer apparaat

Hoi Rolf.

Dan wonen wij niet erg ver uit elkaar.
Heel goed wat je al bereikt hebt, thumbs up !
Je hebt nu dus werkende knoppen en dat zie je aan de hand van een sketch die je hebt gedownload en aangepast naar jouw hardware (andere weerstanden).
Het is alleen niet te zien in de code die je nu hebt, wat daaraan jouw bijdrage is, en wat je van elders hebt.
Er is wel een berg commentaar te zien, maar ik vermoed dat dat er al in zat.
Ik raad je aan om elke aanpassing die je doet, te voorzien van commentaar.
Dat is handig voor jou in de toekomst, en vertelt ons wat meer over wat je allemaal aan het doen bent (hopelijk).

Stap 1 heb je nu zo te zien afgerond.
Ik denk dat stap 2 is om op het display een indeling te maken die je ook kan aanhouden als je menu actief is, en dat kan best ingewikkeld zijn.
Daarvoor kun je je display onderverdelen in denkbeeldige vakjes.
Bijvoorbeeld 4 regels met 2 kolommen van 8 tekens elk.
Je hebt in werkelijkheid natuurlijk 10 tekens, maar hier word al rekening gehouden met een menu dat je wil maken.
Op het moment dat je op de menu knop drukt, zou je dus deze indeling tevoorschijn halen.
Je hebt op deze manier dus 8 menu items.
Het laatste item in dit menu is dan "Terug" of "Exit" om weer uit het menu te komen, of "Volgende" of "Next" om naar een eventueel volgend menu scherm te gaan.
Je kunt een item markeren door er een > voor te zetten.
Ik weet niet of je zo'n item ook kunt markeren door het te inverteren, heb ik zelf nog nooit geprobeerd.
Het ligt er aan wat je met je menu wil, je kunt op enter drukken om iets te gaan bewerken (in een nieuw scherm), of de waarde met links/rechts aanpassen als de > voor de betreffende waarde staat.

Ik zou je nu aanraden om een test menu te maken, waarbij je waardes of teksten op vaste plaatsen van het scherm plaatst.
Je houdt daarbij dan rekening met de ruimte om de > ervoor te plaatsen zonder dat de indeling van je scherm overhoop raakt.
Trefwoord hiervoor is: setCursor
Je moet er dan dus ook rekening mee houden dat je niet meer ruimte gaat beschrijven op je scherm dan er beschikbaar is, want ook dan word het een zooitje.

Voor mezelf heb ik afgelopen weekend een vergelijkbare oefening gemaakt waardoor ik 3 variërende waardes op een vaste plaats op mijn 1602 schermpje zet (daar komt geen menu aan te pas).
Zoals je wellicht aan de tijd van deze posting ziet, ik ben nogal druk met mijn werk en ga zo direct dus slapen.
Morgen verwacht ik weer minimaal 12 uur aan het werk te zijn, en van t weekend is het ook beide dagen raak.
Maar er is hier genoeg kennis aanwezig om je te helpen met je vragen, mochten die rijzen.

Je kunt een zoemertje aansturen op dezelfde manier als het LEDje in de "blink" sketch, das nogal eenvoudig.
Je kunt het zoemertje ook laten gaan als er word geregistreerd dat er op een knop word gedrukt.
Het word al interessanter als je dan het zoemertje alleen maar even kort wil laten piepen en niet zolang het knopje word ingedrukt.

Omdat je al een heel project in het hoofd hebt, is het raadzaam om goed bij te houden wat je allemaal wil doen en/of al gedaan hebt.
Daarom zou ik zeggen: pak een stuk papier en zet daarin je project in stappen op.
Ik raad iedereen altijd aan om de stappen steeds kleiner te maken.
Dan zijn de problemen die je moet oplossen ook kleiner (over het algemeen klopt dit), waardoor je door deze problemen een voor een op te lossen, je je totale project realiseert.
Omdat papier geduldig schijnt te zijn, kan dat een heel handig hulpmiddel zijn.
Op dat papier houd je ook een overzichtje van hoeveel en welke variabelen je allemaal gebruikt.

Zo, nu ga ik slapen.
Mocht je nog iets missen, gewoon vragen.
Succes met je volgende stappen.

Hoi mas3

Bedankt voor je uitleg
ik ben hier vandaag veder mee gegaan.
Ik heb even op papier gezet wat je voorstelde met 4 lijnen 8 kollomen.
ik heb ook gelijk gelezen op google over setCursor.
en daarmee aan de gang gegaan.

nu heb ik hiermee een simple code gemaakt om een menu indeling te krijgen.
hier de code:

/* ------------------------------------------------------------------------------- */

// 20x4 lcd met menu indeling
// deze code set alleen het menu neer op de juiste plaats.
// hiervandaan veder werken.

#include <LiquidCrystal.h>

// aansluiting lcd op arduino:
// rs (LCD pin 4) naar Arduino pin 12
// rw (LCD pin 5) naar Arduino pin 11
// enable (LCD pin 6) naar Arduino pin 10
// LCD pin 15 naar Arduino pin 13
// LCD pinnen d4, d5, d6, d7 naar Arduino pinnen 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2);



void setup()
{
  
 
  lcd.begin(20,4);              // Hier geef je aan wat voor lcd er gebruikt word b.v: 20x4
  lcd.clear();                  // Start met een leeg scherm
  lcd.setCursor(2,0);           // zet cursor naar kollom 0, rij 2 (eerste rij vakje 3?
  lcd.print("MENU 1");          // zet tekst "MENU 1" Neer.
  lcd.setCursor(2,1);           // zet cursor naar kollom 1, rij 2 (tweede rij vakje 3?
  lcd.print("MENU 2");            
  lcd.setCursor(2,2);         
  lcd.print("MENU 3");          // voorbeeld van het menu 
  lcd.setCursor(2,3);           
  lcd.print("MENU 4");          //  MENU 1      MENU 5
  lcd.setCursor(12,0);          //  MENU 2      MENU 6 
  lcd.print("MENU 5");          //  MENU 3      MENU 7
  lcd.setCursor(12,1);          //  MENU 4      EXIT
  lcd.print("MENU 6");
  lcd.setCursor(12,2);          // het menu ziet er nu uit op het lcd zoals hierboven afgebeeld.
  lcd.print("MENU 7");
  lcd.setCursor(12,3);
  lcd.print("EXIT");
 
}

void loop()
{
} 

/* ------------------------------------------------------------------------------- */

Ik heb er voormij zelf comentaar bijgezet.
Dit heb ik gedaan om het zelf ook te begrijpen.
Wat ik wel raar vind is als ik zeg setCurser(2.0); dan set hij het eerste letter op vakje 3 van regel 1
weet dat nul regel 1 is maar als ik dan zeg 2 zet hij de eerste letter op het derde vakje van de 20?

ik ga nu proberen om de code die ik had gemaakt voor de knop herkenning in dit menu te zetten.
Hou jullie op de hoogte!!

homedistiller:
Ik heb even op papier gezet wat je voorstelde met 4 lijnen 8 kollomen.
ik heb ook gelijk gelezen op google over setCursor.

Nou, dat was dus 4 lijnen en 2 kolommen en dus 8 items.
Dat heb je zo ook in je code gezet als commentaar.

In die code heb je het over kolommen en dat knoop je aan de setCursor functie.
Maar setCursor kent geen kolommen, die moet je zelf creëren en vertalen naar wat setCursor wel kent.

  lcd.setCursor(2,0);           // zet cursor naar kollom 0, rij 2 (eerste rij vakje 3? <- correct !
  lcd.print("MENU 1");          // zet tekst "MENU 1" Neer.
  lcd.setCursor(2,1);           // zet cursor naar kollom 1, rij 2 (tweede rij vakje 3? <- correct !
  lcd.print("MENU 2");            
  lcd.setCursor(2,2);         
  lcd.print("MENU 3");          // voorbeeld van het menu 
  lcd.setCursor(2,3);           
  lcd.print("MENU 4");          //  MENU 1      MENU 5
  lcd.setCursor(12,0);          //  MENU 2      MENU 6 
  lcd.print("MENU 5");          //  MENU 3      MENU 7
  lcd.setCursor(12,1);          //  MENU 4      EXIT
  lcd.print("MENU 6");
  lcd.setCursor(12,2);          // het menu ziet er nu uit op het lcd zoals hierboven afgebeeld.
  lcd.print("MENU 7");
  lcd.setCursor(12,3);
  lcd.print("EXIT");

Wat ik wel raar vind is als ik zeg setCurser(2.0); dan set hij het eerste letter op vakje 3 van regel 1
weet dat nul regel 1 is maar als ik dan zeg 2 zet hij de eerste letter op het derde vakje van de 20?

Nul is het eerste getal.
Dat geldt voor de regels, maar ook voor de positie op die regel (en vanaf nu voor alles).
Dus je hebt dan niet een bereik van 1 tot en met 20, maar van 0 tot en met 19.
De code die je hier gemaakt hebt klopt dus precies.
Zet voor de gein eens alleen een teken op positie 20 van regel 1 op je scherm, en kijk eens waar die dan terecht komt..

Tipje voor het symbooltje dat je gebruikt om aan te wijzen welk menu item actueel is (ik had het over het symbooltje ">").
Probeer eens met je pijltjes omhoog en omlaag op en af te tellen.
Daarbij kun je nooit lager dan positie 0 en nooit hoger dan positie 7 komen.
Je kunt wel overwegen om van positie 7 naar 0 te gaan en van 0 naar 7.
Verder moet je niet vergeten dat als je pijltje omlaag drukt, je een regel hoger wil uitkomen vanuit het oogpunt van setCursor.
Als je dat tellen bijhoudt, dan weet je ook welk menu item er gekozen is als er op enter of op links of rechts gedrukt word.

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)