6 cijferig codeslot

Goedemiddag,

Wij zijn voor school met een project bezig en moeten een codeslot ontwerpen en programmeren met 6 cijfers, we hebben van onze begeleider een programma van 4 cijfers gekregen en het lukt ons niet om hem om te bouwen naar 6 cijfers.
Ik hoop dat er mensen zijn die ons kunnen helpen, alvast bedankt.

Hier is ons programma

Eerste tip als het om schoonwerk gaat, goed lezen! Want jullie dachten, hé, alles is Engels maar wij plaatsen een bericht in het Nederlands? En die Nederlandse sectie is niet voor ons?

Ga daar nu NIET als nog een bericht plaatsen (want dat is cross-posten), laat een mod het verplaatsen. Maar pas je bericht wel aan en plaats de code niet in een bestand maar in code-tags. Dus [ code]hier de code[/ code] (zonder spaties). En vertel ons vervolgens eens wat jullie al geprobeerd hebben en wat er niet werkte. "Het lukt niet" is wel de slechte omschrijving ooit en zal je ook verder in je leven niet ver brengen.

ok

codeslotproject:
ok

...
Zeg eens wat er niet lukt. 'k heb de bestaande code eens gelezen, sommige delen moest ik even op m'n gemak lezen om alles te begrijpen, maar 't is nog wel vrij leesbare code.
Als ik de code lees, kan je 10 verschillende toegangcodes (van 4 cijfers lang) instellen, en als je een van de 10 ingeeft, opent de safe.
Nu moet je overal in het programma zoeken waar de lengte van de code impact kan hebben, en daar wijzigingen aan maken.

Hoeveel ken je al van programmeren in C++? want als jouw ervaring met de taal en standaardmanieren om problemen op te lossen heel beperkt is, zal dit idd lastige code zijn om te verwerken, maar als je iets neit begrijpt, vraag maar om hulp :slight_smile:

Racemaniac
We weten dat we van 2 bytes naar 3 bytes moeten gaan dus van een 4 cijferige naar een 6 cijferige code, we kunnen dit alleen niet vinden in het programma en we hebben een hoop geprobeerd. We hoopte dat iemand op dit forum ons kon helpen.
Alvast bedankt voor de hulp!

Je zit idd in het juiste deel van de code te kijken.
Maar aangezien je niet ziet wat er gewijzigd moet worden, begrijp je wss ook niet wat de code doet?
welke delen van de code begrijp je niet?

wij hebben nu 2 jaar 1 keer per week arduino maar we snappen nog niet veel van de code, we zijn nu wel zo ver gekomen dat we 6 cijfers in kunnen typen allleen slaat hij de code nu niet op.

codeslotproject:
wij hebben nu 2 jaar 1 keer per week arduino maar we snappen nog niet veel van de code, we zijn nu wel zo ver gekomen dat we 6 cijfers in kunnen typen allleen slaat hij de code nu niet op.

probeer me anders eens te beschrijven hoe hij de code opslaat
ik zie nu dat je idd al 6 getallen inleest, en dus de nieuwe code bekomt, maar je slaat inderdaad niet alles correct op.
je zit alleszins al heel dicht in de buurt, maar 'k denk niet dat je helemaal begrijpt hoe het opslagsysteem werkt. dus probeer eens te zeggen hoe (je denkt dat) het werkt, of wat je er niet van snapt (waarom wordt er gedeeld? wat is die % die er staat? wat doet heel dat ding?)

En nog een klein vraagje: heb je een idee van wat er nu precies gebeurt? Weet je wat er terug uitkomt als hij een code van 6 cijfers opslaat en terug inleest?
Want als je nu gewoon de code zit te wijzigen en te proberen of alles werkt, dat is héél vermoeiend. Ik hoop dat je Serial al kan gebruiken en als je aan't testen bent af en toe wat data naar de serial console terugschrijven zodat je kan zien waar je code al wel werkt, en waar niet.

Het is behoorlijk onbeschoft om alleen met "ok" te antwoorden en vervolgens niets te doen met alle adviezen (afgezien van niet cross posten...). Druk aub even op modify van de start post en plaats daar de code in code tags zoals ik liet zien. En als je dan weet hoe code tags werken, plaats deze dan ook in reply #5. Zo lastig is het niet :wink:

Dat deel van de code zit inderdaad een probleem, maar niet alleen daar...

Ga inderdaad stap voor stap na wat elk deel van de code doet en hoe de lengte van de invoer daar invloed op heeft.

Overigens, is dat code van de docent? Anders mag hij ook wel eens op cursus... A0 geen naam geven en een analogRead() doen terwijl het een knopje is.... En de klassieke overflow error bij gebruik van millis() :confused:

codeslotproject:
wij hebben nu 2 jaar 1 keer per week arduino maar we snappen nog niet veel van de code,

Welk deel snap je niet?

codeslotproject:
we zijn nu wel zo ver gekomen dat we 6 cijfers in kunnen typen allleen slaat hij de code nu niet op.

En dat laat je ons niet zien?

septillion:
Overigens, is dat code van de docent? Anders mag hij ook wel eens op cursus... A0 geen naam geven en een analogRead() doen terwijl het een knopje is.... En de klassieke overflow error bij gebruik van millis() :confused:
Welk deel snap je niet?
En dat laat je ons niet zien?

'k heb ook mixed feelings bij de code van de docent. ergens wel nog redelijk opgesplitst in aparte functies met goede namen, maar als't de bedoeling is dat beginnelingen het wijzigen, ga dan geen if statements zonder accolades doen, en documenteer de bewerkingen die je op de data doet een beetje. Getallen opsplitsen is voor ervaren programmeurs vrij triviaal, maar als je er nog nooit van gehoord hebt is't toch maar iets raars dat er staat...

En hij heeft al wel getoond wat hij gedaan heeft. Hij heeft de code gepost waar hij dentk dat hij alles moet wijzigen, en dat is al inclusief zijn wijzigingen (maar 'k had dat eerst ook niet gezien).

Ah, dat het inclusief wijzigingen was had ik ook niet gezien. Maar in vervolg, graag de hele code plaatsen met wijzigingen. Anders is het voor ons ook een groot knip en plak festijn als we het willen compilen.

Bedankt voor de hulp maar aan het programma van de docent lag het niet, hij werkt nu.

codeslotproject:
Bedankt voor de hulp maar aan het programma van de docent lag het niet, hij werkt nu.

wil je dan ook jouw oplossing hier posten? dat als mensen ooit iets gelijkaardigs tegenkomen ze jouw oplossing kunnen vinden? dat is ook het doel van een forum, dat het een archief wordt :).

En nee, de code van de docent werkte en was correct, maar ze mag imo wel wat duidelijker als het voor beginnelingen is om aan verder te werken. Dat is hetzelfde als je een tekst schrijft voor iemand die jouw taal nog niet zo goed spreekt, dan gebruik je ook makkelijkere woorden en kortere zinnen.
En ik hoop dat onze suggesties je wat verdergeholpen hebben :).

Nee, aan de code van de docent lag het niet maar zoals racemaniac ook zei, echt mooie code was dat ook niet.

En inderdaad bedankt voor het delen van enige informatie of ook maar eits doen met opmerkingen of aanwijzingen van ons. Als je dat in je verdere leven blijft dien wens ik je nog veel succes :wink: (En arme docent. Dan snap ik wel dat het na twee jaar nog niet lukt.)

En dan je posts aanpassen en de code eruit halen is het toppunt van onbeschoftheid! Puur om het weer iets compleet te maken hierbij de code uit het start topic:

/* 
  Toegangscontrole    "minimaal"                                groj03/20150525
  

  4-cijferige toegangscode met Arduino
  
  Pin 12 is verbonden met actuator / elektrisch slot
  10 geldige toegangscodes programmeerbaar
  Programmeren: 
  1. Houd button ingedrukt en druk op reset-knopje van Arduino
  2. (LED=paars) Selekteer geheugenplaats [0..9]
  3. (LED=blauw) voer nieuwe 4-cijferige toegangscode in  (LED=geel)
  4. (LED=rood)  wacht op toegangscode..
  
  Bij juiste toegangscode LED=groen.

*/

#include <EEPROM.h>

#include <Keypad.h>

const byte ROWS=4, COLS=3; 
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}   };

byte rowPins[ROWS] = {5, 4, 3, 2};     // connect to the row pinouts of the keypad 
byte colPins[COLS] = {8, 7, 6};        // connect to the column pinouts of the keypad  
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );     

byte          roodPin   =  9;          // rgb led, 270R tussen pin en kathode
byte          groenPin  = 10;          // rgb led, 270R tussen pin en kathode
byte          blauwPin  = 11;          // rgb led, 270R tussen pin en kathode
                                       // rgb led common anode naar +5V
byte          unlockPin = 12;          // naar actuator/relais elektrisch slot
byte          led       = 13;
unsigned long invoer;

void setup()
{
  pinMode(roodPin  ,OUTPUT); 
  pinMode(groenPin ,OUTPUT); 
  pinMode(blauwPin ,OUTPUT);
  pinMode(unlockPin,OUTPUT);
  pinMode(led      ,OUTPUT);
  pinMode(A0, INPUT_PULLUP);           // maakcontact tussen arduino A0 pin en GND
  if (analogRead(A0)<512) instellen(); // nieuwe code instellen: button ingedrukt houden en arduino resetten
}

//  lees_keypad()                         returnwaarde is van type long int
//  lees_eeprom(<index>)                  returnwaarde is van type long int, <index> is van type unsigned int
//  schrijf_eeprom(<index>,<getal>)       <getal> is van type long int,      <index> is van type unsigned int
//  openen()                              deuropener
//  rgb(<waarde>)                         RGB-led krijgt kleur volgens <waarde> (weerstand kleurcode)
//  instellen()                           toegangscodes wijzigen

void loop()
{
  rgb(2);
  invoer=lees_keypad();                // bij timeout geeft lees_keypad() returnwaarde=10000 
  if (invoer<10000)
  {
    for (int j=0; j<10; j++) 
    {
      if (invoer==lees_eeprom(j)) { openen(); break; }   
    }
  }
}


void schrijf_eeprom(unsigned int i, unsigned long getal)
{
  EEPROM.write((2*i  ),getal/100);
  EEPROM.write((2*i+1),getal%100);
}
  

unsigned long lees_eeprom(unsigned int i)
{
  return (100*EEPROM.read(2*i)+EEPROM.read(2*i+1));
}


unsigned long lees_keypad()
{
  char          key;
  unsigned long getal=0;
  unsigned long tijd;
  unsigned int  timeout=2000;

  for (byte j=0; j<4; j++)
  {
    tijd=millis();
    do
    {
      key=keypad.getKey();
      if ((j>0) & (millis()>(tijd+timeout))) return(10000);    
    } while ((!key) || (key=='*') || (key=='#'));
    rgb(4);
    getal=10*getal+key-'0';
  }
  return(getal);
}


void rgb(byte i)
{
  byte rood,groen,blauw;
  switch (i) 
  {
    case  0: { rood=  0; groen=  0; blauw=  0; break; } // zwart
    case  2: { rood=255; groen=  0; blauw=  0; break; } // rood
    case  3: { rood=180; groen= 35; blauw=  0; break; } // oranje
    case  4: { rood=127; groen= 90; blauw=  0; break; } // geel
    case  5: { rood=  0; groen=255; blauw=  0; break; } // groen
    case  6: { rood=  0; groen=  0; blauw=255; break; } // blauw
    case  7: { rood=127; groen=  0; blauw=127; break; } // paars
    case  9: { rood=127; groen=127; blauw=127; break; } // wit
    default: { rood=  0; groen=  0; blauw=  0; break; } // zwart
  }
  analogWrite(roodPin, 255-rood );
  analogWrite(groenPin,255-groen);
  analogWrite(blauwPin,255-blauw);  
}

void openen()
{
  rgb(5);
  digitalWrite(unlockPin,HIGH); digitalWrite(led,HIGH);
  delay(1500); 
  digitalWrite(unlockPin,LOW);  digitalWrite(led,LOW);
}

void instellen()
{
  char key;
  rgb(7);
  do key=keypad.getKey(); while (!key);
  rgb(6);
  if ((key>='0')&(key<='9'))
  {
    schrijf_eeprom((key-'0'),lees_keypad());
  }
}

Ik heb zojuist de hele thread zitten lezen (want ik lees alle Nederlandstalige posts sinds ik hier actief ben), en me steeds maar zitten afvragen waar het toch over gaat.
Een topic starter die het over bijgevoegde code heeft die niet te vinden is.
En anderen die daar dan inhoudelijk op reageren en die die code dus op een of andere wijze wel hebben kunnen zien.

De gasten van 'codeslotproject' gaan we hier als zodanig natuurlijk nooit van ze lang zal ie leven nooit meer zien.
Want die hebben hun naam gekozen uitsluitend om dit probleem van ze op te lossen.

Maar toch wil ik ze dit even meegeven:
Deze site gaat over leren en jullie hebben daar gebruik van gemaakt.
Wees dankbaar voor de ondersteuning die je gekregen hebt, en toon die dank door anderen ook de mogelijkheid te bieden ervan te leren.
Want daar gaat het hier over.
Ik mag aannemen dat jullie nog jong zijn en nog van allerlei zaken moeten leren.
Dit is daar dus een deel van.

Er is jullie al verteld dat een en ander ronduit onbeschoft is.
Mensen nemen de tijd om de thread te lezen en om met jullie mee te denken over het oplossen van jullie problemen.
De manier waarop jullie daarmee omgaan, is de reden waarom jullie steeds maar 1 keer geholpen worden en daarna nooit meer.
Jullie gooien je eigen glazen in.

MAS3:
Ik heb zojuist de hele thread zitten lezen (want ik lees alle Nederlandstalige posts sinds ik hier actief ben), en me steeds maar zitten afvragen waar het toch over gaat.
Een topic starter die het over bijgevoegde code heeft die niet te vinden is.
En anderen die daar dan inhoudelijk op reageren en die die code dus op een of andere wijze wel hebben kunnen zien.

De gasten van 'codeslotproject' gaan we hier als zodanig natuurlijk nooit van ze lang zal ie leven nooit meer zien.
Want die hebben hun naam gekozen uitsluitend om dit probleem van ze op te lossen.

Maar toch wil ik ze dit even meegeven:
Deze site gaat over leren en jullie hebben daar gebruik van gemaakt.
Wees dankbaar voor de ondersteuning die je gekregen hebt, en toon die dank door anderen ook de mogelijkheid te bieden ervan te leren.
Want daar gaat het hier over.
Ik mag aannemen dat jullie nog jong zijn en nog van allerlei zaken moeten leren.
Dit is daar dus een deel van.

Er is jullie al verteld dat een en ander ronduit onbeschoft is.
Mensen nemen de tijd om de thread te lezen en om met jullie mee te denken over het oplossen van jullie problemen.
De manier waarop jullie daarmee omgaan, is de reden waarom jullie steeds maar 1 keer geholpen worden en daarna nooit meer.
Jullie gooien je eigen glazen in.

helaas helemaal mee eens...

Dat is ook een van de redenen dat ik vrijwel geen energie meer steek in scholieren die alleen maar geïnteresseerd zijn dat wij hun huiswerk maken. 't is ook wel een beetje een generatie dingetje vrees ik.

nicoverduin:
Dat is ook een van de redenen dat ik vrijwel geen energie meer steek in scholieren die alleen maar geïnteresseerd zijn dat wij hun huiswerk maken. 't is ook wel een beetje een generatie dingetje vrees ik.

Meh, ze hebben het tenminste zelf gevonden (mits mss een beetje van onze tips)
dus dat is nog wel ok, maar gewoon dan alles proberen verwijderen...

racemaniac:
Meh, ze hebben het tenminste zelf gevonden (mits mss een beetje van onze tips)
dus dat is nog wel ok, maar gewoon dan alles proberen verwijderen...

Stel je voor dat de leraar achterhaald dat ze alles via forums hebben opgehaald..... Dat is onze toekomstige generatie ontwikkelaars.... geeft hoop :grin: