Смена пароля в Password.h
- Войдите на сайт для отправки комментариев
Всем привет!
Я использую матричную клавиатуру 4х4 и библиотеки Keypad.h и Password.h. Всем известный пример работает без проблем:
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip Password password = Password( "1234" ); const byte ROWS = 4; //four rows const byte COLS = 4; //three columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {13, 12, A4, A5}; //connect to the row pinouts of the keypad byte colPins[COLS] = {A3, A2, A1, A0}; //connect to the column pinouts of the keypad // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); keypad.addEventListener(keypadEvent); //add an event listener for this keypad } void loop(){ keypad.getKey(); } //take care of some special events void keypadEvent(KeypadEvent eKey){ switch (keypad.getState()){ case PRESSED: Serial.print("Pressed: "); Serial.println(eKey); switch (eKey){ case '*': checkPassword(); password.reset(); break; case '#': password.reset(); break; default: password.append(eKey); } } } void checkPassword(){ if (password.evaluate()){ Serial.println("Success"); //Add code to run if it works }else{ Serial.println("Wrong"); //add code to run if it did not work } }
У меня никак не получается програмно менять пароль. То есть мне нужно с клавиатуры набирать новый пароль. Но ничего не выходит. Переменную eKey я сделал глобальной, и теперь ее значение можно получить из любой точки программы. Переменная содержит значение последней нажатой клавиши, это символ типа char в формате '1'.
Порывшись в библиотеке, я узнал что задавать новый пароль можно двумя командами:
Password::Password(char* pass){...}
и
Password::set(char* pass){...}
По сути это одна и таже команда. И вот тут у меня полный ступор. Команды принимают в качестве аргумента переменную типа char*. Но как ее собрать не понятно. Я пробовал собирать переменную так:
char pass; ... pass += eKey;
потом пробывал устанавливать новый пароль. Пробовал обе команды:
Password password = Password(pass); и password.set(pass);
Но результат всегда был один и тот же: Старый пароль (1234) стирался и уже не подходил, а новый (на пример: "123456") тоже не подходил. То есть новый пароль вроде бы и задавался но не правильно. Можете помочь? Как правильно собирать переменную типа char* и задавать новый пароль?
А поставить Serial.println(pass) после того как собрали, чтобы посмотреть правильно ли собралось что не позволило? Религия или Клапауций запретил?
Поставьте, посмотрите, правильно ли собирается. И нам расскажете.
А когда убедитесь, что нифига Вы таким способом не собираете, то попробуйте вот это.
Только что проверил - собирается не правильно. Вместо собранной переменной получается "квадратик", или что-то другое:
Как правильно собрать?
Если не хотате помогать - просто пройдите мимо. А посылать искать в гугле - это не помощь.
Попробовал так:
Результат тот же, неправильно собирается:
Можете что-то подсказать?
Хотел помочь, так как с этим дурацким кейпадом как-то бился тоже, но придется пройти мимо :(
ты слышал чонить за массив символов?
Попробовал так:
Результат тот же, неправильно собирается:
Так и будет до тех пор, пока вы к значению однобайтового char будете бесконечно добавлять значение другого однобайтового char. Попробуйте хотя бы к String добавлять для начала.
Как правильно собрать?
Если не хотате помогать - просто пройдите мимо. А посылать искать в гугле - это не помощь.
Можете что-то подсказать?
Я не знаю, что Вы понимаете под помощью. Я Вам уже подсказал, что Вам нужно изучить работу со строками. Именно изучить, а не тыкаться методом тыка, как Вы это делаете. Но искать Вас посылать нельзя. Чем я могу помочь? Найти за Вас и дать Вам конкретные ссылки? Или чем? Скажите.
Тех кого нельзя посылать в гугл, нужно посылать нах, потому что это нежелающий ничему учиться халявщик.
Тех кого нельзя посылать в гугл, нужно посылать нах, потому что это нежелающий ничему учиться халявщик.
+5
Тех кого нельзя посылать в гугл, нужно посылать нах, потому что это нежелающий ничему учиться халявщик.
Обычно люди стесняются своей дикости, а вы это отчаянно демонстрируете. Грубость-признак бессилия. У вас есть одна хорошая черта,она делит вашу задницу пополам.
Сказать что кто-то не прав и послать учиться - это все равно что просто послать. Так как помощи - "0". Даже не понятно в чем имено человек ошибся. Я не халявщик. Суда на форум я обращаюсь только в том случае если после многих попыток ничего не вышло. Я не прошу написать ВЕСЬ код за меня. Я сам все сделаю. Прошу лишь помощи в конкретном аспекте. Не хотите помогать? Ну так и проходите мимо и не тратьте ни свое ни мое время.
Если взять и (как сказал sadman41) собирать в строку типа:
то срока собирается правильно, но как ее потом перевести в правильный формат? :
Password::set(char* TempPass){...}Просто так, понятное дело, не работает, так как функция принимает char, а TempPass - String. Я пробовал делать преобразование, но ничего не вышло.
По поводу сборки массива. Пробовал так, но не работает:
пробовал вот так, тоже не работает:
Если я что-то делаю не так, то покажите как правильно. Исправьте.
forfrends
Выложите весь код.
А смысл выкладывать весь код? В данном случае проблема определилась, и суть вопроса сводится к одному: как собрать переменную формата char из других char?
Есть переменная char eKey которая содержит в себе символ нажатой кнопки в формате '1'.
Функция задания пароля выглядит вот так:
Password::Password(char* pass){...} или Password::set(char* pass){...}вопрос: как правильно собрать переменную char* pass из char eKey? Длинна pass может быть до 8-ми символов.
Если взять и (как сказал sadman41) собирать в строку типа:
то срока собирается правильно, но как ее потом перевести в правильный формат? :
Password::set(char* TempPass){...}xDriver, спасибо так заработало!
суть вопроса сводится к одному: как собрать переменную формата char из других char?
НИКАК.
В данном случае Пассворд имеет тип char*, а не char. Вы смысл оператора звездочка (*) понимаете? - он тут меняет все.
ну и зря. Это не помощь, это подаяние
Из всех кто ответил, только оди человек привел пример, которы хоть и "боком" помог решить проблему.
Из всех кто ответил, только оди человек привел пример, которы хоть и "боком" помог решить проблему.
потому что примеры - бесполезны для новичков. Они на них не учатся.
Наиболее правильный совет был - пойти в гугль и изучить работу с символьными массивами - теми самыми char*., которые вы путаете с char
А смысл выкладывать весь код? В данном случае проблема определилась, и суть вопроса сводится к одному: как собрать переменную формата char из других char?
Есть переменная char eKey которая содержит в себе символ нажатой кнопки в формате '1'.
Ну, раз в целом все работает со String и вы уже догадались сделать массив char, то открою вам секрет: строка есть символьный массив, в каждом элементе которого лежит один char. При получении нового символа просто кладите его в следующий элемент. Завершать строку нужно знаком '\0', иначе системные функции не поймут, что это строка.
forfrends
b707 хотел сказать что вы не можете в функцию передать строку, а можете передать туда только указатель на массив символов.
вот некоторые ссылки на примеры, которые я пересмотрел и перепробовал:
http://cppstudio.com/post/695/
http://cppstudio.com/post/698/
http://www.mir-koda.ru/full_leson_cpp.php?id=15
http://www.mir-koda.ru/full_leson_cpp.php?id=16
http://scrutator.me/post/2014/09/02/cpp_strings_basics.aspx
https://prog-cpp.ru/c-string/
Нормальных примеров работы с *char, я так и не нашел...
forfrends
Вам нужно это Тык
Нормальных примеров работы с *char, я так и не нашел...
А я ведь Вас спрашивал: "Вам найти и дать ссылку?". Вы не ответили - сами себе злобный буратино.
ЕвгенийП, дайте ссылку
Вот здесь про строки как таковые - объясняется, что просто массив, объясняется смысл нулевого символа (часто скрытого) и т.п.
А вот здесь продолжение - подробно с примерами разобраны самые часто используемые функции работы со строками.
Ну тогда еще по указателям Тык
ЕвгенийП, дайте ссылку
Имя, сестра! Имя! (с)