Go Down

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

homedistiller

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

MAS3

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 ?
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 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

MAS3

#18
Jun 17, 2013, 07:10 am Last Edit: Jun 17, 2013, 07:16 am by MAS3 Reason: 1
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.
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

#19
Jun 17, 2013, 10:02 pm Last Edit: Jun 17, 2013, 10:56 pm by homedistiller Reason: 1
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 ;-)
Wie kan mij helpen?

mvg rolf


MAS3

#20
Jun 17, 2013, 11:58 pm Last Edit: Jun 18, 2013, 12:03 am by MAS3 Reason: 1
Quote from: homedistiller

Ik heb op digital uit 7 een ledje zitten en naar de massa dit moet toch kunnen de led is heel ;-)


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:
Code: [Select]

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.
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

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

Code: [Select]
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.


MAS3

Quote from: homedistiller


Wie kan me helpen met dit stukje in de code

Code: [Select]
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.
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 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

MAS3

#24
Jun 22, 2013, 07:26 pm Last Edit: Jun 23, 2013, 09:34 am by MAS3 Reason: 1
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).
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

#25
Jun 23, 2013, 11:05 pm Last Edit: Jun 23, 2013, 11:08 pm by homedistiller Reason: 1
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 <OK>
(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

homedistiller

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:

Code: [Select]
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
Code: [Select]
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.



MAS3

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:
Code: [Select]
  }                                       // 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.
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

Ben inderdaad weer een stukje veder.
Hij geeft nu geen fout meer aan.
Alleen krijg ik het nieuwe menu niet voor elkaar.
Denk dat de twee menu's gelijk blijven lopen.

heb alles al een paar keer gekopieerd en tussen de bestaande code geplakt
Maar blijf problemen houden.

ik heb nu achter mijn nieuwe menu dit stukje code geplakt.

Code: [Select]
lcd.setCursor(x,y);                                        // Put the cursor at the right spot
  lcd.write(Arrow);                                          // And show the arrow


Wat ik raar vind,
is dat als ik van mijn bestaande menu via exit naar mijn hoofdmenu ga.
Dat dan netjes in beeld staat

HANDMATIG
AUTOMATISCH
OPTIES

Dat het pijltje verschijnt
op de vierde regel eerste plaats

inplaats op 0,0

net of hij dan nog op de oude plek staat van het vorige menu voor exit.

Nog een vraagje
na het opstarten van de code.
gaat hij na het weergeven van de tekst naar het oude menu.
Wat zorgt in de code dat hij daar begint en niet bij mijn nieuwe menu?

al met al weer een hoop vragen.

mas
wil je voor mij mischien het nieuwe menu afmaken zodat het pijltje met de up en down pijltje
voor de 3 opties komen te staan?
Er iets aankoppelen moet dan wel lukken denk ik.
alvast bedankt weer
mvg Rolf

MAS3

Die vraag heb ik volgens mij al beantwoord.
Als je wil dat iemand iets aanpast, moet je er wel voor zorgen dat je jouw laatste versie beschikbaar stelt anders zit je tegen elkaar in te werken.
Maar ik ga je code niet aanpassen, dat moet je zelf doen.
Ik kan je wel vertellen waar je dan naar moet kijken en zal proberen uit te leggen waarom.

De variabele mm houdt bij in welke menu modus je zit.
En dus ook welk scherm er getoond moet worden.
Om een of andere reden ga je nu naar je OPTION scherm (die hoort bij mm == 2), in plaats van 0 of 1.

Ik heb destijds 4 modes bedacht.
De eerste (modus 0) bouwt een scherm op.
De tweede (1) laat je het bedienen.
De derde bouwt het menu scherm op, en
De vierde laat je dat menu bedienen.

Jij gaat iets anders te werk, omdat je op dit moment altijd een menu paraat hebt.
Maar om die reden heb ik ook gekozen voor 4 modes en niet voor 3.
Zowel in je hoofdscherm als in je OPTIES scherm heb je een menu.
Daarom moet je daar op de juiste wijze mee omgaan.
Ik heb het zojuist nog even nagekeken, en zie dat ik mm == 0 zelf niet gebruik en dus van mm == 0 (== betekent een controle of het nul is) direct doorga naar mm = 1 (= betekent is vanaf nu).
Het lijkt me dat in jouw situatie je dat wel wil doen en dan met 0 en 1 op de zelfde wijze omgaat als met 2 en 3.
Dus wat je nu in mm == 1 hebt staan zet je dan beter in mm == 0, waar nu alleen staat dat mm opgehoogd moet worden naar 1.
Dat ophogen moet nog steeds als laatste gebeuren in mm == 0, maar eerst bouw/schrijf je dus het menu op.
Terwijl je nog in mm == 0 zit, ga je ook eerst via x en y de cursor wissen, en vervolgens x en y resetten naar 0.
Ook Item moet je resetten zodat ie overeen komt met de positie van de cursor.
Daarmee komt ie in je Options menu vanzelf links boven terecht (maar je mag ook zelf een andere plaats kiezen)
Omdat je dat niet gedaan hebt, blijft de cursor nu dus op de oude plaats staan terwijl je daar helemaal geen Items (meer) hebt.
Die reset-stappen moet je ook doen terwijl je in MM == 2 zit, omdat je anders daar ergens halverwege het menu terecht komt.
In mijn opzet was dat niet nodig omdat ik maar 1 echt menu had en daar dan geen rekening mee hoefde te houden.
Maar als je goed kijkt, zie je dat tijdens het verlaten van het menu, Item op 1 word gezet.

In mm == 1 ga je kijken waar je de cursor moet plaatsen, en dat kun je op dezelfde wijze als in mm == 3 doen met de switch.. case.
Alleen moet je er dan wel rekening mee houden dat je hier een ander aantal menu items hebt.
Maar dat is best wel te doen.

Het stukje dat afhankelijk is van mm == 3, bestaat (overigens zonder noodzaak) uit 2 afzonderlijke stukjes en kan je daarom wat verwarren.
Het eerste stuk is wat ik zojuist besprak.
Daar word gekeken waar de cursor geplaatst moet worden.
En dat word na afsluiten van dat specifieke stukje dan ook uitgevoerd.
Maar dat uitvoeren kan op elke plaats in de sketch, zolang je maar niet van een voorwaarde afhankelijk bent.
Na dat bepalen van de plaats van de cursor, word er nog een keer gecontroleerd of je in mm == 3 zit.
In dat stukje word gekeken wat je allemaal kan doen met het menu item waar de cursor zich op dat moment bevindt.
Dat kun je herkennen doordat er daar gelijktijdig op 2 voorwaarden word gecontroleerd, namelijk welk Item er op dat moment geldig is, en welke toets er dan word ingedrukt.
Per Item zijn er 3 mogelijke andere toetsen die ingedrukt zouden kunnen worden (maar daar kun jij eventueel meer toetsen van maken als je die hebt en wil gebruiken).
Dat zijn de volgende toetsen:
Select, en dat word normalerwijze gebruikt om naar een volgend of vorig scherm te gaan (dan moet je dus ook de waarde mm aanpassen).
Links, om een waarde te verlagen.
Rechts, om de waarde te verhogen.

Als al deze stappen je boven het hoofd groeien, kun je er een stuk papier bij pakken en daarop bijhouden wat de verschillende variabelen zoal doen.
Eventueel pak je voor elk deel uit je code (dus in welke mm je zit) een nieuw stukkie papier.
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