enum t_knownTypes : byte {INTEGER, CONST_CHAR_STAR, FLOAT};
struct t_var {
const char * name;
t_knownTypes type;
void * varPtr;
};
int intVar = 3;
const char * someText = "Some Text";
float floatVar = 3.1415;
t_var variables[] = {
{"intVar", INTEGER, &intVar},
{"someText", CONST_CHAR_STAR, &someText},
{"floatVar", FLOAT, &floatVar},
};
t_var * getInfoFor(const char * varName) {
for (auto & v : variables)
if (!strcmp(varName, v.name)) return &v;
return nullptr;
}
void printVariable(const char * varName) {
t_var * ptr = getInfoFor(varName);
Serial.print(varName);
Serial.print(F(" = ["));
if (ptr) {
switch (ptr->type) {
case INTEGER: Serial.print(*((int*) ptr->varPtr)); break;
case CONST_CHAR_STAR: Serial.print(*((const char **) ptr->varPtr)); break;
case FLOAT: Serial.print(*((float*) ptr->varPtr)); break;
}
Serial.println(F("]"));
} else Serial.println(F("unknown variable]"));
}
void setup() {
Serial.begin(115200);
printVariable("intVar");
printVariable("someText");
printVariable("floatVar");
printVariable("does not exist");
}
void loop() {}