Сигнализация с кодовым замком
- Войдите на сайт для отправки комментариев
Чт, 08/09/2016 - 07:46
Добрый день!
Коллеги, нужна Ваша помощь!
Суть устройства - охранная сигнализация с кодовым замком.
Логика работы:
1. вводится пароль
2. через 7,5 секунд происходит активация системы
3. Идет опрос геркона, если геркон изменил показания запускается счетчик времени для ввода пароля.
4. Если введен правельный код, то система диактивируется.
Суть проблемы - ну могу написать счетчик времени для ввода пароля.
Прошу Вашей помощи.
Код приложил.
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip int greenLed = 10; //зеленый диод int redLed = 9; //красный диод int gerkonPin = 11; //геркон дверь int spikerPin = 12; //пьеза int alarmStatus = 0; //флаг работающей сигнализации int alarmActive = 0; //флаг активации системы boolean gerkonState = 0;// состояние геркона int buttonState = 0; int N = 0; Password password = Password( "1234" ); const byte ROWS = 4; // Four rows const byte COLS = 3; // columns // Define the Keymap char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = { 2,3,4,5 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte colPins[COLS] = { 6,7,8 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins. // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(greenLed, OUTPUT); //задаем режим работы пинов pinMode(redLed, OUTPUT); pinMode(spikerPin, OUTPUT); pinMode(gerkonPin, INPUT); Serial.begin(9600); keypad.addEventListener(keypadEvent); //add an event listener for this keypad } void loop(){ keypad.getKey(); /*if (alarmStatus == 1 ){ alarmTriggered(); }*/ } //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(); break; case '#': password.reset(); break; default: password.append(eKey); } } } void alarmTriggered(){ digitalWrite(spikerPin, HIGH); digitalWrite(redLed, HIGH); digitalWrite(greenLed, HIGH); } void checkPassword(){ // To check if PIN is corrected, if not, retry! if (password.evaluate()) { if(alarmActive == 0 && alarmStatus == 0) { activate(); } } else if( alarmActive == 1 || alarmStatus == 1) { buttonState = 1; } } void activate(){ if(alarmStatus == 0){ digitalWrite(redLed, HIGH); digitalWrite(greenLed, LOW); delay(5000); alarmStatus = 1; alarmActive = 1; password.reset(); Serial.println("SYSTEM ACTIVATED"); Serial.print(gerkonState); check(); } //else{ //deactivate(); // if PIN not corrected, run "deactivate" loop //} } void deactivate(){ digitalWrite(redLed, LOW); digitalWrite(greenLed, HIGH); digitalWrite(spikerPin, LOW); alarmStatus = 0; alarmActive = 0; password.reset(); Serial.println("SYSTEM DEACTIVATED"); Serial.print(alarmStatus); Serial.print(alarmActive); Serial.println(digitalRead(gerkonPin)); } void check(){ while(gerkonState < 1){ gerkonState = digitalRead(gerkonPin); keypad.getKey(); } if (gerkonState = 1){ for (int i=0; i <= 5; i++){ // 7,5 секунды на нажатие на ввод пароля keypad.getKey();} if (buttonState == HIGH) { // отслеживаем свой — чужой N=N+1; } } if (N > 0) { // самое главное deactivate(); // не включаем сирену } else { alarmTriggered(); } }
Коллеги, ни кто подсказать не может?
1.по проблеме посмотрите пример blinkWithoutDelay
2.распишите логику отдельно и подробнее для
- режима "охрана включена"
- режима "охрана выключена"
- всех возможных переходов между режимами
3.в код не вчитывался. Если введён неверный пароль, reset не вызывается, а надо, кажется.