I have created myJSON
library to simplify read and write values from/ to FLASH of my ESP8266 NodeMCU/ Wemos Mini.
I do not want to "mess up" the question, posting my entire code/ library - but to try to explain what happens -
I get a 0
value when reading a specific key
(and not its saved value
). My assumption is that is has nothing to do with myJSON
library, but my understanding in returning a value from a function.
Code is as follows:
(some explanations first):
1) json
is an instance of myJSON
library.
2) json.setValue(key, value)
- gets a key
and a value
( char/ int) and save it to FLASH.
3)json.getINTValue(key, return_var)
- gets a key
and return its int
value to return_var
. function return 1 - for successful read, and 0 when not.
inside setup()
int int_val;
// json.setValue("int_key",343); // commented out after first run - to be sure is is saved and read from flash.
Serial.println(json.getINTValue("int_key",int_val)); // NOTE 2
Serial.print("Value is: "); // NOTE 3
Serial.println(int_val); // NOTE 3
myJSON
( only relevant code )
bool myJSON::getINTValue (const char *key, int retval){
StaticJsonDocument<DOC_SIZE> tempJDOC;
myJSON::readJSON_file(tempJDOC);
bool hasKey = tempJDOC.containsKey(key);
if (hasKey){
retval = tempJDOC[key];
Serial.print("retval :"); // NOTE 1
Serial.println(retval); // NOTE 1
return 1;
}
else {
return 0; // when key is not present
}
}
void myJSON::setValue(const char *key, char *value){
StaticJsonDocument<DOC_SIZE> tempJDOC;
myJSON::readJSON_file(tempJDOC);
tempJDOC[key]=value;
myJSON::saveJSON2file(tempJDOC);
}
void myJSON::setValue(const char *key, int value){
StaticJsonDocument<DOC_SIZE> tempJDOC;
myJSON::readJSON_file(tempJDOC);
tempJDOC[key]=value;
myJSON::saveJSON2file(tempJDOC);
}
result is (SEE NOTATIONS):
21:01:03.198 -> retval :343 // OUTPUT NOTE 1
21:01:03.198 -> 1 // OUTPUT NOTE 2
21:01:03.198 -> Value is: 0 // OUTPUT NOTE 3
As far a I could understand :
1) setValue
works as needed ( inc. saving to flash ).
2) unexplained besides getting value = 0, is when setting a char
value ( there are 2 myJSON::setValue
functions to deal with int
and char
), code works as needed.
Appreciate any help ( and sorry for my English ).
Guy
bool myJSON::getINTValue(const char *key, int &retval){
char
variable ?retval
?