Another read text filed from SD card thread...

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