матричная клавиатура для калитки нужна помощь
- Войдите на сайт для отправки комментариев
Чт, 09/06/2016 - 22:45
Доброго всем дня для многих не новость что можно подключить матричную клавиатуру к ардуино и с помощью реле открывать замок на калитке и я взял из интернета почти готовый скетч подправил его под свои цели и сейчас он работает но вот вопрос в мониторе порта при вводе первый раз кода 2405 пишется Success и соответсвенно реле срабатывает и через 5 секунд выключается но при вводе второй раз этот же код 2405 в мониторе порта пишет уже Wrong и соответсвенно ничего не происходит и только третий раз опять срабатывет реле где у меня ошибка что реле срабатывает через раз при вводе пароля.
заранее спасибо за ответ
#include <Password.h> #include <Keypad.h> Password password = Password("2405"); // password int dlugosc = 4; // length of the password int ledRed = 11; int ledGreen = 12; int buzzer = 13; int relay = 10; int ilosc; // number of clicks const byte ROWS = 4; // rows const byte COLS = 3; // cols char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = {2,3,4,5}; byte colPins[COLS] = {6,7,8}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { Serial.begin(9600); keypad.addEventListener(keypadEvent); pinMode(ledRed, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(buzzer, OUTPUT); pinMode(relay, OUTPUT); digitalWrite(ledRed, HIGH); digitalWrite(ledGreen, LOW); digitalWrite(relay, HIGH); } void loop() { keypad.getKey(); } void keypadEvent(KeypadEvent eKey) { switch (keypad.getState()) { case PRESSED: int i; for( i = 1; i <= 1; i++ ) { digitalWrite(buzzer, HIGH); delay(50); digitalWrite(buzzer, LOW); delay(50); } Serial.print("Pressed: "); Serial.println(eKey); switch (eKey) { /* case '#': break; case '*': break; */ default: ilosc=ilosc+1; password.append(eKey); } //Serial.println(ilosc); } if(ilosc == dlugosc) { delay(250); checkPassword(); ilosc = 0; } } void checkPassword() { if (password.evaluate()) { int i; for( i = 1; i <= 2; i++ ) { digitalWrite(buzzer, HIGH); delay(70); digitalWrite(buzzer, LOW); delay(70); } ilosc = 0; Serial.println("Success"); digitalWrite(ledRed, LOW); digitalWrite(ledGreen, HIGH); digitalWrite(relay, LOW); delay (5000); digitalWrite(ledGreen, LOW); digitalWrite(relay, HIGH); digitalWrite(ledRed, HIGH); } else { int i; for( i = 1; i <= 1; i++ ) { digitalWrite(buzzer, HIGH); delay(200); digitalWrite(buzzer, LOW); delay(200); } ilosc = 0; password.reset(); Serial.println("Wrong"); digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); digitalWrite(relay, HIGH); } }
Добавьте password.reset() перед закрывающей скобкой в строке 123 (т.е. вставьте строчку
в строку 122, и будет щастье.
З.Ы. А ещё лучше - в строку 112.
СПАСИБО помогло всего то надо было одну строку добавить. Но на этом мои головоломки не закончились нужна помощь ещё в одном моменте в этот скетч который ук меня получился я хотел бы добавить ещё чтоб реле открывалось и с пульта на 433мгц. имею скетч на работу реле попытался их объеденить но при заливке скетча в мониторе порта радиосигнал не проходит в чём может быть причина. выкладывю скетч работы реле с пульта и втрой скетч как я попытался их объеденить
а вот объеденённый
поменял местами от клавиатуры пин2 на пин 9 а вместо него поставил радиоприёмник