чтение пароля из EEPROM

bad_user
Offline
Зарегистрирован: 13.11.2015

Доброго всем времени суток! 

Подскажите как быть при использовнии библиотеки <password.h>

задача состоит в том, чтобы была возможность изменить пароль пользователя с клавиатуры, затем записать его в eeprom, а при последующих запусках читать от туда.

столкнулся с проблемой на этапе чтения пароля из eeprom. дело в том, что для библиотеки <password.h> пароль задается так:

Password password1 = Password( "1234" );

либо можно задать пароль переменной так: 

Password password1 = Password(admin_pass);

но тогда переменная admin_pass должна быть объявлена как

char* admin_pass="1234";

Подскажите как можно считав из eeprom пароль перевести его к нужному типу данных?

bad_user
Offline
Зарегистрирован: 13.11.2015

наверное черезчур непонятно объяснил проблему :) 

как  значения из EEPROM: 

int a1=EEPROM.read(21);  // 1
int a2=EEPROM.read(22);  // 2
int a3=EEPROM.read(23);  // 3
int a4=EEPROM.read(24);  // 4

привести их к такому виду: 

char pass[]={'1','2','3','4', '\0'};

 

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Да все понятно, не понятно, что Вам непонятно! :)

Ну как то так можно например:

#include <EEPROM.h>
int start_epp_adr=21; 
char pass[]={'1','2','3','4', '\0'};

void setup() {

}

void loop() {

for (int i=0; i <= 3; i++){
pass[i]= EEPROM.read(start_epp_adr);
 start_epp_adr++;
 if i=3 {  char pass[4]= '\0'; }
 }
}

Массивы.

Да, поправлюсь, эта строка

 if i=3 {  char pass[4]= '\0'; }

ненужна для чтения из памяти, только для записи в массив. В вашем случае ее можно исключить увеличив i счетчик массива с 3 на 4. Смотря что храниться у Вас в ячейках памяти. Я думаю я понятно обьяснил?

Да, еще добпавлю, вернее исправлю косяк, \0 -это не один символ, а два и заливать их в массив, нужно отдельно в разные елементы массива, думаю разберетесь как?

 

bad_user
Offline
Зарегистрирован: 13.11.2015

Это понятно. проблема не в массиве, а в типах данных. 

Вы если бы запустили этот код, то увидели бы что он не работет =) 

в EEPROM хранится число  (1) , а в массив мне нужно вставить символ  '1'  

Ваш код прекрасно бы подошел для массива int pass [] {1,2,3,4};  а мне нужно char pass[]= {'1', '2', '3', '4'};

Вот, что мне не понятно =)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

для типов char используйте EEPROM.get, EEPROM.put , все это есть в примерах IDE

bad_user
Offline
Зарегистрирован: 13.11.2015

Valera19701 пишет:

для типов char используйте EEPROM.get, EEPROM.put , все это есть в примерах IDE

Огромное спасибо! все оказалось проще, чем я думал.  не знал про эти методы.