Записать переменную после ее ввода с кнопок.
- Войдите на сайт для отправки комментариев
Сб, 17/08/2013 - 22:53
Требуется ваша помощь!
Необходимо записать значение переменной,введеной с кнопок.
(int Skeys[5]={5,3,2,4,1}; и int Pkeys[5]={4,3,2,1,5};) Их значения нужно изменить!
Например,я хочу сделать функцию смена пароля для замка на двери.
Буду благодарен за помошь!
P.S. Код скорее всего ужасен,тк не имею большого опыта программирования .
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); // Нажатые кнопки int button; int led = 13; int Key = 1234; int PKey = 0; int Pkeys[5]={4,3,2,1,5}; int SKey = 0; int Skeys[5]={5,3,2,4,1}; int KKey = 12345; const int BUTTON_NONE = 0; const int BUTTON_RIGHT = 1; const int BUTTON_UP = 2; const int BUTTON_DOWN = 3; const int BUTTON_LEFT = 4; const int BUTTON_SELECT = 5; int getPressedButton() { int buttonValue = analogRead(0); if (buttonValue < 100) { return BUTTON_RIGHT; } else if (buttonValue < 200) { return BUTTON_UP; } else if (buttonValue < 400){ return BUTTON_DOWN; } else if (buttonValue < 600){ return BUTTON_LEFT; } else if (buttonValue < 800){ return BUTTON_SELECT; } return BUTTON_NONE; } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print(" ENTER PASSCODE"); lcd.setCursor(0, 2); lcd.print("=====LOCKED====="); pinMode(led, OUTPUT); } void passch() // Проверка пароля двери и ее открытие { button = getPressedButton(); if(button == Pkeys[0]) { PKey = 1231; } if(button == Pkeys[1] && PKey == 1231) { PKey = 1249; } if(button == Pkeys[2] && PKey == 1249) { PKey = 1399; } if(button == Pkeys[3] && PKey == 1399) { PKey = 1233; } if(button == Pkeys[4] && PKey == 1233) { PKey = 1234; } if(PKey == Key) { Serial.println("UNLOCKED!"); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 2); lcd.print("====UNLOCKED===="); digitalWrite(led, HIGH); delay(2000); digitalWrite(led, LOW); PKey = 0; Serial.println("LOCKED!"); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 2); lcd.print("=====LOCKED====="); } } void smenu() // Проверка пароля к сервисному меню и вход в него { if(button == Skeys[0]) { SKey = 1231; } if(button == Skeys[1] && SKey == 1231) { SKey = 1249; } if(button == Skeys[2] && SKey == 1249) { SKey = 1399; } if(button == Skeys[3] && SKey == 1399) { SKey = 1234; } if(button == Skeys[4] && SKey == 1234) { SKey = 12345; } if(SKey == KKey) { lcd.setCursor(0,0); lcd.print("==SERVICE MENU=="); lcd.setCursor(0,1); lcd.print("=ENTER NEW PASS="); -----------------------< СЮДА НАДО ЗАПИХНУТЬ ЭТУ ФУНКЦИЮ >---------------------------- } } void loop() { passch(); smenu(); }
Использую Mega2560 + LCD Buttons Шилд http://ebay.com/itm/261039184894?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Так а в чем проблема? Массивы | Аппаратная платформа Arduino вы, похоже, читали. Раз смогли прочитать элемент массива. Ну так там же и как присвоить новое значение элементу массива описано.
Вообщем не очень понятно что вызвает у вас затруднение. Или я не понял чего вы хотите.
Мне необходимо записать новый массив с помощью кнопок на шилде. Именно эти кнопки вызывают у меня затруднения.
Я с трудом смог сделать проверку пароля,а вот изменение не могу сделать до сих пор.
Натолкните на мысль. Хотя бы как поочередно записывать элементы массива при нажатии на эти кнопки.
Подумал над алгоритмом. Самому реализовать не получилось...
После входа в сервисное меню во второй страке появляется курсор и ожидает нажатия любой кнопки. Кнопка записывается в массив, например mass[0]=1. Далее все аналогично, еще 4 элемента массива заполняются переменными с кнопок.
Не.. похоже вы схватились за то что "пока не по зубам". Вы с массивами еще не пришли в состояния "на ты". С одной стороны - совершенно верно догадались что "нужно массивы", а с другой стороны - ну вы же не используете их как массивы :( Что это за Pkeys[0], PKeys[1], PKeys[2] ? Тогда можно было просто много переменных создать Pkeys0, Pkeys1,Pkeys2... А вот эти "магические цифры в коде 1231, 1249, 1399? Что это за "магия". Что-бы проходить дальше по кнопкам?
Вообщем, вам нужно вначале, по нормальному, используя массивы - написать проверку кода. В чем главная суть массива? В том что он позволяет обращатся к каком-то своему элементу по индексу. Причем индекс - может хранится в переменной.
Что у вас такое переменные SKey и PKey (кстати - очень не удачно выбраны названия. ну фиг догадаешься что это значит). Если я правильно понял, то вот эта магия 1231,1249,1399 - это вы так хитро переходите к следующей цифре кода. Ну так почему бы переменную так и не назвать codeIndex? И не какими-то цифрами хитрыми ее увеличивать, а просто по порядку ей значения увеличивать? 0,1,2,3...? Тогда ее можно будет использовать в качестве индекса массива. И не выписывать для каждой цифры условие
Вообщем в codeIndex - храним номер цифры с которой сейчас работаем.
Или с другой стороны зайти (так будет даже удобней, в будущем менять код).
Объявите еще один массив. Скажем userInputs[]. Вначале тупо считыаем в него все что вводит пользователь. Не проверяя. Разве что нужна проверка что он вообще что-то нажал.
Спасибо! Завтра утром попробую и отпишу.
Darkhtur, по моему, в этой библиотеке есть почти всё, что вам нужно.
http://playground.arduino.cc/Code/Password