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

สอบถามเกี่ยวกับ keypad กับ password ครับ

phitchayut
phitchayut
IP: 171.4.223.x
10 เดือนที่ผ่านมา

#include <Keypad.h>

#include <Password.h>

int relay1 = 2;   

int relay2 = 3;

int relay3 = 4;

int relay4 = 5;

int locked = 1; 

int passinput = 0;

int lockedled = 14;

int unlockedled = 15;

long ledflashvar = 0;

long ledflashtime = 300;  

const byte ROWS = 4;

const byte COLS = 4;

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

byte rowPins[ROWS] = {13, 12, 11, 10};

byte colPins[COLS] = {9, 8, 7, 6};

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

Password password1 = Password("1111");   // รหัสของการปลดล็อค

Password password2 = Password("2222");

Password password3 = Password("3333");

Password password4 = Password("4444");

void setup(){

  //  กำหนดค่าเริ่มต้น และ PIN ต่างๆ

  Serial.begin(9600);

  pinMode(relay1, OUTPUT);

  digitalWrite(relay1, 255);

  pinMode(relay2, OUTPUT);

  digitalWrite(relay2, 255);

  pinMode(relay3, OUTPUT);

  digitalWrite(relay3, 255);

  pinMode(relay4, OUTPUT);

  digitalWrite(relay4, 255);

  pinMode(lockedled, OUTPUT);

  digitalWrite(lockedled, 255);

  pinMode(unlockedled, OUTPUT);

  digitalWrite(unlockedled, 0);

}

void loop(){

  char key = keypad.getKey();  // รับค่าจาก keypad

  

  

  // กรณีที่ Lock อยู่  LED สีแดงจะติด  และหากอยู่ระหว่างการใส่รหัส LED สีแดงจะกระพริบ

  if(locked){

    if(passinput){

      unsigned long ledcurrentvar = millis();

      if(ledcurrentvar - ledflashvar > ledflashtime) {

        ledflashvar = ledcurrentvar;

        digitalWrite(lockedled, !digitalRead(lockedled));

      }

    }

    

    // ถ้าไม่ได้อยู่ระหว่างการใส่รหัส

    else{

      digitalWrite(lockedled, 255);   // LED สีแดงจะติด

    }

    digitalWrite(unlockedled, 0);     // LED สีเขียวดับ

  }

  

  

  if (key != NO_KEY){

    Serial.println(key);   // แสดงค่าที่กดบน Serial monitor

    password1.append(key);  // บันทึกค่ารหัสที่กดและเปรียบเทียบกับรหัสที่ถูกต้อง

    password2.append(key);

    password3.append(key);

    password4.append(key);

    passinput = 1;         // อยู่ระหว่างการใส่รหัส

    

    // ถ้ากด '*' ให้เริ่มใส่รหัสใหม่

    if(key == '*'){  

      password1.reset();     // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      password2.reset();

      password3.reset();

      password4.reset();

      passinput = 0;        // ไม่อยู่ระหว่างการกดรหัส  

      locked = 1;

      digitalWrite(relay1, HIGH);   // ตั้งค่า Relay ให้อยู่ในสถานะ Hight

      digitalWrite(relay2, HIGH);

      digitalWrite(relay3, HIGH);

      digitalWrite(relay4, HIGH);

    }

    

    if(password1.evaluate()) {       //  ถ้าใส่ Password ถูกต้องให้ปลดล็อค 

      locked = !locked; 

      password1.reset();             // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      passinput = 0;

    }

    if(password2.evaluate()) {       //  ถ้าใส่ Password ถูกต้องให้ปลดล็อค 

      locked = !locked; 

      password2.reset();             // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      passinput = 0;

    }

    if(password3.evaluate()) {       //  ถ้าใส่ Password ถูกต้องให้ปลดล็อค 

      locked = !locked; 

      password3.reset();             // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      passinput = 0;

    }

        if(password4.evaluate()) {       //  ถ้าใส่ Password ถูกต้องให้ปลดล็อค 

      locked = !locked; 

      password4.reset();             // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      passinput = 0;

    }

    

     //  ถ้าปลดล๊อคแล้วให้ไฟสีเขียวติด  สีแดงดับ  และสามารถควบคุมการเปิดปิดของ Relay ได้

    if(!locked) {                  

      passinput = 0;

      digitalWrite(lockedled, 0);

      digitalWrite(unlockedled, 255);

      

      switch (key) {                //  และเลือก Relay ที่ต้องการควบคุม

        case 'A':

          digitalWrite(relay1, !digitalRead(relay1));

          break;

        case 'B':

          digitalWrite(relay2, !digitalRead(relay2));

          break;

        case 'C':

          digitalWrite(relay3, !digitalRead(relay3));

          break;

        case 'D':

          digitalWrite(relay4, !digitalRead(relay4));

          break;

      }

      

      

      password1.reset();              // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก

      password2.reset();

      password3.reset();

      password4.reset();

    }

  }

}

คือถ้าเราอยากกำหนดรหัสผ่านแต่ละตัวเช่น

รหัส 1111 เปิดได้เฉพาะ relay 1 รหัส 2222 ได้เฉพาะ  relay 2

ต้องทำยังไงบ้างครับ

มือใหม่พื้นฐานอ่อนมากครับ ขอบคุณครับ

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

อันดับแรก ศึกษาตัวอย่างโคดที่ให้มาให้เข้าใจก่อนครับ

จากนั้นสามารถใช้ if เช็คเงื่อนไขในการสั่งงาน relay ได้ไม่ยาก

เช่น 

int lv = 1111;

if(isRelay){

    if(lv==1111){

        digitalWrite(relay1,1);

    }else if(lv==2222){

        digitalWrite(relay2,1);

    }

}

QUOTE 
ความคิดเห็นที่ #2
phitchayut
phitchayut
IP: 223.204.202.x
10 เดือนที่ผ่านมา
ขอบคุณครับ เดี๋ยวลองทำดูครับ
QUOTE 
ความคิดเห็นที่ #3
เจ้าของร้าน
เจ้าของร้าน
10 เดือนที่ผ่านมา

ลองเล่นดูนะครับ

QUOTE 
ความคิดเห็นที่ #4
phitchayut
phitchayut
IP: 223.204.16.x
9 เดือนที่ผ่านมา
-เพิ่มเติม- ได้รับของจากการสั่งครั้งล่าสุดแล้วครับ ขอบคุณครับสำหรับคำแนะนำครับ โปรเจคใกล้สำเร็จแล้วครับ
QUOTE 
ความคิดเห็นที่ #5
phitchayut
phitchayut
IP: 223.204.16.x
9 เดือนที่ผ่านมา
เพิ่มเติมอย่างสุดท้ายครับ ของแถมที่ให้มา ที่ตั้งสมาทโฟน ตัวที่ให้มาขามันหักครับ เสียดาย
1
แสดงความคิดเห็นที่ 1-5 จากทั้งหมด 5 ความคิดเห็น
ข้อความ
ชื่อผู้โพส
ข้อมูลสำหรับการติดต่อกลับ (ไม่เปิดเผย เห็นเฉพาะเจ้าของร้าน)
อีเมล
เบอร์มือถือ
  • ตอบกระทู้

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

สมาชิก Arduino All

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

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

Arduino All ขายดี

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