Pages: 1 2 3 [4] 5 6 ... 13   Go Down
Author Topic: hulp gevraagd voor arduino regelunit voor distilleer apparaat  (Read 42059 times)
0 Members and 1 Guest are viewing this topic.
netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zo nu gaan we weer een stukje veder.
Ik denk dat het zo voor mij het best te overzien is.
En andere kunnen dan helpen als ik een foutje maak of tips geven.
Ik wil het menu van mas3 aanhouden omdat ik hier het meest van snap
en meest aan gewerkt heb. (hiervoor dank naar Mas)
wel helemaal opnieuw beginnen.

de tweede uitdaging die ik nu moet gaan maken.
wat moet er gaan gebeuren?
nadat de welkoms tekst is geweest.
Staat er op het lcd scherm press <OK>
Ik wil nu door op de ok toets te druken in het menu komen.
Met twee mogelijk heden.

1 Distilleren
2 Instellingen

hieronder dan weer de sub menu's
Dit word mijn tweede uitdaging.
wat moet ik daarvoor gaan doen?
-code toevoegen voor de 5 toetsen
-met het menu beginnen met twee keuzes.

hou jullie op de hoogte.



Ik ben er in geslaagd om het volgende stukje menu er in te verwerken.
Als ik na het intro verhaaltje op de toets oke druk.
Gaat hij netjes naar het volgende menu.

        -MAAK U KEUZE-
 DISTILLEREN
 INSTELLINGEN
                  Press<OK>

Ik ben bezig geweest om het pijltje er voor te krijgen en die de keuze aan te laten "wijzen"
Dit met stukken uit mijn andere menu's.
De pijl komt wel in beeld maar ik kan hem niet verplaatsen met mijn toetsen.
Ik zal de code die ik heb tot het tweede menu hier even neerzetten zonder het pijltje en de code hiervoor.
Hier wil ik morgen weer mee aan de gang gaan.
zouden jullie voor mij de code tot nu toe even kunnen controleren op foutjes en of voorzien van extra
leerzame comentaar?

gr Rolf
Code:
/*
het menu word bediend met 5 toetsen
up/down/left/right/select
Deze komen op analooge pin 0

Het begint met opstarten met een stukje tekst.
onder in beeld verschijnd druk OK.
dan gaat hij naar MM=2
Het lcd word leeggemaakt
Het menu word weergegeven maar zonder pijl en je kunt nog geen keuze maken.
dit gaan we doen in deel 3

 */

#include <LiquidCrystal.h>                                                   // Geeft aan dat er een lcd scherm gebruikt wordt.
LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2);                                 // Dit gedeelte stelt mijn lcd in.

int adc_key_val[5] ={50, 200, 400, 600, 800 };               // Ingangs waarden van mijn toetsen.
int mm = 1;                                                  // Sets menu mode to 1.
int NUM_KEYS = 5;                                            // geeft volgens mij aan het aantal knoppen dat er gebruikt word voor input.
int adc_key_in;
int key=-1;                                                  // Presets the pressed key; -1 means no key pressed yet.
int KeyDet=-1;                                               // Keep track of key press detection.
int oldkey=-1;                                               // Same here for the last pressed key.
int i=0;                                                     // i word gebruikt als teller later, moet bij 0 beginnen inplaats van 1
int Arrow=126;                                               // code voor de "pijl" symbool
int Item = 1;                                                // beschikbare menu items
int x=0;                                                     // x coordinaat voor setCursor.
int y=0;                                                     // y coordinaat voor setCursor.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SETUP
void setup()
{                                                            // 1 // Begin setup deze doorloopt hij alleen bij opstarten of reset
Serial.begin(9600);                                          // opent de seriele poort en zet data verkeer op 9600 bps.
 
  lcd.begin(20, 4);                                          // geeft aan dat het om een 20x4 lcd gaat.
  lcd.clear();                                               // maakt het lcd scherm leeg.
 
  lcd.setCursor(0,0);                                        // zet de cursor neer op rij 1 op positie 1.
  lcd.print("       WELKOM");                                // zet tekst neer "WELKOM"
  delay (2000);                                              // wacht 2 sec.
                                                         
  lcd.setCursor(0,1);                                        // Zet de cursor neer op rij 2 op positie 1.
  lcd.print("  VEEL PLEZIER MET");                           // Zet tekst neer "VEEL PLEZIER MET".
  delay (1000);                                              // wacht 1 sec.
 
  lcd.setCursor(0,2);                                        // Zet de cursor neer op rij 3 op positie 1.
  lcd.print("    DISTILLEREN!");                             // Zet tekst neer "DISTILLEREN!".
  delay (2000);                                              // Wacht 2 sec.
 
  lcd.clear();                                               // Maakt het lcd scherm weer leeg.
  lcd.setCursor(0,1);                                        // Zet de cursor op rij 2 positie 1.
  lcd.print("  AUTOMATIC STILL!");                            // Zet tekst neer ÄUTOMATIC STILL!".
 
  delay (2000);                                              // Wacht 2 sec.
  lcd.setCursor(0,3);                                        // Zet de cursor op rij 4 op positie 1.
  lcd.print("V.2.0     Press <OK>");
  }                                                          // 1 // << Sluit de setup af.
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// LOOP
  void loop()                                                // Hier begint het programma te lopen.
  {                                                          // 1
  key = (analogRead (0));                                    // lees analoge ingang op pin 0
  if (key != oldkey)                                         // Waneer een druktoets word gebruikt  "!=" betekend niet gelijk
  delay(50);                                                 // Wacht voor 0,05 sec
  adc_key_in = analogRead(0);                                // Lees de waarde op de analoge ingang 0
  key = get_key(adc_key_in);                                 // Zet deze waarde in een toets om
  if (key != oldkey)   
  {                                                          // 2 
  KeyDet = 1;                                                // We've detected a new pressed key and registered that event
  oldkey = key;
  if ((key ==4))                                             // Waneer toets 4 "OK" gedetecteerd word ga dan naar menu 2
  {                                                          // 3   
  mm = 2;                                                    // zie hierboven: ga naar menu 2
  lcd.clear();                                               // maak het lcd scherm leeg oftewel wis het vorige menu
                                                       
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  MENU 2
  if (mm ==2)                                             
  {                                                          // 4
    lcd.clear();                                             // Clear the LCD screen to prepare it for the menu that will follow
    lcd.setCursor(0,0);
    lcd.print("   -MAAK U KEUZE-");
    lcd.setCursor(1,1);
    lcd.print("DISTILLEREN");
    lcd.setCursor(1,2);
    lcd.print("INSTELLINGEN");
    lcd.setCursor(0,3);
    lcd.print("           Press<OK>");
    mm = 3;                                                 // Remember the screen has been cleared and the menu is already displayed
 
  }}}}                                                      // sluit 1/2/3/4
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Zet spanning om in toets nummer
 int get_key(unsigned int input)
{                                                            // 1
  int k;
  for (k = 0; k < NUM_KEYS; k++)                             // Start counting
{                                                            // 2
  if (input < adc_key_val[k])                                // should be more reliable as it looks for a range instead of a fixed value.
{                                                            // 3
  return k;                                                  // Breaks the for loop
}                                                            // sluit 3                                                           
}                                                            // sluit 2
  if (k >= NUM_KEYS)k = -1;                                  // No valid key pressed
  return k;                                                  // So break the loop and look for another keypress
}                                                            // sluit 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Logged

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zo het eerste menu is opgebouwd.
Ik kan nu in dit menu voor twee keuzes kiezen.
Namelijk DISTILLEREN en INSTELLINGEN.
Je kunt de keuze maken om het pijltje voor de keuzes te verplaatsen met de toets omhoog of omlaag.
Na het maken van de keuze moet je op de toets oke duwen.
Nu heb ik voor keuze INSTELLINGEN een vervolg gemaakt
Voor DISTILLEREN nog niet
Als je voor INSTELLINGEN kiest
Word in de code het lcd leeggemaakt de cursor op de eerste regel gezet op positie 1
en INSTELLINGEN weergegeven.

Hier komt het probleem wat ik nu krijg en eindelijk niet weet hoe dit op te lossen.
Als ik nu op de toets oke druk nr 4
Gaat hij weer terug naar het vorige menu.
Ik denk dat dit komt doordat  hij nog steeds controleerd of toets 4 (oke) word bediend wat ik heb toegepast
In het begin van de code voor na de intro tekst op oke te drukken om in het eerste menu te komen.

heeft hier iemand een idee hoe dit te voorkomen?
Of komt het ergens anders door?

De Code
Code:
#include <LiquidCrystal.h>                                   // Geeft aan dat er een lcd scherm gebruikt wordt.
LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2);                    // Dit gedeelte stelt mijn lcd in.

int adc_key_val[5] ={50, 200, 400, 600, 800 };               // Ingangs waarden van mijn toetsen.
int mm = 1;                                                  // Sets menu mode to 1.
int NUM_KEYS = 5;                                            // geeft volgens mij aan het aantal knoppen dat er gebruikt word voor input.
int adc_key_in;
int key=-1;                                                  // Presets the pressed key; -1 means no key pressed yet.
int KeyDet=-1;                                               // Keep track of key press detection.
int oldkey=-1;                                               // Same here for the last pressed key.
int i=0;                                                     // i word gebruikt als teller later, moet bij 0 beginnen inplaats van 1
int Arrow=126;                                               // code voor de "pijl" symbool
int Item = 1;                                                // beschikbare menu items
int x=0;                                                     // x coordinaat voor setCursor.
int y=0;                                                     // y coordinaat voor setCursor.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SETUP
void setup()
{                                                            // 1 // Begin setup deze doorloopt hij alleen bij opstarten of reset
Serial.begin(9600);                                          // opent de seriele poort en zet data verkeer op 9600 bps.
 
  lcd.begin(20, 4);                                          // geeft aan dat het om een 20x4 lcd gaat.
  lcd.clear();                                               // maakt het lcd scherm leeg.
 
  lcd.setCursor(0,0);                                        // zet de cursor neer op rij 1 op positie 1.
  lcd.print("       WELKOM");                                // zet tekst neer "WELKOM"
  delay (2000);                                              // wacht 2 sec.
                                                         
  lcd.setCursor(0,1);                                        // Zet de cursor neer op rij 2 op positie 1.
  lcd.print("  VEEL PLEZIER MET");                           // Zet tekst neer "VEEL PLEZIER MET".
  delay (1000);                                              // wacht 1 sec.
 
  lcd.setCursor(0,2);                                        // Zet de cursor neer op rij 3 op positie 1.
  lcd.print("    DISTILLEREN!");                             // Zet tekst neer "DISTILLEREN!".
  delay (2000);                                              // Wacht 2 sec.
 
  lcd.clear();                                               // Maakt het lcd scherm weer leeg.
  lcd.setCursor(0,1);                                        // Zet de cursor op rij 2 positie 1.
  lcd.print("  AUTOMATIC STILL!");                            // Zet tekst neer ÄUTOMATIC STILL!".
 
  delay (2000);                                              // Wacht 2 sec.
  lcd.setCursor(0,3);                                        // Zet de cursor op rij 4 op positie 1.
  lcd.print("V.2.0     Press <OK>");
  }                                                          // 1 // << Sluit de setup af.
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// LOOP
  void loop()                                                // Hier begint het programma te lopen.
  {                                                          // 1
  key = (analogRead (0));                                    // lees analoge ingang op pin 0
  if (key != oldkey)                                         // Waneer een druktoets word gebruikt  "!=" betekend niet gelijk
  delay(50);                                                 // Wacht voor 0,05 sec
  adc_key_in = analogRead(0);                                // Lees de waarde op de analoge ingang 0
  key = get_key(adc_key_in);                                 // Zet deze waarde in een toets om
  if (key != oldkey)   
  {                                                          // 2 
  KeyDet = 1;                                                // We've detected a new pressed key and registered that event
  oldkey = key;
  if ((key ==4))                                             // Waneer toets 4 "OK" gedetecteerd word ga dan naar menu 2
  {                                                          // 3   
  mm = 2;                                                    // zie hierboven: ga naar menu 2
  lcd.clear();                                               // maak het lcd scherm leeg oftewel wis het vorige menu
                                                                     
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  MENU 2
  if (mm ==2)                                             
  {                                                          // 4
    lcd.clear();                                             // Maakt het scherm leeg voor het nieuwe menu
    lcd.setCursor(0,0);                                      // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("   -MAAK U KEUZE-");                          // Zet de tekst neer: "-MAAK U KEUZE-"
    lcd.setCursor(1,1);                                      // Zet de cursor op de tweede regel op de tweede positie.
    lcd.print("DISTILLEREN");                                // Zet de tekst neer: "DISTILLEREN"
    lcd.setCursor(1,2);                                      // Zet de cursor op de derde regel op de tweede positie.
    lcd.print("INSTELLINGEN");                               // Zet de tekst neer: "INSTELLINGEN"
    lcd.setCursor(0,3);                                      // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("           Press<OK>");                       // Zet de tekst neer: "Press<OK>"
  }
« Last Edit: November 01, 2013, 05:48:40 pm by homedistiller » Logged

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
else KeyDet = 0;                                         // The key is the same as last key, so no new pressed key
    mm = 3;                                                  // Remember the screen has been cleared and the menu is already displayed
  }
  if (mm ==3){
  switch (Item){;                                            //
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=1;                                                       // 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=2;
  x=0;
  break;
}                                                             // Sluit case 2
}                                                             // Sluit switch 
lcd.setCursor(x,y);                                           // Zet de cursor op de goede plek.
lcd.write(Arrow);                                             // en laat de pijl zien
 
  if (mm ==3) {                                               // 5
    lcd.setCursor(1,0);

if (KeyDet){                                                  // We already analyzed and put a value in key
                                                              // Because we need to release the key before we go to some next item, we need to see whether the key value is new or not
if ((key)==2) Item++;                                         // Key UP
if ((key)==1) Item--;                                         // Key DOWN
if ((Item)==3) Item=1;     //  5-1                            // dit stukje is hoe de pijl over het menu gaat en weer terug    // Roll over to the first item
if ((Item)==0) Item=2;     //  0-4                            // Ga naar de laatste item
if ((Item==2)&&(key==4)) {                                    // Waneer "INSTELLINGEN" is gekozen en op de toets (4) OK word geduwd
Item = 1;                                                     // Reset Item, because else we'll enter at the exit item and might be forced out before we're in the menu
mm = 4;                                                       // Reset Menu mode so next run we're out of the menu
lcd.clear();                                                  // Clear the display to make it ready for normal mode
lcd.setCursor(0,0);                                           // I'm not sure we really need to reset the cursor
lcd.print("   -INSTELLINGEN-");
}                                                                                         
  }}}}}                                                       // sluit 1/2/3/4/5

                             
 
   
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Zet spanning om in toets nummer
 int get_key(unsigned int input)
{                                                             // 1
  int k;
  for (k = 0; k < NUM_KEYS; k++)                              // Start counting
{                                                             // 2
  if (input < adc_key_val[k])                                 // should be more reliable as it looks for a range instead of a fixed value.
{                                                             // 3
  return k;                                                   // Breaks the for loop
}                                                             // sluit 3                                                           
}                                                             // sluit 2
  if (k >= NUM_KEYS)k = -1;                                   // No valid key pressed
  return k;                                                   // So break the loop and look for another keypress
}                                                             // sluit 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Rolf.

Op wat je nu hebt geplaatst, is niet veel aan te merken.
(Alleen dat het "  - MAAK UW KEUZE -" is).
Deze word ook zonder klachten gecompileerd.

Wat je in de gaten moet houden is de waarde MM (Menu Mode).
In dit stukje verlaat je op het eind MM2.
In MM2 heb je het menuscherm gebouwd en staan de betreffende teksten op hun plaats.
De volgende stap is dan MM3, waarin je de cursor op de plaats zet, en afhankelijk van de plaats waar de cursor staat iets gaat doen met de andere toetsen (links / rechts, select(OK)).
Hiervoor hoef je dus het menu niet telkens opnieuw te schrijven als je de pijl verplaatst.
Je hebt inmiddels MM2 verlaten en hebt omgeschakeld naar MM3.
In MM3 werd er in mijn eerder getoonde menu gekeken naar de waarde Item.
Die waarde werd tijdens MM3 gekoppeld aan de toetsen omhoog en omlaag, binnen de mogelijke waarden gehouden en daarna werd de oude plaats van het pijltje gewist, en het pijltje op de nieuwe plaats gezet.
In MM3 kan ook op een andere toets worden gedrukt, en de waarde van Item bepaalt dan wat er gedaan word, maar bij jouw MM3 heb je die mogelijkheid niet, en komt dat pas later in een volgend menu.
Die andere toetsen kunnen zijn dat er naar een volgend menu word omgeschakeld (OK toets), een waarde word verhoogd (pijltje links /rechts) of het menu word verlaten of 1 stap terug word gedaan (ook met de OK toets).
Je kunt natuurlijk nog meer dingen verzinnen die je dan zou willen doen.

Na MM3 kom je in jouw geval het distilleren scherm, of in jet instellingen scherm.
Dat zijn dan dus weer eigen menu modes.
Je gaat dan bijvoorbeeld naar MM4 voor je distilleer scherm en als je daar iets kunt selecteren en/of instellen dan zou je daarvoor MM4 kunnen gebruiken.
Je moet dus voor het opbouwen van een scherm een menu modus, en voor het verwerken van dat scherm een volgende menu modus gebruiken.
Dat doe je bij elk scherm dat je bouwt, al heb je er 25.
Dus je moet heel goed bijhouden waar je bent gebleven.

Ben benieuwd naar je volgende werk.

Logged

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

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je had inmiddels alweer twee keer een volgend stukje geplaatst.
Mijn vorige bericht sloeg dus op 3 van jouw berichten terug.

Probeer het commentaar zo goed mogelijk op dezelfde plaats te laten beginnen, dan is het een stuk overzichtelijker dan nu met de commentaren die steeds verspringen.

Als je denkt dat er nog steeds op de OK knop gedrukt word, betekent dat dat de waarde van de gedrukte knop niet vernieuwd is voor je dat controleert.
Daarom kun je in dat geval voor de controle die waarde aanpassen.
Je kunt hier dan -1 van maken, dat geeft aan geen knop gedrukt.
Maar in de sketch die ik eerder heb geplaatst word gecontroleerd of de huidige waarde van Key, afwijkt van de vorige waarde.
Als die wel afwijkt, dan word er pas wat gedaan met die toetsdruk.
En als die niet afwijkt, zou er dus ook niets moeten gebeuren.


Code:
 void loop()                                                // Hier begint het programma te lopen.
  {                                                                // 1
  key = (analogRead (0));                            // lees analoge ingang op pin 0
  if (key != oldkey)                                      // Waneer een druktoets word gebruikt  "!=" betekent niet gelijk
  delay(50);                                                 // Wacht voor 0,05 sec
  adc_key_in = analogRead(0);                  // Lees de waarde op de analoge ingang 0
  key = get_key(adc_key_in);                    // Zet deze waarde in een toets om
  if (key != oldkey)    
  {                                                                // 2  
  KeyDet = 1;                                               // We've detected a new pressed key and registered that event
  oldkey = key;
  if ((key ==4))                                            // Waneer toets 4 "OK" gedetecteerd word ga dan naar menu 2
  {                                                                // 3    
  mm = 2;                                                    // zie hierboven: ga naar menu 2
  lcd.clear();                                                // maak het lcd scherm leeg oftewel wis het vorige menu
                                                                    
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  MENU 2
  if (mm ==2)                                              
  {                                                               // 4
    lcd.clear();                                             // Maakt het scherm leeg voor het nieuwe menu
    lcd.setCursor(0,0);                                // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("   -MAAK U KEUZE-");           // Zet de tekst neer: "-MAAK U KEUZE-"
    lcd.setCursor(1,1);                                  // Zet de cursor op de tweede regel op de tweede positie.
    lcd.print("DISTILLEREN");                     // Zet de tekst neer: "DISTILLEREN"
    lcd.setCursor(1,2);                                 // Zet de cursor op de derde regel op de tweede positie.
    lcd.print("INSTELLINGEN");                  // Zet de tekst neer: "INSTELLINGEN"
    lcd.setCursor(0,3);                                // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("           Press<OK>");              // Zet de tekst neer: "Press<OK>"
  }


Wanneer je naar MM2 gaat, wis je het scherm 2 keer, dat is onnodig.
Ik zie een aantal { staan met als commentaar een getal.
Die getallen zijn om de stukken code tussen {} bij te houden.
Ik zie geen } staan die bij de { horen, behalve helemaal onderaan waar alles in een keer afgesloten word.
Ik denk niet dat dat klopt.
Zet verder voor de zekerheid de { eens op dezelfde regel als de if.. , om er zeker van te zijn dat die aan elkaar gekoppeld zijn.
Dus dan krijg je dit in je code:
Code:
 if (mm ==2)  {                                         // 4
    lcd.clear();                                             // Maakt het scherm leeg voor het nieuwe menu
    lcd.setCursor(0,0);                                // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("   -MAAK U KEUZE-");           // Zet de tekst neer: "-MAAK U KEUZE-"
    lcd.setCursor(1,1);                                  // Zet de cursor op de tweede regel op de tweede positie.
    lcd.print("DISTILLEREN");                     // Zet de tekst neer: "DISTILLEREN"
    lcd.setCursor(1,2);                                 // Zet de cursor op de derde regel op de tweede positie.
    lcd.print("INSTELLINGEN");                  // Zet de tekst neer: "INSTELLINGEN"
    lcd.setCursor(0,3);                                // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("           Press<OK>");              // Zet de tekst neer: "Press<OK>"
  }
Nu is het weer veel te laat geworden en ga ik het bed induiken.
Wie weet morgen verder...
« Last Edit: November 02, 2013, 12:23:04 pm by MAS3 » Logged

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

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi mas

De comentaren staan bij mij allemaal strak in een lijn.
Alleen als ik het hier neer kopier niet meer.

Ik begin het nu een beetje te snappen.
Alleen de  { } snap ik niet helemaal
Telkens als ik een stukje code schrijf en dit wil controleren wat het doet en werkt.
Krijg ik foutmeldingen van expecting { this before enz
Waardoor ik de code dan niet kan uploaden naar mijn arduino
Wat ik dan doe is dan steeds er een bij zetten tot de fout code verdwijnt en ik de code kan uploden.
Kan hier op internet ook geen uitleg over vinden.
Zo er graag een boek over leze.
Maar deze kan ik nergens gratis vinden en downloaden.
Zou er wel een willen kopen maar omdat ik niet weet of ik het juiste boek
Heb voor mij durf ik dit niet.

Zou nog even over mijn eerste vraag terug willen komen.
Als de code begin in het stukje setup wat hij eenmaal doet.
Dan zet hij eerst een stukje tekst neer ter intro en steld hij alles in
Nu heb ik hier in de code verwerkt dat de begin tekst blijft staan totdat je de keuze ok intoets.
Dit werkt allemaal goed.
Als je oke kiest gaat hij naar mm2 menu 2 even genoemd
Daar kun je een keuze maken uit twee
Distilleren en instellingen.
Druk je in dit menu op pijltje rechts links dan gebeurd er niks.
Omdat ik dat niet heb gemaakt.
Pijl omhoog omlaag voor de keuze te maken met de pijl
En selekteren met ok.
Kies je nu voor instellingen kom je in een nieuw scherm instellingen genoemd.
Dit heb ik weergegeven met een stukje tekst instellingen
Dit heb ik gedaan om weer een nieuw menu te gaan opbouwen.
En te kijken of de code tot hier werkt.
Dit werkt ook.
Alleen als je in het nieuwe menu bent heb ik daar nog geen functies of iets aan gekoppeld.
Alleen scherm leegmaken zet de cursor op de goede plek en print de tekst instellingen.
Bedien ik nu de toetsen omhoog omlaag rechts links gebeurt er niks zoals het hoort.
Maar duw ik op toets ok
Gaat hij terug naar mm2 menu 2.
En dit is eindelijk niet de bedoeling.
Weet iemand waar de fout zit wat dit veroorzaakt?
Mvg Rolf
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik zie het met die commentaren, bij mijn geplakte stukje van vannacht is het ook een zooitje geworden nadat ik ze allemaal netjes opgelijnd had.

Ja, van de oorzaak van je probleem heb ik wel een idee.
Met de { en } maak je een apart stukje code dat afgebakend is van andere code.
Als je dus een if.. regel maakt, en je wil dat bepaalde code alleen word uitgevoerd als de voorwaarde van die if..klopt, én dat stukje dat je wil uitvoeren meer dan 1 regel is, dan kun je dat tussen de { } zetten.
Alles wat na de { komt die bij die if.. regel begint en tot de eerstvolgende } word alleen uitgevoerd als die if.. klopt.

Code:
if (ditiswaar==1) {
deze regel word nu uitgevoerd zolang ditiswaar 1 is;
en deze regel word dan ook uitgevoerd;
}

if (ditisnietwaar==1) alleen wat er achter de if.. regel staat word nu uitgevoerd als ditisnietwaar 1 is;
deze regel na ditisnietwaar word altijd uitgevoerd omdat die dus niet afhankelijk is van de inhoud van ditisnietwaar;

Ik hoop dat je nu duidelijk word wat die { en } doen, namelijk meerdere regels code inpakken binnen een voorwaarde die je gesteld hebt, wat anders niet zou kunnen.
Als je de { en } beter toepast, zul je denk ik wel zien dat je niet ongewenst meer in een menu terecht komt.
Logged

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

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Mas

het is allemaal wat duidelijker geworden.
Maar ik krijg het niet voor elkaar om de fout weg te krijgen.
Zou je me kunnen vertellen waar de fout zit?
Dan kan ik weer veder en kan ik kijken  waarom het fout ging.
Nu zie ik het niet.
mvg Rolf
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Rolf.

De fout is de regel die je hebt toegevoegd om van de foutmeldingen af te komen.
Dat is wat ik symptoom bestrijding noem.
Daarmee zorg je dat er niet meer geklaagd word, maar het probleem los je niet op.
Verder doet die regel niet wat het commentaar erbij suggereert, en dat zet jou vroeg of laat ook op het verkeerde been:
Code:
  }}}}}                                                       // sluit 1/2/3/4/5
Dat is niet waar, wat eerder waar is, is:
Code:
  }}}}}                                                       // sluit 4/3/2/1/loop
De eerste } sluit dus de laatste { af en dat is dus wat je erg goed in de gaten moet houden.
De IDE helpt je daarbij want als je een } intypt, dan laat de IDE zien bij welke { die } hoort door en een heel klein blauw randje omheen te zetten.

Doordat deze accolades niet kloppen, klopt de hele sketch niet meer en word het erg lastig om het te repareren.

Zo zie ik ergens staan:
Code:
  else KeyDet = 0;                                         // The key is the same as last key, so no new pressed key
    mm = 3;                                                  // Remember the screen has been cleared and the menu is already displayed

Daar staat dus: als er aan geen van de voorgaande voorwaarden voldaan word, dan is KeyDet nul (met als commentaar geen nieuwe toets gedrukt).
Vervolgens word zonder enige voorwaarde de menu mode op 3 gezet.
Ik kan me niet voorstellen dat dat de bedoeling was.

Het is heel veel werk om deze fouten te repareren, omdat er een aantal dingen met elkaar vergeleken meten worden.
Dat gaat mij vanavond niet lukken maar ik wil er als ik wat tijd heb best een gooi naar doen.
Ondertussen heb ik een tipje voor je.
Als je een stukje gaat schrijven wat tussen de accolades komt, zet dan tijdens het typen na de {, gelijk een } op de volgende regel, en voorzie beide regels van een passend commentaar, zoals een getal of net dat wat voor jou duidelijk is.
Daarna kun je meer regels tussen de {} toevoegen tot je hebt wat je wilde doen.
 
Logged

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

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik ben bezig jouw sketch nog eens te bekijken.
Dat gaat nog wel ff duren want zoals gezegd is er veel te repareren.
Het probleem lijkt te beginnen op regel 76, waar zomaar ineens de menu mode naar 3 gezet word, dit stukje:
Code:
else KeyDet = 0;                                         // The key is the same as last key, so no new pressed key
    mm = 3;                                                  // Remember the screen has been cleared and the menu is already displayed
Oorspronkelijk zat daar de afhandeling van mm == 2 in, en werd na die afhandeling overgeschakeld naar de volgende menu mode (3 dus).
Dat heb ik uitgevonden door mijn voorbeeld te vergelijken met wat je nu hebt.
Ik heb ook alle commentaren vertaald naar Nederlands zodat dat wat gemakkelijker leest voor jou.
Maar ik ga 'm pas hier neerzetten als ik denk dat ie het wel weer zal doen.

En daar gaan nog wel een paar nachtjes slapen overheen (en de eerste slaap ga ik nu doen).
Logged

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

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Mas helemaal geweldig!

Krijg het wel een beetje voor elkaar maar niet naar mijn zin.
Ik ben wel alvast begonnen met de andere onderdelen te regelen.
ssr relay geregeld.
5x ds18b20 waterdicht met snoer
en nog veel meer
ook ben ik een stappen plan aan het maken wat ik wil gaan doen.
het menu is een  en dan de rest er nog bij inzetten.
Ik zie aan de tijden dat je reageerd ook een echte nachtwaker bent?
Ik lig meestal tussem 2:00 en 2:30 op bed.
Jij nog iets later als ik dit zo zie

mvg Rolf
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik probeer rond 0:00 te gaan slapen, maar ik heb geen tijd om te gaan slapen.
Dus word het meestal zo rond 1:00, en gaat de wekker weer om 5:25.
Dan werken meestal van 8:00 tot ongeveer 20:00 (soms vroeger thuis, soms veel later), eten koken en opeten gevolgd door wat ontspannen door tv te kijken en/of het internet af te struinen.
Word er moe van als ik het terug lees..

Maar zo laat als jij concludeert ben ik meestal niet meer bezig hoor.
Misschien dat je de klok in je profiel hier op de site even moet aanpassen zodat de juiste tijd getoond word.
Die klok is hier een beetje een onding.

Tijd nu volgens mijn pc is 23:05 en volgens de site 22:59
Logged

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

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi.

Ik heb nog maar eens gekeken naar de sketch.
Ik heb er wat commentaren bijgezet en/of vertaald naar het Nederlands.
En ik heb het een en ander uitgezocht met de {accolades}.
Die heb ik op de plaatsen neergezet waar ik denk dat ze moeten staan, maar ik weet niet 100 % zeker dat dat klopt.
Dat komt dan weer omdat je er zelf nog wat aan hebt toegevoegd en waarvan ik niet altijd weet wat daar precies de bedoeling van is.

De sketch heb ik bijgevoegd, aan jou dan om te testen of het nu weer doet wat je wil.
Zo niet dan even aangeven wat er fout gaat.
Misschien dat ik er dan nog een keer naar kan kijken.

* Distiller_december_ino.ino (11.88 KB - downloaded 13 times.)
Logged

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

netherlands
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Mas

Ik heb er nog even naar gekeken.
Ik heb hem gelijk even geupload naar mijn uno.
Het werkt totdat ik in het menu Distilleren/instellingen kom.
Ik kan dan geen keuze maken omdat er geen pijltje meer zichtbaar is.

Zal ook eens kijken wat er mis gaat.
Bedankt alvast voor de tijd die je er alweer ingestoken hebt.

mvg Rolf

Net even mee bezig geweest.
wat ik  de code zie is dat we in menu 2 zitten
en dat je het bedienen van het pijltje mm3 noemt

Code:
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  MENU 2
  if (mm ==2)                                             
  {                                                                      // 4
    lcd.clear();                                                    // Maakt het scherm leeg voor het nieuwe menu
    lcd.setCursor(0,0);                                      // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("   -MAAK U KEUZE-");                  // Zet de tekst neer: "-MAAK U KEUZE-"
    lcd.setCursor(1,1);                                      // Zet de cursor op de tweede regel op de tweede positie.
    lcd.print("DISTILLEREN");                           // Zet de tekst neer: "DISTILLEREN"
    lcd.setCursor(1,2);                                      // Zet de cursor op de derde regel op de tweede positie.
    lcd.print("INSTELLINGEN");                         // Zet de tekst neer: "INSTELLINGEN"
    lcd.setCursor(0,3);                                      // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("           Press<OK>");                   // Zet de tekst neer: "Press<OK>"
  }
 
  else KeyDet = 0;                                           // toetswaarde isdezelfde als de vorige keer, dus er is geen nieuwe toets gedrukt
//    mm = 3;                                                    // Onthoud dat we het scherm hebben gewist en het menu al word weergegeven
                                                                        // -- Dit is een restant dat niet geknipt is toen de sketch aangepast werd en een gedeelte verwijderd werd (mm 2) --
                                                                        // -- Hierdoor word er zomaar en altijd naar een verkeerde menu modus geschakeld, en loopt de hele sketch in de soep --
  }
  if (mm ==3){                                          // ALS IK DEZE VERANDER IN MM==2 IS HET PIJLTJE WEER AANWEZIG
  switch (Item){;                                               //
case 1:{
  lcd.setCursor(x,y);                                        // Omdat we een toetsdruk hebben geregistreerd naar een ander menu item, zetten we de cursor nog een keer op de oude positie
  lcd.print(" ");                                                  // En wissen we 'm door er een spatie overheen te zetten
  y=1;                                                               // Na het wissen van de oude pijl, kan die nu naar de nieuwe positie worden gezet
  x=0;                                                               // Tellen begint bij nul, niet bij één
  break;
}                                                                      // Sluit case 1
case 2:{
  lcd.setCursor(x,y);
  lcd.print(" ");
  y=2;
  x=0;
  break;
    }                                                                   // Sluit case 2
  }                                                                     // Sluit switch 

lcd.setCursor(x,y);                                          // Zet de cursor op de goede plek.
lcd.write(Arrow);                                             // en laat de pijl zien
 


als ik dit omzet in mm2 werkt het weer en is het pijltje terug.
wat me wel opvalt is dat het pijltje heel slecht reageerd op de druktoetsen.
Lijkt wel of hij het loslaten van de toets ook regestreerd.
meschien hier een vertraging inzetten?
« Last Edit: December 29, 2013, 12:21:32 pm by homedistiller » Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 50
Posts: 1672
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okee, ben weer aan het rommelen ermee.
Je kunt dit niet echt op deze manier oplossen.
De reden is dat we alleen dingen willen doen die nog niet gedaan zijn en ook geen dingen die nog niet gedaan hoeven worden.
Dat alleen al omdat we anders continu het scherm opnieuw beschrijven met gegevens die er al staan waardoor het scherm slecht leesbaar word.
Daarom maken we eerst een menu, en als dat eenmaal gemaakt is gaan we dat menu bedienden met de pijltjes.
We weten waar we mee bezig zijn door de waarde van de menu modus (MM).
Dus MM bepaalt of we het menu maken, of we dat al gedaan hebben en nu met de pijltjes bezig zijn, of dat we misschien wel helemaal niet in het menu zitten en dat daarom ook niet op het scherm hoeven te schrijven.
Door deze aanpak is het relatief eenvoudig om meerdere menu's erbij te maken.
Dat gaat dan wel telkens per 2 menu modes of een combinatie van menu mode 3 (waar de pijltjes worden afgehandeld) en een andere modus waaraan je dan weer kunt zien hoeveel items er beschikbaar zijn.
Als er voor de eerste optie gekozen word, kun je eenvoudig de stukken MM ==2 en MM == 3 kopiëren en er MM == 4 en MM == 5 van maken en daarna aanpassen naar wens.

Wat er nu dus schijnbaar nog fout gaat, is het verschil maken tussen MM==2 en MM==3.
Ik denk dat ik dat inmiddels ook weer gerepareerd heb.
Maar ik ga wel nog ff de hele gang na om te zien of ik nog meer kan vinden om te verbeteren.
Daar gaat weer wat tijd inzitten dus ik weet niet direct wanneer dat hier verschijnt.
Logged

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

Pages: 1 2 3 [4] 5 6 ... 13   Go Up
Jump to: