20-03-2020, 23:43
Ogarnąłem to z czym miałem problem i jest prawie ok, prawie bo czegoś nie ogarniam. Przy pierwszym zapisie hasła do eeprom jest ok, ale gdy chcę zmienić hasło ponownie i zapisać je do eeprom, to otrzymuje takie coś:
Tak wiem, że zapis jest w kolejnych bajtach, pytanie dlaczego tak się dzieje? Oczywiście próbowałem zerować zmienną index = 0; licząc, że zapis nastąpi od pierwszego bajta, ale nic to nie daje.
zmienne:
Część kodu z która mam problem:
Tak wiem, że zapis jest w kolejnych bajtach, pytanie dlaczego tak się dzieje? Oczywiście próbowałem zerować zmienną index = 0; licząc, że zapis nastąpi od pierwszego bajta, ale nic to nie daje.
zmienne:
Kod:
int addr = 0;
int index = 0;
int currentAddr = 0;
Część kodu z która mam problem:
Kod:
void changePassword() {
x = 0;
lcd.clear();
lcd.print(F("ZMIANA PINU #-OK"));
newPasswordString = Password();
zapisEEPROM();
newPasswordString.toCharArray(newPassword, newPasswordString.length()+1);//convert string to char array
password.set(newPassword);
resetPassword();
Serial.println(newPasswordString.length());
if (newPasswordString.length() < minPasswordLength){
newPasswordString.remove(0,20);
Serial.println(newPasswordString.length());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ZA KROTKI PIN"));
lcd.setCursor(0, 1);
lcd.print(F("MIN. DL. PINU"));
lcd.setCursor(15, 1);
lcd.print(minPasswordLength);
x = 0;
delay(3000);
changePassword();
}
if (newPasswordString.length() > maxPasswordLength){
newPasswordString.remove(0,20);
Serial.println(newPasswordString.length());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("ZA DLUGI PIN"));
lcd.setCursor(0, 1);
lcd.print(F("MAKS DL. PINU"));
lcd.setCursor(15, 1);
lcd.print(maxPasswordLength);
x = 0;
delay(2000);
changePassword();
}else{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("PIN ZMIENIONY NA:"));
lcd.setCursor(0, 1);
lcd.print(newPasswordString);
delay(3000);
lcd.clear();
x = 0;
}
}
String Password(){
lcd.setCursor(x, 1);
String password = "";
while (1){
char key = kpd.getKey();
if (key){
if ((key=='1') || (key=='2') ||
(key=='3') || (key=='4') || (key=='5') ||
(key=='6') || (key=='7') || (key=='8') ||
(key=='9')) // jesli wcisnolem klawisze 1 - 9
{
lcd.print(key);
lcd.print(" ");
password = password + key;
}
if (key=='#'){break; }// zatwierdzamy wybor
}
}
return password;
}
void zapisEEPROM(){
for (index = 0; index < newPasswordString.length(); index++) {
EEPROM.write(addr, newPasswordString[index]);
delay(10);
Serial.print("Writing ");
Serial.print(newPasswordString[index]);
Serial.print(" in address ");
Serial.println(addr);
addr++;
}
EEPROM.write(addr, '\0');
odczytEEPROM();
}
void odczytEEPROM(){
EEPROM.read(addr);
int currentAddr = 0;
char readChar;
String readGreeting = "";
while (readChar != '\0') {
readChar = EEPROM.read(currentAddr);
delay(10);
if (readChar != '\0') {
readGreeting += readChar;
}
currentAddr++;
Serial.print(readChar);
Serial.print(" in address ");
Serial.println(currentAddr);
}
Serial.print("Final string read from EEPROM: ");
Serial.println(readGreeting);
if (currentAddr==addr){
currentAddr=0;}
}