lnwshop logo
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

โค๊ดใช้งานไม่ได้ โปรเจ็คล็อคประตู

Arus Srisuwan
Arus Srisuwan
IP: 223.204.250.x
4 เดือนที่ผ่านมา

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "Keypad.h"

LiquidCrystal_I2C lcd(0x3F, 16, 2);
const byte Rows= 4;
const byte Cols= 3;

char keymap[Rows][Cols]=
{
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'#', '0', '*'}
};
byte rPins[Rows]= {D4,D5,D6,D7};
byte cPins[Cols]= {D0,D1,D2};

Keypad kpd= Keypad(makeKeymap(keymap), rPins, cPins, 4, 3);

 


const int lock = 9;      ขาควบคุมrelay



String password="2580"; รหัส
String tempPassword="";

boolean armed = false; 
boolean input_pass;  
boolean storedPassword = true;

boolean checkPassword = false;
int i = 1; //variable to index an array

void setup(){
  Serial.begin(115200); ใช้nodemcu8266
     lcd.begin();
  pinMode(lock,OUTPUT);

  lcd.setCursor(0,0);
  lcd.print("Arduino Security");
  lcd.setCursor(0,1);
  lcd.print(" electric door  ");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" opener system  ");
  lcd.setCursor(0,1);
  lcd.print(" with password  ");
  delay(2000);
  lcd.clear();
}

void loop() { //Main loop
  unlockTheDoor();
}

void unlockTheDoor(){
  lockAgain: //goto label
  tempPassword="";
  lcd.clear();
  i=6;

  digitalWrite(lock, LOW);ประตูล็อค
  while(!checkPassword){
    lcd.setCursor(0,0);
    lcd.print("Open the door:  ");
    lcd.setCursor(0,1);
    lcd.print("PASS>");
    char key = kpd.getKey();   
 if (key != NO_KEY){    
      if (key== '0' || key== '1' || key == '2' || key== '3' ||
      key == '4' || key== '5' || key== '6' || key== '7' ||
      key== '8' || key== '9' ){
        tempPassword += key;
        lcd.setCursor(i,1);
        lcd.print("*");      
        i++;
       
      }
   
      else if (key=='#'){
        break;
      }
      else if (key == '*'){  //Check for password
        if (password==tempPassword){//If it's correct...
          lcd.clear();     
          lcd.setCursor(0,0);
          lcd.print("Correct password");
          lcd.setCursor(0,1);
          lcd.print("Door is unlocked");

          digitalWrite(lock, HIGH);//unlock the door for 10 seconds
          delay(10000);
          goto lockAgain;
        }
        else{           //if it's false, retry
          tempPassword="";
         // tone(buzzer,500,200);
          delay(300);
          //tone(buzzer,500,200);
          delay(300);
          goto lockAgain;
        }
      }
    }
  }
}

คือสิ่งที่อยากทำคือใส่รหัสแล้วถ้าถูกจะปลดล็อคเป็นเวลา10วิและจะกลับมาล็อคอีกครั้งแต่ลองupload

แล้วลองกดkeypadไม่มี****ต่อจากPASS>เลย ขึ้นแต่Open the door:

PASS>

แต่โค๊ดนี้ไปเจอมาใน http://www.ardumotive.com/password-door-en.html

เลยจะเอามาประยุกต์แต่ไม่ต้องเปลี่ยนรหัสได้

ช่วยดูให้ด้วยนะครับ

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน
เจ้าของร้าน
4 เดือนที่ผ่านมา

อยากให้ลองศึกษาการทำงานทีละส่วนก่อน แนะนำดังนี้ครับ 

คำสัง่ในการหน่วงเวลาคือ delay() แต่การใช้คำสั่ง delay จะทำให้โคดทั้งหมดทำงานไม่ได้ แนะนำให้ใช้คำสั่ง millis ตัวอย่างตามนี้ https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

แยกโคด keypad ออกมาทดลองเดี่ยว ๆ จะได้เข้าใจการทำงานมากขึ้น ตัวอย่างดังนี้ http://arduinolearning.com/learning/basics/arduino-numeric-keypad.php

จอ LCD มีโคดตัวอย่างที่หน้าบทความครับ

 

QUOTE 
ความคิดเห็นที่ #2
Arus Srisuwan
Arus Srisuwan (Guest)
IP: 223.204.249.x
4 เดือนที่ผ่านมา
คีย์แพดผมลองเทสแล้วกดขึ้นปกตินะขึ้น1234567890*#ครบทุกตัวเลย แต่เปลี่ยนดีเลย์ยังไม่ได้ลอง ผมก็งงกดเลขขึ้นในserial monitorนะอีกโค๊ด แต่พอใส่ตามโค๊ดนี้ก้ไม่ได้
QUOTE 
ความคิดเห็นที่ #3
เจ้าของร้าน
เจ้าของร้าน
4 เดือนที่ผ่านมา

ถึงตรงนี้แสดงว่าทำ keypad และจอ lcd ออกได้แล้ว

เหลือโคดส่วนหน่วงเวลา ให้ดีบั๊กเช็คตรงฟังก์ชันนี้อีกที 

digitalWrite(lock, HIGH);//unlock the door for 10 seconds

QUOTE 
ความคิดเห็นที่ #4
Arus Srisuwan
Arus Srisuwan
IP: 223.24.27.x
4 เดือนที่ผ่านมา
ตอนนี้ยังขึ้นแต่Open the door: PASS> เหมือนเดิมแต่ใส่โค๊ดเทสkeypadก็ขึ้นในserial monitor พอลองใส่โค๊ดเทสif (keypressed != NO_KEY) { Serial.println(keypressed); }ในโค๊ดข้างบนก็ยังไม่ขึ้น แต่ใส่แยกโค๊ดก็ขึ้นในmonitor อันนี้คืออันที่ลองเทสแยกนะครับขึ้นในmonitorปกติ#include "Keypad.h" const byte numRows= 4; //number of rows on the keypad const byte numCols= 3; //number of columns on the keypad #include #include LiquidCrystal_I2C lcd(0x3F, 16, 2); char keymap[numRows][numCols]= { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'#', '0', '*'} }; byte rowPins[numRows]= {D4,D5,D6,D7}; //Rows 0 to 3 byte colPins[numCols]= {D0,D1,D2}; //Columns 0 to 2 Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); void setup() { Serial.begin(115200); // initializing serail monitor lcd.begin(); // Turn on the blacklight and print a message. lcd.backlight(); lcd.setCursor(1,0); lcd.print("Hello, world!"); lcd.setCursor(1,1); lcd.print("Hello, world!"); } void loop() { char keypressed = myKeypad.getKey(); if (keypressed != NO_KEY) { Serial.println(keypressed); } }
QUOTE 
ความคิดเห็นที่ #5
เจ้าของร้าน
เจ้าของร้าน
4 เดือนที่ผ่านมา

น่าจะใกล้จะได้แล้ว ตรงนี้ต้องลองดีบัํกทีละจุดนะครับ 

1
แสดงความคิดเห็นที่ 1-5 จากทั้งหมด 5 ความคิดเห็น
ข้อความ
ชื่อผู้โพส
ข้อมูลสำหรับการติดต่อกลับ (ไม่เปิดเผย เห็นเฉพาะเจ้าของร้าน)
อีเมล
เบอร์มือถือ
  • ตอบกระทู้

หมวดหมู่สินค้า

สมาชิก Arduino All

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

Arduino All ขายดี

รหัสสินค้า A015
270.00 บาท
  • สั่งซื้อ
รหัสสินค้า A233
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A115
10.00 บาท
  • สั่งซื้อ
รหัสสินค้า A238
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A097
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A014
90.00 บาท
  • สั่งซื้อ
รหัสสินค้า A474
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A237
4.00 บาท
  • สั่งซื้อ
Go to Top