ZUID:
Even een antwoord op de EEPROM.get in de setup.
Ik had me niet gerealiseerd dat je met een knop de ingestelde waarde naar de EEPROM stuurt.
Als je het voordeel wil krijgen van "instelling komt terug op de laatst ingestelde waarde" bij een herstart van de Arduino moet je de EEPROM.put elke keer als de waarde is aangepast uitvoeren. Herstel dus ook na stroomstoring en niet thuis, anders gaat hij naar 18 graden.
Ik begrijp je niet helemaal.
-> Als ik nu de stroom van mijn arduino trek en weer aanzet, is mijn laatst ingestelde waarde (tempSet)(bijvoorbeeld 23.0 graden) te zien op de temperatuursettingpagina achter "Huidige set temp" (Huidige set temp: 23.0).
-> Die waarde blijft daar staan, totdat ik een nieuwe temperatuur selecteer (bijv. 24.5 graden) en op mijn 'save' knop druk, dan verschijnt de nieuw ingestelde temperatuur als tempSet (Huidige set temp: 24.5 graden).
-> Bij eerste keer openen van de temperatuursettingpagina, na opstarten van de arduino, is de laatste opgeslagen temperatuur (24.5 graden) mijn startwaarde van waaraf ik mijn nieuwe temperatuur instel (tempNew = EEPROM.get(0, configuration.tempSet).
-> Stel, ik stel dan de temperatuur (tempNew) in op 26.0 graden, maar save niet. Als ik dan vanuit mijn temperatuursettingpagina terugga naar het settingsmenu, van waaruit ik ook naar een pHsettingpagina kan, of terug ga naar het homescreen en dan opnieuw mijn temperatuursettingpagina inga, dan staat de "Huidige set temp: 24.5 graden", maar de nieuwe temperatuur staat nog op 26.0 graden.
Ik zou dan willen dat de nieuwe temperatuur ook weer op 24.5 graden staat, maar zie niet hoe ik dit moet doen. Misschien praten we volledig langs elkaar heen hoor ![]()
Het nut van de opslag zoals nu geprogrammeerd met knop zie ik nog niet.
Voor de relais is het ook niet echt nodig de ingestelde temperatuur en andere variable zijn voor het hele programma ook zonder EEPROM beschikbaar.
EEPROM is m.i alleen nuttig om ook na stroomonderbreking alle relevante variable nog beschikbaar te hebben.
Het is inderdaad juist vanwege een eventuele stroomonderbreking dat ik de EEPROM wil gebruiken. Ik denk dat het uit veiligheidsoverwegingen voor mijn vissen essentieel is dat bij een stroomonderbreking de in de EEPROM.put() ingestelde temperatuur/pH gebruikt worden. Anders zou bij stroomonderbreking de verwarming bijvoorbeeld niet aangaan (want tempNew = 18), of de pH veel te laag omdat mijn CO2 continu aan blijft staan (ook 's nachts) -> naast dat een lage pH op zichzelf schadelijk kan zijn is er ook de kans op vergiftiging/onvoldoende zuurstof. Dan kan ik snel een nieuw vissenbestand uitzoeken
Heb het 1 keer gehad toen mijn tijdschakelaar niet goed werkte (of ik niet goed had ingesteld) en de enige die het overleeft hadden waren mijn labyrinthvissen (die ook lucht happen om te ademen) en slakken...
Overigens was de tempNew = 18 enkel als startwaarde in de temperatuursetuppagina. Nu ik die startwaarde oproep vanuit EEPROM.get() is tempNew = 18 overbodig geworden en kan volgens mij gewoon "float tempNew" worden. Bij een stroomonderbreking blijft de verwarming dan juist aan, omdat tempNew geen waarde heeft? Gekookte vissen? ![]()
In de zomer werk ik vaak vanaf locatie en ben dan enkel in het weekend thuis. Eten geven kan m'n vriendin wel 1 of 2x keer doen, maar dingen als dit hou ik liever zelf in de hand. Of iemand haalt per ongeluk de stekker eruit en doet hem er daarna weer in met het idee dat het dan weer gewoon werkt.... maar...alle instellingen foetsie. Nee, dat wil ik niet riskeren.
Ik heb eerder al een testsetup gemaakt met een relay die afhankelijk van de temperatuur een led aan/uit liet gaan. Gewoon om te kijken hoe het relay zelf werkt en hoe de code ervoor in elkaar zit. Ik weet dat het voor het relay zelf niet nodig is de waarde uit EEPROM te halen. In principe kan ik tempNew gewoon gebruiken als thresholdvalue.
PM Gaat dit wel goed? Moet || geen && zijn ( 28 is ook groter dan 20)
Je ziet het niet want met de volgende if wordt het weer overschreven
if (tempNew >= 20 || tempNew <= 27)
{
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.setFont(Various_Symbols_32x32);
myGLCD.print("T", 235, 120);
}
Nee, scherp! Bedankt, moet inderdaad && zijn. Heb dit ook geprobeerd met while (tempNew >= 20 || tempNew <= 27)/else, maar dat lukte niet, dus maar 2x een if. Zullen vast meer dingetjes zijn die efficienter kunnen ![]()
[edit]
Als er && staat kan hier ook de EEPROM.put komen.
Had dit gemist en heb het nog even geprobeerd. Dan schrijf ik elke keer als ik de temperatuur met 0.1 verhoog/verlaag naar EEPROM.put. Mijn save-button is dan ook niet meer nodig. Inderdaad als ik dan mijn temperatuursettingpagina verlaat en weer terugkom, staat hij op de laatst gesavede waarde. Maar wat dit doet ten opzichte van mijn vorige code is dat mijn gesavede waarde steeds veranderd ipv dat bij het opnieuw bezoeken van mijn temperatuursettingpagina de startwaarde van de temp de laatst gesavede waarde is. Verkeert om dus eigenlijk, haha!
Ik mis dan echter de informatie over mijn vorige ingestelde temperatuur. Bijvoorbeeld voor nabootsen van paaiseizoen wil ik kunnen zien met hoeveel ik verhoog ten opzichte van de vorige instelling en niet gelijk de nieuwe waarde als instelling hebben. het zien van de vorige instelling maakt het experimenteren en zoeken naar de juiste temperatuur en pH om paaigedrag te triggeren wat makkelijker.