Arduinokiller:
Im Ablauf sieht es so aus, das an einem Leser bestimmte Teile ausser Betrieb gesetzt werden (je nach Transponderberechtigung). An einem zweitem Leser werden die Transponder eingelernt bzw. gelöscht (PIN-Code eingeben -> Funktion wählen -> Transponder einlesen -> speichern (als variable im Code und zur Datensicherung im EEPROM), beim Löschen wird der Transporder entweder eingelesen oder falls er nicht mehr vorhanden bzw. defekt ist, soll die Löschfunktion über eine Listauswahl am TFT-Display möglich sein (Löschen der Variable, sowie im EEPROM). Es ist auch angedacht, evtl. 2 ATMega2560 über I2C zu verbinden um nicht einen mit der kompletten Programmverwaltung zu überfordern (TFT-Display, RTC, Status-LEDs, XBees(Sensoren von autarken Anlageteilen), Keypad, SD-Card, ext. EEPROM, evtl. Ethernet- oder GSM-Modul für die Übermittlung von kritischen Zuständen, da die Anlage nicht immer vor Ort überwacht wird). Die Abfrage, ob der Transponder freigegeben ist, erfolgt in erster Line im Programmcode, das Auslesen aus dem EEPROM geschieht nur innerhalb der Setuproutine (nach Anlagenneustart).
Ich sehe schon: Du hast wilde Werke vor!
Aber ich sehe auch, dass Du bereits Probleme dabei hast, 165 Bytes mit Transpondercodes in ein EEPROM zu schreiben oder davon auszulesen. Das ist nicht gut für das, was Du insgesamt vorhast.
Du wirst wohl nicht umhin kommen, noch ein bischen was über Programmierung in C/C++ zu lernen.
Anbei ein Code, mit dem 15 Transpondercodes in das eingebaute Arduino-EEPROM gespeichert und daraus gelesen werden können.
Den Schreibbefehl habe ich in der Setup-Routine auskommentiert.
Bitte beachten, dass im EEPROM nur eine begrenzte Anzahl von Schreibvorgängen möglich ist!
Also das Schreiben per saveTransponderCodes(); im Sketch lieber nur bei Bedarf aktivieren, wenn wirklich was gespeichert werden soll, und die Zeile mit dem Funktionsaufruf ansonsten auskommentiert lassen.
Nachdem das EEPROM beschrieben wurde, können die Initialisierungsdaten der Transpondercodes natürlich aus dem Programm gelöscht oder verändert werden, ebenso wie der Funktionsaufruf von saveTransponderCodes(); im setup, denn die gespeicherten Codes werden ja im Setup immer wieder neu aus dem EEPROM eingelesen, wie sie im EEPROM stehen.
Falls nicht das eingebaute Arduino-EEPROM genutzt werden soll, sondern ein externes, müssen natürlich noch die Funktionen saveTransponderCodes() und readTransponderCodes() so umgeschrieben werden, dass die Speicherung im externen statt im internen EEPROM erfolgt.
Aber bis das Programm alles das kann, was Du in Deinem letzten Posting erläutert hast, wirst Du wohl noch ein bischen mehr dranstricken müssen als diese Änderung aufs externe EEPROM.
#include <EEPROM.h>
#define NUMVALIDCODES 15
char transponderCodes[NUMVALIDCODES][11]={
"1234567890",
"2234567890",
"3234567890",
"4234567890",
"5234567890",
"6234567890",
"7234567890",
"8234567890",
"9234567890",
"0234567890",
"A234567890",
"B234567890",
"C234567890",
"D234567890",
"E234567890"
};
// Definiere einen Pointer auf bytes,
// mit dem auf transponderCodes byteweise zugegriffen werden kann
byte* wert = (byte*) &transponderCodes;
// Speicherstelle festlegen, ab der im EEPROM gespeichert werden soll
#define EEPROMOFFSET 150
void saveTransponderCodes()
{
Serial.println(F("Please wait, writing to EEPROM..."));
for (int i=0;i<sizeof(transponderCodes);i++)
EEPROM.write(EEPROMOFFSET+i, wert[i]);
Serial.println(F("EEPROM programming ready."));
Serial.println(F("TAKE CARE: Write operations in EEPROMs are LIMITED!!!"));
}
void readTransponderCodes()
{
for (int i=0;i<sizeof(transponderCodes);i++)
wert[i]=EEPROM.read(EEPROMOFFSET+i);
}
void setup()
{
Serial.begin(9600);
// saveTransponderCodes();
readTransponderCodes();
for (int i=0;i<NUMVALIDCODES;i++)
Serial.println(transponderCodes[i]);
}
void loop()
{
}
Arduinokiller:
Speicher ist ausreichend, das EEPROM hat 64KB (24C65).
64 KB ist etwas zu optimistisch angegeben.
Laut Datenblatt sehe ich 64 KBit = 64*1024 Bit = 65536 Bit = 65536/8 Byte = 8192 Byte = 8 KB.
8 KB ist natürlich immer noch reichlich zum Speichern von nur 165 Bytes.
Aber wie oben im Sketch gezeigt, passen 165 Bytes auch locker in das interne EEPROM eines Arduino.