Werte im EEPROM über Seriellen Port ändern

Um einen Wert im EEPROM ändern zu können, muss man die Adresse wissen an dem dieser gespeichert ist.

Wenn man im Terminal eine Zahl, z.B. 205, eingibt dann wird der Wert der unter dieser Adresse gespeichert ist, ausgegeben.
Will man diesen Wert nun ändern, gibt man einfach die Adresse gefolgt von einem = und dem neuen Wert ein.

reichelt elektronik – Elektronik und PC-Technik


Ich ändere so z.B. meine DeviceAdressen wenn ich einen TemperaturSensor tauschen will.

205=10,16,2E,57,02,08,00,2F

 

const int BUFSIZE=50; 
char buffer[BUFSIZE]; 
char serialResponseStr[BUFSIZE];
char stringBuffer[BUFSIZE+1];





void loop()
{
  if(Serial.available()) changeEEPROMValue();
}





/******************************************************
  Wert im EEPROM an der angegebenen Adresse ändern    *
  Eingabe über den Seriellen Port                     *  
  Adresse = Wert                                      *
  zB. 2=5A:A2:DA:0D:56:7A zum ändern der Mac-Adresse  *
******************************************************/
void changeEEPROMValue()
{
  char *adresse;
  char *wert;
  
  if(Serial.available()>0)
  {
    char c = Serial.read();    
    
    if(c != '\n')
    {    
      serialResponseStr[x++] = c;
    }
    else
    {
      serialResponseStr[x++] = '\0';
     
      strncpy(stringBuffer, serialResponseStr, BUFSIZE); 
      adresse = strtok(serialResponseStr, "="); 
      wert = strtok(NULL, "=");
     
      if(wert)
      {
        //Alten Wert an der Adresse aus EEPROM lesen
        if(eeprom_read_string(atoi(adresse), buffer, BUFSIZE)) {
          Serial.print("Alter Wert an Adresse: ");
          Serial.print(adresse);
          Serial.print(" = ");
          Serial.print(buffer);
          
          //Neuen Wert in EEPROM speichern
          strcpy(buffer, wert); //25 Zeichen
          eeprom_write_string(atoi(adresse), buffer);
          eraseBuffer();
        }
        
        //Neuen Wert aus EEPROM auslesen
        if(eeprom_read_string(atoi(adresse), buffer, BUFSIZE)) {
          Serial.print(", Neuer Wert = ");
          Serial.println(buffer);
          eraseBuffer();
          initializeVariables();
          Serial.println(interval);
        }
      }
      else
      {
        if(eeprom_read_string(atoi(adresse), buffer, BUFSIZE)) {
          Serial.print("Wert an Adresse: ");
          Serial.print(adresse);
          Serial.print(" = ");
          Serial.println(buffer);
          eraseBuffer();
        }
      }
      x=0;
    }
  }
}

Über profwebapps

Programmierer, Webdesigner, Grafiker, Mac-User, Blogger, Screencaster. profwebapps ist auch bei Google+ vertreten

Kommentar verfassen