Go Down

Topic: hulp gevraagd voor arduino regelunit voor distilleer apparaat (Read 46 times) previous topic - next topic

MAS3

Zo, ben er dus weer een tijdje mee bezig geweest.
Ik denk dat het menu nu gerepareerd is.
Ik ben nu niet thuis dus kan niet even de code in mijn Uno zetten om te testen.
Daarvoor zou ik een aantal regels moeten aanpassen die te maken hebben met een ander display (1602) en mogelijk andere toetswaardes, maar omdat je menu nu nog klein is zou dat verder wel moeten werken.
Probeer de bijgevoegde sketch nog maar eens om te zien hoe het nu is.

De belangrijkste verandering is het verplaatsen van de regel die "3" afsluit (nu op regel 63).
Ik vermoed dat je lastige toetsverwerking kwam doordat er dus dingen door mekaar liepen.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Geweldig!!

Heb hem net geprobeerd en het werkt!!
Het display is nu ook veel stabieler en het knippert ook niet meer met  het intoetsen van de knoppen.
Er zitten nog twee kleine foutjes in.
1
Als ik nu in het menu Distilleren/Instellingen ben.
En ik kies voor optie 2 INSTELLINGEN en ik druk normaal op de  OK toets.
Dan gaat hij naar het menu INSTELLINGEN en gelijk weer terug naar menu 2  DISTILLEREN-INSTELLINGEN.
Dit gaat uiteraard zeer snel en haast niet te zien.
Druk ik de toets OK nu heel snel in dan werkt het wel en komt hij in het volgende menu Instellingen (mm=4).
En dan is het goed.

2

het tweede probleem is en dat was de vorige keren ook zo.
Is dat wanneer ik nu in menu mm=4 ben (instellingen)
en ik druk op de ok toets gaat hij weer terug naar het menu distilleren/instellingen.
Dit wil ik er eindelijk uit hebben.
Omdat ik in het volgende menu (mm=4)
weer andere opties wil invoegen.
en ik wil alleen terug naar het begin menu distilleren / instellingen
Als ik hier een keuze voor maak.
Hoop dat je dit begrijpt wat ik hier mee bedoel.

De commentaren die je bij de code hebt gezet hebben me nu een hoop geleerd.
Dit was net de info die ik miste om sommige dingen te begrijpen mijn dank hiervoor.

Ik hoop dat ik vanaf nu wat makkelijker het menu kan opbouwen door je commentaren.

Ik hoop dat je samen met mij eerst de andere twee foutjes wilt oplossen.
Voordat ik veder ga met het menu opbouwen.
Zodat ik zonder problemen veder kan gaan stap voor stap.
En dat ik dit hier dan kan posten.
Kom ik dan een fout tegen of iemand anders.
Kunnen we hierop gelijk inspringen
En leer ik hier het meest van.

Ik denk dat het probleem met het terug keren naar het begin menu .
Te maken heeft met de eerste optie van de code.
Waarin er eerst ok geselecteerd moet worden, om met het menu te beginnen.
PRESS OK

Ik denk dat hij dit stukje constant mee neemt in de loop en hierdoor eindelijk de twee foutjes ontstaan.
Wat denk jij daarvan=

Alvast bedankt voor deze hulp in het oude jaar.
En vooral voor het goed beginnen in het nieuwe jaar met dit projeckt!!

groeten Rolf



homedistiller

Zie net dat dit draadje als tweede
het meest word gelezen!!
Zijn er hier dan zoveel stokers

MAS3

Ik had ook al gezien dat dit veel gelezen word.

Dat je display nu niet meer knippert, is precies waarom ik het menu in 2 stappen doe.
Dat is dus eerst het menu afbeelden, en dan de bediening van dat menu zonder het hele scherm te wissen en weer opnieuw te schrijven (dat is een wat uitgebreidere manier om te zeggen "hij knippert").
Dat gebeurde de laatste keer dus omdat je als het ware mm2 en mm3 had samengevoegd.

Het stukje met "Press OK" is nieuw en door jou gemaakt, ik zal daar nog eens extra naar kijken want dat had ik tot nog toe niet gedaan.
Ik had eerder al iets gemaakt om te voorkomen dat je onbedoeld heen en weer gaat springen tussen de menu's.
Dat zal ik nog eens bekijken.
Mogelijk moet na het registreren van de enter toets die waarde even op slot gedaan worden, maar das dus iets wat bekeken moet worden.
Als die waarde inderdaad zoals jij vermoed twee keer word verwerkt terwijl void.loop 1 keer doorlopen word, dan moet dat dus opgelost worden.

Ik zal dan ook nog even naar mm 4 kijken, daar heb ik ook weinig aandacht aan besteed omdat ik vond dat daar niets gebeurt (ik geloof dat dat een leeg menu is).

Ik kan je niet vertellen wanneer ik daar tijd voor heb, dus je geduld blijft nodig.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

MAS3

Nou, weer een toevoeging gemaakt.

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

Ik heb ook wat ingebouwd dat moet voorkomen dat je maar heel kort in je menu blijft.
Ik had namelijk ooit iets gemaakt om te zien of er een nieuwe toets was ingedrukt.
Dan werd de variabele KeyDet 1.
In dat geval werd die toets pas afgehandeld.
Alleen werd KeyDet nergens meer gewist, in ieder geval niet in mm 3.
Dus als je dan in mm 4 terecht kwam, dan was KeyDet nog steeds 1 maar er was in werkelijkheid helemaal geen nieuwe toets geregistreerd.
Door de waarde direct te wissen (er een 0 van te maken), nadat geconstateerd was dat deze 1 was, kan dat niet meer gebeuren.
Ik weet niet zeker of dat het probleem ook echt was, maar het was in ieder geval iets dat niet klopte.
Omdat mm 4 en 5  direct na mm 2 en 3 worden uitgevoerd als aan de voorwaarden word voldaan, moest deze aanpassing sowieso gemaakt worden.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

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

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

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

MAS3

#66
Jan 04, 2014, 09:08 pm Last Edit: Jan 05, 2014, 10:59 am by MAS3 Reason: 1
Een delay vind ik bijna altijd een slecht idee.
De delays die niet in de loop zitten zijn wel ok, maar in de loop vind ik dat daar betere oplossingen voor zijn.

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

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

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

Ik heb weer een aangepaste versie aangehangen.

Edit: Leesbaarheid en tiepvaud verbeterd.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Hoi mas

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

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

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

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

MAS3

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

Voor je naaldkraan (geen idee wat dat is), is aansturen met een servo het eenvoudigst.
Niet alleen vanwege de software, maar ook vanwege de hardware.
Want om een stappenmotor te kunnen gebruiken voor zoiets als dit, moet je ook een sensor hebben die registreert wanneer je aan het beginpunt bent aangekomen (kraan == dicht).
Ik weet alleen niet of zo'n servo wel sterk genoeg is om dat te doen, en een servo heeft een maximale verdraaiing van 180 graden.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Hoi Mas.

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

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

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

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

                                                              ^
                                                       <   OK  >
                                                             v   

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

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

homedistiller

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

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

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

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

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

homedistiller

Hoi Mas.

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

met het stukje code

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


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

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

MAS3

Heel goed.
Ik was je al uitgebreid aan het vertellen hoe dit kan maar je had het zelf al uitgevogeld.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

#73
Jan 17, 2014, 11:02 pm Last Edit: Jan 17, 2014, 11:07 pm by homedistiller Reason: 1
zo weer een stapje veder.

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

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

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

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

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

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

Hier een stukje code als voorbeeld wat ik heb gemaakt

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


MAS3

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

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

Vergeet niet de commentaren goed bij te werken, ik zie dat sommige opmerkingen niet meer kloppen en dat zal vroeg of laat tot verwarring leiden.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up