Кодовый замок на дверь

Тема в разделе "Arduino & Shields", создана пользователем Remmeh, 10 июн 2016.

  1. Remmeh

    Remmeh Нуб

    Появилась необходимость в кодовом замке. Решил попробовать сделать на Ардуино. Так как я только только начинаю изучать Ардуино нашел пример скетча в интеренете. В скетче при правильном пароле замыкается реле и находится в таком положении пока снова не введёшь пароль на закрытие. А мне нужно сделать чтобы сигнал на замыкание реле подавался на 2-3 секунды. Хочу поставить электромеханический замок, который будет сам возвращаться в закрытое положение когда нет напряжения на нём. Подскажите что нужно вписать в скеч для того чтобы работало по моему принципу. Всем заранее спасибо.

    Скетч

    #include <Password.h>
    #include <Keypad.h>
    #include <LiquidCrystal.h>

    Password password = Password("1234"); // password
    int dlugosc = 4; // length of the password

    LiquidCrystal lcd(A0, A1, A5, A4, A3, A2);

    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);

    digitalWrite(ledRed, HIGH);
    digitalWrite(ledGreen, LOW);

    lcd.begin(16, 2);

    lcd.setCursor(1,0);
    lcd.print(" :Привет:");
    lcd.setCursor(0,1);
    lcd.print("PLEASE ENTER PIN");
    }

    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 == 1)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("*_");
    }
    if(ilosc == 2)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("**_");
    }
    if(ilosc == 3)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("***_");
    }
    if(ilosc == 4)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("****_");
    }
    if(ilosc == 5)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("*****_");
    }
    if(ilosc == 6)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("******_");
    }
    if(ilosc == 7)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("*******_");
    }
    if(ilosc == 8)
    {
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" < PIN >");
    lcd.setCursor(0,1);
    lcd.print("********");
    }

    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);

    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" << SUCCESS >>");
    }
    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);

    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" << WRONG >>");
    delay(2000);

    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(" :Welcome:");
    lcd.setCursor(0,1);
    lcd.print("PLEASE ENTER PIN");
    }
    }
     
  2. ostrov

    ostrov Гуру

    Для вставки в сообщение кода используйте соответствующий тэг.
     
  3. Remmeh

    Remmeh Нуб

    Куда именно вставить там и что написать? Я только начинающий поэтому ещё мало знаю, если не сложно то поподробнее напиши)
     
  4. ostrov

    ostrov Гуру

    Кнопочка слева от кавычек.
     
  5. NikitOS

    NikitOS Король шутов Администратор

    библиотека экрана кстати простая а ты хочешь написать Привет нужна русская
     
    Arduino.ru нравится это.