Пароль на вход и на выход из "программы"

ArthurSufiyarov
Offline
Зарегистрирован: 11.06.2018

Доброго времени суток. Я новичок в Arduino, поэтому заранее прошу прошения. Есть простенький код, по сути он работает, только вот не могу настроить выход из нее по вводу пароля. Кряк кода, если зажать цифру боль 3х, Он обратно идет к вводу пароля.  Юыло-бы больше времени, возможно и сам дошел, но скоро сдавать :(

Прощу вашей помощи! 

ЗЫ. Потом подключу GSM модуль (sw m590e), он вроде нормально работает )

#include <Password.h> 
#include <Keypad.h> 
//#include <SoftwareSerial.h> 

Password password = Password( "2244" );

const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = { 
  {'1', '2', '3', 'A'}, // 0
  {'4', '5', '6', 'B'}, // 1
  {'7', '8', '9', 'C'}, // 2
  {'*', '0', '#', 'D'}  // 3
};

byte rowPins[ROWS] = { 11, 10, 9, 8 }; 
byte colPins[COLS] = { 7, 6, 5, 4, }; 

//SoftwareSerial gsm(7, 8); // RX, TX

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int motion = 51; // датчик движения
int rs = 2; // геркон ИО
int rs2 = 3; // геркон ИО
int buzzer = 50; //сигнализация
int led = 40; // диод
int led2 = 41; // диод

void setup() { 

  Serial.begin(9600); 
  keypad.addEventListener(keypadEvent); 
  pinMode(buzzer, OUTPUT); 
  pinMode(rs, INPUT); 
  pinMode(rs2, INPUT); 
  pinMode(led, OUTPUT); 
  pinMode(led2, OUTPUT); 
  pinMode(motion, INPUT); 
}

void loop() { 
  keypad.getKey();
  char eKey;
}


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 checkPassword() { 
  if (password.evaluate()) { 
    Serial.println("Success"); 
    while (password.evaluate()) {
      /*if (zKey == 2) {
        Serial.println("Выход");
        break;
        }*/
      Serial.println(keypad.getKey ());
      //Serial.parseInt();
      //Keypad.println();
      //Serial.println(keypad.getState());
      Serial.println("Система вкл");
      /*digitalWrite(buzzer, 500);
        delay (300);
        digitalWrite(buzzer, 0);*/
      delay (300); 
      if (digitalRead(rs) == LOW) {
        Serial.println("ROOM 1");
        digitalWrite(led, HIGH);
        digitalWrite(buzzer, 500);
        delay (300);
      }
      if (digitalRead(rs2) == LOW) {
        Serial.println("ROOM 2");
        digitalWrite(led2, HIGH);
        digitalWrite(buzzer, 500);
        delay (500);
      }
      if (digitalRead(motion) == HIGH) {
        digitalWrite(buzzer, 500);
        digitalWrite(led2, HIGH);
        Serial.println("Motion on");
      }
    }
    digitalWrite(buzzer, 0);
    digitalWrite(led, LOW);
    digitalWrite(led2, LOW);
  }
  else {
    Serial.println("Wrong");
    digitalWrite(buzzer, 500);
    delay (300);
    digitalWrite(buzzer, 0);
  }
}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ArthurSufiyarov пишет:

Юыло-бы больше времени, возможно и сам дошел, но скоро сдавать :(

А чё тянул до самой сессии? Начал бы раньше и доходил бы. А теперь топай в профильный раздел и заказывай за бабки. Дурака (или дур) валял весь семестр, теперь плати. Делать бесплатно задания для бездельников здесь не принято.

ArthurSufiyarov
Offline
Зарегистрирован: 11.06.2018

Я не прошу сделать. Хотелось бы просто понять. 

На саммом деле, то, что уже есть слихвой подходит для сдачи, просто мой внутренный перфекционизм хотел бы доделать.

Меня очень зацепило ваше "Дурака (или дур) валял весь семестр".  Вы же не знаете, что на самом деле у меня тут происходит. Как по мне, такие высказывания являются не уместными и не много оскорбительными.

sadman41
Offline
Зарегистрирован: 19.10.2016

Только я один не понял, кто, как и куда должен выйти из программы по нажатию? 

ArthurSufiyarov
Offline
Зарегистрирован: 11.06.2018

Возможно, моя вина. Сейчас попробую объяснить.

Код программы я разбил на несколько слоев:

1. Ввод пароля.

      1.1 Выполнение "тела" кода.

      1.2 Ввод пароля.

         1.2.1 Переход к 1п.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

И зачем все это?

Efim
Offline
Зарегистрирован: 04.05.2018

Будущий специалист в сфере безопасности?

ArthurSufiyarov
Offline
Зарегистрирован: 11.06.2018

Почему Вы так решили? :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Потому, что при повсеместной реализации "платы за вход" тем не менее "плата за выход" остается лишь в области анекдотов. Соответственно, к тем, кто на полном серьезе решает воплотить ее в жизнь, отношение особенное.

ArthurSufiyarov
Offline
Зарегистрирован: 11.06.2018

Вы правы. Я написал ни много не корректно. Я имел ввиду вот эту часть:

    while (password1.evaluate()) {
      Serial.println(keypad1.getState());
      /*if (zKey == 2) {
        Serial.println("Выход");
        break;
        }*/
      Serial.println(keypad.getKey ());
      //Serial.parseInt();
      //Keypad.println();
      //Serial.println(keypad.getState());
      Serial.println("Система вкл");
      /*digitalWrite(buzzer, 500);
        delay (300);
        digitalWrite(buzzer, 0);*/
      delay (300);
      if (digitalRead(rs) == LOW) {
        Serial.println("ROOM 1");
        digitalWrite(led, HIGH);
        digitalWrite(buzzer, 500);
        delay (300);
      }
      if (digitalRead(rs2) == LOW) {
        Serial.println("ROOM 2");
        digitalWrite(led2, HIGH);
        digitalWrite(buzzer, 500);
        delay (500);
      }
      if (digitalRead(motion) == HIGH) {
        digitalWrite(buzzer, 500);
        digitalWrite(led2, HIGH);
        Serial.println("Motion on");
      }
    }
    digitalWrite(buzzer, 0);
    digitalWrite(led, LOW);
    digitalWrite(led2, LOW);
  }