Dit kan worden bereikt met een eenvoudige preprocessor-macro:
#define readEE(VAR) VAR = readEEPROM(AT24C32_ADDRESS, 1, VAR ## Pos)
U kunt dan gebruiken:
readEE(foo);
en het zal worden uitgebreid naar:
foo = readEEPROM(AT24C32_ADDRESS, 1, fooPos);
De operator ##
in macro's breidt zich uit aan beide zijden (VAR en Pos) en voegt vervolgens de resultaten samen. Omdat VAR zelf een macro is (wat je ook doorgeeft als je de macro aanroept), wordt het vervangen door die waarde, maar Pos, omdat het geen macro is, blijft het gewoon Pos. U krijgt dus uw variabelenaam samengevoegd met het woord Pos.
Merk op dat je dat niet in een lus met variabelenamen in een array kunt gebruiken - simpelweg omdat variabelenamen alleen voorkomen in de broncode, niet in de gecompileerde code, dus je kunt niets doen met die variabelenamen als de code eenmaal is gecompileerd. Daarom moet u de preprocessor gebruiken om het werk te doen.
Ja, het betekent dat je nog steeds 120 regels code moet schrijven voor alle 120 variabelen, maar ze worden gewoon ingekort tot readEE (varname);
.
Een betere oplossing is echter om de struct-methode van Mikael te gebruiken of om gewoon een array te gebruiken en anders over het concept van namen na te denken:
uint8_t data[120];
for (int i = 0; i < 120; i++) {
data[i] = readEEPROM(AT24C32_ADDRESS, 1, i);
);
Dus nu staan al uw variabelewaarden in de array data []
, en u moet in uw programma weten welke waarde dat is - en u kunt dat doen door namen voor elke positie als preprocessor te definiëren macro's:
#define FAN_SPEED 12
#define N1_TOGGLE 95
#define LEDS_TOGGLE 7
Gebruik vervolgens die macro's in plaats van de cijfers:
Serial.println(data[FAN_SPEED]);
Als alternatief kunt u de macro's gebruiken om namen van variabelen te "maskeren":
#define fanSpeed data[12]
#define n1Toggle data[95]
#define ledsToggle data[7]
Er is echter één ding dat je misschien hebt opgemerkt: niets hier verkort je code, het verplaatst gewoon de zaken een beetje. Laten we eerlijk zijn - je hebt 120 variabelen opgeslagen op 120 locaties. Wat je ook doet, je zult nog steeds 120 wijzers van een bepaalde vorm moeten hebben voor die variabelen en hun locaties. Het enige dat u echt kunt doen, is de methode kiezen die de meeste leesbaarheid biedt, zodat iemand anders die naar uw code kijkt begrijpt wat er aan de hand is. Wat je ook doet, je hebt een lange lijst met variabelen of variabelenamen om te definiëren of in te stellen, wat veel typen betekent.