اطلاعیه

Collapse
No announcement yet.

قفل دیجیتال درب توسط کیپد با آردینو !

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    قفل دیجیتال درب توسط کیپد با آردینو !

    با سلام
    این پروژه رو بستم و جواب گرفتم اما اگر بخواهیم توسط 4 رمز 4 خروجی رو فعال کنیم با مد نظر گرفتم آردینو مناسب برای تعداد خروجی چه کاری باید کرد؟
    در واقع چه تابع و کدی را باید تغیر داد که ما 4 تا بسورد به صورت سیو در حافظه ای 2پیرام داشته باشیم.
    ممنون میشوم راهنمایی بفرمایید.
    عکس از پروژه :


    کد
    کد:
    [FONT=Yekan]#include <Keypad.h>[/FONT]
    #include<LiquidCrystal.h>
    #include<EEPROM.h>
    LiquidCrystal lcd(9,8,7,6,5,4);
    char password[4];
    char pass[4],pass1[4];
    int i=0;
    char customKey=0;
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //four columns
    char hexaKeys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
    };
    byte rowPins[ROWS] = {A0,A1,A2,A3}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {A4,A5,3,2};   //connect to the column pinouts of the keypad
    //initialize an instance of class NewKeypad
    Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
    int led;
    int buzzer = 10;
    int m11;
    int m12;
    void setup()
    {
      Serial.begin(9600);
      pinMode(11, OUTPUT);
    
    
      lcd.begin(16,2);
      pinMode(led, OUTPUT);
      pinMode(buzzer, OUTPUT);
      pinMode(m11, OUTPUT);
      pinMode(m12, OUTPUT);
      lcd.print(" Electronic ");
      Serial.print(" Electronic ");
      lcd.setCursor(0,1);
      lcd.print(" Keypad Lock ");
      Serial.print(" Keypad Lock ");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Ur Passkey:");
      Serial.println("Enter Ur Passkey:");
      lcd.setCursor(0,1);
      for(int j=0;j<4;j++)
        EEPROM.write(j, j+49);
      for(int j=0;j<4;j++)
        pass[j]=EEPROM.read(j);
    }
    
    
    void loop()
    {
      digitalWrite(11, HIGH);
      customKey = customKeypad.getKey();
      if(customKey=='#')
        change();
      if (customKey)
      {
        password[i++]=customKey;
        lcd.print(customKey);
        Serial.print(customKey);
        beep();
      }
      if(i==4)
      {
        delay(200);
        for(int j=0;j<4;j++)
          pass[j]=EEPROM.read(j);
        if(!(strncmp(password, pass,4)))
        {
          digitalWrite(led, HIGH);
          beep();
          lcd.clear();
          lcd.print("Passkey Accepted");
          Serial.println("Passkey Accepted");
          digitalWrite(11, LOW);
          delay(2000);
          lcd.setCursor(0,1);
          lcd.print("#.Change Passkey");
          Serial.println("#.Change Passkey");
          delay(2000);
          lcd.clear();
          lcd.print("Enter Passkey:");
          Serial.println("Enter Passkey:");
          lcd.setCursor(0,1);
          i=0;
          digitalWrite(led, LOW);
        }
        else
        {
          digitalWrite(11, HIGH);
          digitalWrite(buzzer, HIGH);
          lcd.clear();
          lcd.print("Access Denied...");
          Serial.println("Access Denied...");
          lcd.setCursor(0,1);
          lcd.print("#.Change Passkey");
          Serial.println("#.Change Passkey");
          delay(2000);
          lcd.clear();
          lcd.print("Enter Passkey:");
          Serial.println("Enter Passkey:");
          lcd.setCursor(0,1);
          i=0;
          digitalWrite(buzzer, LOW);
        }
      }
    }
    void change()
    {
      int j=0;
      lcd.clear();
      lcd.print("UR Current Passk");
      Serial.println("UR Current Passk");
      lcd.setCursor(0,1);
      while(j<4)
      {
        char key=customKeypad.getKey();
        if(key)
        {
          pass1[j++]=key;
          lcd.print(key);
          Serial.print(key);
          beep();
        }
        key=0;
      }
      delay(500);
    
    
      if((strncmp(pass1, pass, 4)))
      {
        lcd.clear();
        lcd.print("Wrong Passkey...");
        Serial.println("Wrong Passkey...");
        lcd.setCursor(0,1);
        lcd.print("Better Luck Again");
        Serial.println("Better Luck Again");
        delay(1000);
      }
      else
      {
        j=0;
        lcd.clear();
        lcd.print("Enter New Passk:");
        Serial.println("Enter New Passk:");
        lcd.setCursor(0,1);
        while(j<4)
        {
          char key=customKeypad.getKey();
          if(key)
          {
            pass[j]=key;
            lcd.print(key);
            Serial.print(key);
            EEPROM.write(j,key);
            j++;
            beep();
          }
        }
        lcd.print(" Done......");
        Serial.println(" Done......");
        delay(1000);
      }
      lcd.clear();
      lcd.print("Enter Ur Passk:");
      Serial.println("Enter Ur Passk:");
      lcd.setCursor(0,1);
      customKey=0;
    }
    void beep()
    {
      digitalWrite(buzzer, HIGH);
      delay(20);
      digitalWrite(buzzer, LOW);
    [FONT=Yekan]}[/FONT]
    منبع : http://www.elecomhub.com/portfolio-i...o/#comment-164

    #2
    پاسخ : قفل دیجیتال درب توسط کیپد با آردینو !

    لطفا کمک کنید

    دیدگاه


      #3
      پاسخ : قفل دیجیتال درب توسط کیپد با آردینو !

      موضوع ساده نیست ، قسمت ورود پسورد ، بررسی پسورد ، تغییر پسورد ، ذخیره پسورد جدید ، هر کدوم باید ۴ بار تکرار بشه ، نیاز به بستن مدار و تست برنامه داره تا تداخلی ایجاد نشه . خودتون پیش برید ، مشکلات پیش اومده رو رفته رفته حل میکنیم

      دیدگاه


        #4
        پاسخ : قفل دیجیتال درب توسط کیپد با آردینو !

        نوشته اصلی توسط Masood Ashoori نمایش پست ها
        موضوع ساده نیست ، قسمت ورود پسورد ، بررسی پسورد ، تغییر پسورد ، ذخیره پسورد جدید ، هر کدوم باید ۴ بار تکرار بشه ، نیاز به بستن مدار و تست برنامه داره تا تداخلی ایجاد نشه . خودتون پیش برید ، مشکلات پیش اومده رو رفته رفته حل میکنیم
        با تشکر از شما
        با توجه به توضیحات شما تغییرات زیر حاصل کردم
        اما نتیجه منفی بود

        کد های تغییر داده شده به شرح زیر است.
        کد:
        [FONT=Yekan]#include <Keypad.h>[/FONT]#include<LiquidCrystal.h>
        #include<EEPROM.h>
        LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
        char password[4];
        char pass[4], pass1[4];
        	char password1[5];
        	char pass2[5], pass3[5];
        		//char password2[4];
        		//char pass4[4], pass5[4]
        		//	char password3[4];
        		//    char pass6[4], pass7[4]
        int i = 0;
        			int r = 0;
        char customKey = 0;
        char customKey1 = 0;
        const byte ROWS = 4; //four rows
        const byte COLS = 4; //four columns
        char hexaKeys[ROWS][COLS] = {
        	{ '1', '2', '3', 'A' },
        	{ '4', '5', '6', 'B' },
        	{ '7', '8', '9', 'C' },
        	{ '*', '0', '#', 'D' }
        };
        byte rowPins[ROWS] = { A0, A1, A2, A3 }; //connect to the row pinouts of the keypad
        byte colPins[COLS] = { A4, A5, 3, 2 };   //connect to the column pinouts of the keypad
        //initialize an instance of class NewKeypad
        Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
        int led;
        int buzzer = 10;
        int m11;
        int m12;
        void setup()
        {
        	Serial.begin(9600);
        	lcd.begin(16, 2);
        	pinMode(11, OUTPUT);
        	pinMode(12, OUTPUT);
        	pinMode(led, OUTPUT);
        	pinMode(buzzer, OUTPUT);
        	pinMode(m11, OUTPUT);
        	pinMode(m12, OUTPUT);
        	lcd.print(" Electronic ");
        	Serial.print(" Electronic ");
        	lcd.setCursor(0, 1);
        	lcd.print(" Keypad Lock ");
        	Serial.print(" Keypad Lock ");
        	delay(2000);
        	lcd.clear();
        	lcd.print("Enter Ur Passkey:");
        	Serial.println("Enter Ur Passkey:");
        	lcd.setCursor(0, 1);
        	for (int j = 0; j<4; j++)
        		EEPROM.write(j, j + 49);
        	for (int j = 0; j<4; j++)
        		pass[j] = EEPROM.read(j);
        		for (int p = 5; p<9; p++)
        			EEPROM.write(p, p + 49);
        		for (int p = 5; p<9; p++)
        			pass2[p] = EEPROM.read(p);
        }
        
        
        void loop()
        {
        	/*-------------------------------------pass1 run-------------------------------*/
        	digitalWrite(11, HIGH);
        	customKey = customKeypad.getKey();
        	if (customKey == '#')
        		change();
        	if (customKey)
        	{
        		password[i++] = customKey;
        		lcd.print(customKey);
        		Serial.print(customKey);
        		beep();
        	}
        	if (i == 4)
        	{
        		delay(200);
        		for (int j = 0; j<4; j++)
        			pass[j] = EEPROM.read(j);
        		if (!(strncmp(password, pass, 4)))
        		{
        			digitalWrite(led, HIGH);
        			beep();
        			lcd.clear();
        			lcd.print("Passkey Accepted");
        			Serial.println("Passkey Accepted");
        			digitalWrite(11, LOW);
        			delay(2000);
        			lcd.setCursor(0, 1);
        			lcd.print("#.Change Passkey");
        			Serial.println("#.Change Passkey");
        			delay(2000);
        			lcd.clear();
        			lcd.print("Enter Passkey:");
        			Serial.println("Enter Passkey:");
        			lcd.setCursor(0, 1);
        			i = 0;
        			digitalWrite(led, LOW);
        		}
        		else
        		{
        			digitalWrite(11, HIGH);
        			digitalWrite(buzzer, HIGH);
        			lcd.clear();
        			lcd.print("Access Denied...");
        			Serial.println("Access Denied...");
        			lcd.setCursor(0, 1);
        			lcd.print("#.Change Passkey");
        			Serial.println("#.Change Passkey");
        			delay(2000);
        			lcd.clear();
        			lcd.print("Enter Passkey:");
        			Serial.println("Enter Passkey:");
        			lcd.setCursor(0, 1);
        			i = 0;
        			digitalWrite(buzzer, LOW);
        		}
        	}
        	/*-------------------------------------pass1 end-------------------------------*/
        
        
        	/*-------------------------------------pass2 run-------------------------------*/
        	digitalWrite(12, HIGH);
        	customKey1 = customKeypad.getKey();
        	if (customKey1 == '*')
        		change1();
        	if (customKey1)
        	{
        		password1[r++] = customKey1;
        		lcd.print(customKey1);
        		Serial.print(customKey1);
        		beep();
        	}
        	if (r == 5)
        	{
        		delay(200);
        		for (int p = 5; p<9; p++)
        			pass2[p] = EEPROM.read(p);
        		if (!(strncmp(password1, pass2, 5)))
        		{
        			digitalWrite(led, HIGH);
        			beep();
        			lcd.clear();
        			lcd.print("Passkey Accepted");
        			Serial.println("Passkey Accepted");
        			digitalWrite(12, LOW);
        			delay(2000);
        			lcd.setCursor(0, 1);
        			lcd.print("*.Change Passkey");
        			Serial.println("*.Change Passkey");
        			delay(2000);
        			lcd.clear();
        			lcd.print("Enter Passkey:");
        			Serial.println("Enter Passkey:");
        			lcd.setCursor(0, 1);
        			r = 0;
        			digitalWrite(led, LOW);
        		}
        		else
        		{
        			digitalWrite(12, HIGH);
        			digitalWrite(buzzer, HIGH);
        			lcd.clear();
        			lcd.print("Access Denied...");
        			Serial.println("Access Denied...");
        			lcd.setCursor(0, 1);
        			lcd.print("*.Change Passkey");
        			Serial.println("*.Change Passkey");
        			delay(2000);
        			lcd.clear();
        			lcd.print("Enter Passkey:");
        			Serial.println("Enter Passkey:");
        			lcd.setCursor(0, 1);
        			r = 0;
        			digitalWrite(buzzer, LOW);
        		}
        	}
        	/*-------------------------------------pass2 end------------------------------*/
        }
            /*---------------------------------change run-------------------------------------*/
        void change()
        {
        	int j = 0;
        	lcd.clear();
        	lcd.print("UR Current Passk");
        	Serial.println("UR Current Passk");
        	lcd.setCursor(0, 1);
        	while (j<4)
        	{
        		char key = customKeypad.getKey();
        		if (key)
        		{
        			pass1[j++] = key;
        			lcd.print(key);
        			Serial.print(key);
        			beep();
        		}
        		key = 0;
        	}
        	delay(500);
        
        
        	if ((strncmp(pass1, pass, 4)))
        	{
        		lcd.clear();
        		lcd.print("Wrong Passkey...");
        		Serial.println("Wrong Passkey...");
        		lcd.setCursor(0, 1);
        		lcd.print("Better Luck Again");
        		Serial.println("Better Luck Again");
        		delay(1000);
        	}
        	else
        	{
        		j = 0;
        		lcd.clear();
        		lcd.print("Enter New Passk:");
        		Serial.println("Enter New Passk:");
        		lcd.setCursor(0, 1);
        		while (j<4)
        		{
        			char key = customKeypad.getKey();
        			if (key)
        			{
        				pass[j] = key;
        				lcd.print(key);
        				Serial.print(key);
        				EEPROM.write(j, key);
        				j++;
        				beep();
        			}
        		}
        		lcd.print(" Done......");
        		Serial.println(" Done......");
        		delay(1000);
        	}
        	lcd.clear();
        	lcd.print("Enter Ur Passk:");
        	Serial.println("Enter Ur Passk:");
        	lcd.setCursor(0, 1);
        	customKey = 0;
        }
        /*---------------------------------change end-------------------------------------*/
        /*---------------------------------change1 run-------------------------------------*/
        void change1()
        {
        	int p = 0;
        	lcd.clear();
        	lcd.print("UR Current Pass2");
        	Serial.println("UR Current Pass2");
        	lcd.setCursor(0, 1);
        	while (p<4)
        	{
        		char key = customKeypad.getKey();
        		if (key)
        		{
        			pass3[p++] = key;
        			lcd.print(key);
        			Serial.print(key);
        			beep();
        		}
        		key = 0;
        	}
        	delay(500);
        
        
        	if ((strncmp(pass3, pass2, 5)))
        	{
        		lcd.clear();
        		lcd.print("Wrong Passkey...");
        		Serial.println("Wrong Passkey...");
        		lcd.setCursor(0, 1);
        		lcd.print("Better Luck Again");
        		Serial.println("Better Luck Again");
        		delay(1000);
        	}
        	else
        	{
        		p = 0;
        		lcd.clear();
        		lcd.print("Enter New Passk:");
        		Serial.println("Enter New Passk:");
        		lcd.setCursor(0, 1);
        		while (p<5)
        		{
        			char key = customKeypad.getKey();
        			if (key)
        			{
        				pass2[p] = key;
        				lcd.print(key);
        				Serial.print(key);
        				EEPROM.write(p, key);
        				p++;
        				beep();
        			}
        		}
        		lcd.print(" Done......");
        		Serial.println(" Done......");
        		delay(1000);
        	}
        	lcd.clear();
        	lcd.print("Enter Ur Passk:");
        	Serial.println("Enter Ur Passk:");
        	lcd.setCursor(0, 1);
        	customKey1 = 0;
        }
        /*---------------------------------change1 end-------------------------------------*/
        void beep()
        {
        	digitalWrite(buzzer, HIGH);
        	delay(20);
        	digitalWrite(buzzer, LOW);
        [FONT=Yekan]}
        [/FONT]
        ممنون میشم راهنمایی بفرمایید

        دیدگاه


          #5
          پاسخ : قفل دیجیتال درب توسط کیپد با آردینو !

          نوشته اصلی توسط mehrangholumi3070 نمایش پست ها
          این پروژه رو بستم و جواب گرفتم اما اگر بخواهیم توسط 4 رمز 4 خروجی رو فعال کنیم با مد نظر گرفتم آردینو مناسب برای تعداد خروجی چه کاری باید کرد؟
          سلام
          ابتدا باید بگم من فقط میتونم یه چیزایی رو که از دستم برمیاد راهنمایی کنم. زحمت نوشتن برنامه رو خودتون بکشین ، چون آخر سالی زمان مقدار زیادی محدود شده. می بخشید.
          من فقط برنامه پست اول رو یه نگاه انداختم و دو سه خط اول برنامه تغییر داده شده.
          اول اینکه برنامه اصلی یه ایرادی داره!! بعد از اینکه شما پسورد رو عوض میکنید، پس از خاموش یا ریست شدن میکرو، رمز دستگاه دوباره 1234 خواهد شد. این درحالیه که پسورد در حافظه eeprom ذخیره میشود.
          دلیلش اینه که در تابع setup اومده پسورد 1234 رو توی حافظه ذخیره کرده. درنتیجه هروقت میکرو دوباره راه اندازی میشه پسورد 1234 روی پسورد ذخیره شده ، دوباره ذخیره میشه.
          اما بعدش. من متغییرها و روند برنامه رو مختصرا توضیح میدم که راحت تربتونید تفییرش بدید.
          اول اینکه چرا مثلا

          pass[4] یا pass1[4] یا ...

          دلیلش اینه که پسورد موردنظر نویسنده برنامه ، 4 کاراکتری بوده. درنتیجه شما با بیشتر کردن (مثلا 5) آن فقط تعداد کاراکترهای یک رمز رو بیشتر میکنید ( نه تعداد رمزها رو)
          دوم متغییرها:
          pass : پسورد موجود (یک رمز 4 کاراکتری)
          password : وقتی کاربر با کیپد رمز خواسته شده رو وارد میکنه ، کاراکترها دونه دونه (4 کاراکتر) تو این متغییر ذخیره شده و پس از تکمیل با pass مقایسه میشه.
          pass1 : در زمان تفییر پسورد ذخیره شده ، ابتدا کاربر باید پسورد قبلی را وارد کند. متغییر pass1 هم مثل password عمل میکند. یعنی دونه دونه کاراکترهای وارد شده توش ثبت شده و سپس با پسورد اصلی (pass) مقایسه میشه. اگر درست بود اجازه پسورد جدید میده و پسورد تو pass ذخیره میشه.
          حالا با این اطلاعات میتونید با اضافه کردن متغیرهای دیگر و ذخیره در حافظه نتیجه دلخواهتون رو بگیرید.
          فقط اون ایرادی که تو تابع setup گفتم رو هم حتما با گذاشتن یک شرط که چک کنه اگر تو حافظه نوشته نشده بود 1234 رو ذخیره کنه ، ایراد رو برطرف کنید.
          تاپیک ویدیوهای آموزشی حواشی آردوینو و ESP

          دیدگاه

          لطفا صبر کنید...
          X