EEPROM schrijven en lezen

Hallo

Ik zit in het 6de middelbaar en maak als GIP een toegangspoortje met een RFID systeem zodat je mensen kan doorlaten of niet.

Voor mijn programma heb ik al gevonden hoe je een mifare kaart moet uitlezen met een met dr Mfrc522 lezer.

Ik zou graag aan de hand van een drukknop de ingelezen UID code op het EEPROM geheugen willen schrijven zodat ik dan alle codes die op het EEPROM geheugen staan zou kunnen toegang geven en alle codes die er niet in staan geen toegang geven.

Hierbij heb ik twee problemen en ik hoopte dat jullie mij misschien zouden kunnen helpen.

Eerste probleem: De UID code is 4bytes lang en je kan maar maximum 1 byte op het EEPROM geheugen schrijven daarvoor kan je dan get gebruiken want bij deze kan je een float / int of struct variable voor gebruiken. Nu is mijn code een hex code dus moet ik deze dan veranderen naar zo een variable ?

Tweede probleem: Als ik dan wil kijken ofdat de UID code die ik net heb ingelezen in het EEPROM geheugen staat om te kijken ofdat deze kaart doormag of niet. Hoe moet je dan vanuit dat geheugen halen? Want normaal zou ik dat doen met EEPROM get maar dan heb je het adres nodig waar de code is opgeslaan.

Ik weet niet of dat dit mogelijk is om te maken maar ik hoop van wel.

In ieder geval bedankt om te lezen en indien je mij kan helpen. Alle hulp is welkom.
(In de attachments mijn programma dat ik tot nu toe heb)

programma_met_EEPROM_2.ino (3 KB)

Hallo Stefanie,

Ik ga heel eerlijk tegen je zijn, ik beschik op dit moment niet genoeg kennis over EEPROM, en ik vermoed dat dit een steile leercurve is om je te kunnen helpen.

Ik vraag me echter wel af waarom je voor een EEPROM hebt gekozen, of was dit een keuze die iemand anders voor je heeft gemaakt.

Ikzelf zou indien ik zoiets moest maken opteren voor een SD Card.

Ik wens je er veel succes mee, en als het af is zou ik het graag zien werken.

Groetjes Mike

Als je naar EEPROM schrijft, geef je het adres op waar je schrijft. Als je de EEPROM leest gebruik je datzelfde adres.

Als je EEPROM.put gebruikt kun je meerdere bytes in een (1) keer schrijven. EEPROM.get kan meerder bytes in een (1) keer lezen.

Hieronder een simpele demo.

#include <EEPROM.h>

byte uid[] = {0, 1, 2, 3};

void setup()
{
  Serial.begin(57600);

  EEPROM.put(0, uid);
}

void loop()
{
  byte data[4];
  EEPROM.get(0, data);

  for (uint8_t cnt = 0; cnt < sizeof(data); cnt++)
  {
    if (data[cnt] < 0x10) Serial.print(0);
    Serial.print(data[cnt]);
    Serial.print(" ");
  }

  for (;;);
}

Voor het vergelijken kun je memcmp() gebruiken.

Als je meerdere UIDs in EEPROM wilt opslaan moet je de adressen iedere leer met 4 ophogen (lezen en schrijven) en zul je moeten bijhouden hoeveel UIDs je hebt opgeslagen. Je zult dan de UIDs een voor een uit de EEPROM moeten lezen en vergelijken met the UID van de kaart.

// PS
Net even naar je code gekeken (sorry, in eerste instantie gemist).
1)
Gebruik geen String (hoofdletter S); het is de oorzaak van onverwachte problemen ten gevolge van geheugen fragmentatie, vooral als je veel gebruik maakt van samenvoegen.
2)
Als je een String opslaat, sla je de pointer naar de tekst op en niet de tekst die bij de String hoort.

Mikeb1970:
Ikzelf zou indien ik zoiets moest maken opteren voor een SD Card.

Waarom geld verspillen :smiley: