hey PaulS-
just wanted to come back and say thanks for the help..
it seemed to work great.. and I am now loading/changing my defaults based on what is on the SD card..
here is what I finally put at the ed of the set-up routine:
//parse data in text file on SD card
if (!params.open(root, "defaults.txt")) {
// handle open failure here
putstring_nl("CANT OPEN DEFAULTS.TXT");
}
// read and print file to serial port
char record[80]; // store the record here
byte index = 0;
uint8_t c;
while(params.read(&c, 1) == 1){
// read until we found the carriage return...
if(c == '\n' || c == '\r') {
// carriage return encountered, parse the data we collected so far
if(index > 0){
char *nameToken = strtok(record, "=");
if(nameToken){
//putstring("CURRENT NAME TOKEN: ");
//Serial.println(nameToken);
//ammo default check
if(strcmp(nameToken, "maxammo") == 0){
char *valueToken = strtok(NULL, "\0");
if(valueToken){
//putstring("VALUE TOKEN: ");
//Serial.println(valueToken);
maxAmmo = atoi(valueToken);
ammoCount = maxAmmo;
}
else{
//putstring("DEFAULT VALUE USED: ");
//if param is missing, default to 99
maxAmmo = 99;
ammoCount = maxAmmo;
}
}
//safety default check
if(strcmp(nameToken, "safety") == 0){
char *valueToken = strtok(NULL, "\0");
if(valueToken){
//putstring("VALUE TOKEN: ");
//Serial.println(valueToken);
//safety = atoi(valueToken);
safety = atoi(valueToken);
}
else{
// putstring("DEFAULT VALUE USED: ");
//if param is missing, default to 99
safety = 0;
}
}
//manual color (mColor) default check
if(strcmp(nameToken, "scolor") == 0){
char *valueToken = strtok(NULL, "\0");
if(valueToken){
//putstring("MANUAL FIRE COLOR: ");
//Serial.println(valueToken);
//check to assign red, green or blue pin
if(strcmp(valueToken, "r") == 0){
mColor = ledR;
}
else if(strcmp(valueToken, "g") == 0){
mColor = ledG;
}
else if(strcmp(valueToken, "b") == 0){
mColor = ledB;
}
else{
//default pin assigned if value other than r, g, b, is assigned
mColor = ledB;
}
}
else{
//putstring("DEFAULT MANUAL COLOR USED: ");
//if param is missing, default to blue
mColor = ledB;
}
}
//auto color (aColor) default check
if(strcmp(nameToken, "acolor") == 0){
char *valueToken = strtok(NULL, "\0");
if(valueToken){
//putstring("AUTO FIRE COLOR: ");
//Serial.println(valueToken);
//check to assign red, green or blue pin
if(strcmp(valueToken, "r") == 0){
aColor = ledR;
}
else if(strcmp(valueToken, "g") == 0){
aColor = ledG;
}
else if(strcmp(valueToken, "b") == 0){
aColor = ledB;
}
else{
//default pin assigned if value other than r, g, b, is assigned
aColor = ledB;
}
}
else{
//putstring("DEFAULT MANUAL COLOR USED: ");
//if param is missing, default to red
aColor = ledR;
}
}
}
}
// reset index to read next record
index = 0;
record[index] = '\0';
}
// or check if we encounter a line feed too...
else if(c != '\r'){ // ignore line feed
// save the character
record[index++] = c;
// append a NULL
record[index] = '\0';
}
}
params.close();
Im sure eventually I'll come back to work on optimization and better coding practices.. (after getting a working version now)
something like a 'switch case' statement would help? streamline make things more optimized?
Also if your in a 'good mood'.. maybe you can tell me why a putstring_ln() line makes my code work..and when commenting it out.. the motor breaks?
http://arduino.cc/forum/index.php/topic,123117.0.html
(my guts says the toggle is too fast to get the motor 'going enough' before being toggled off...and the putstring_nl() gives just enough room to work still?)
thanks