จากที่ได้ทดลองเขียนและทำความเข้าใจ ผมใช้ keypad 20x4 กับบอร์ด uno r3
ผมได้ลองใช้โค๊ดที่เป็น password ในการ กดใส่เลข เป็นระหัส แต่ติดอย่างนึงคือ เวลาผมใส่ระหัสไป
สมมุติ
กดเลข 1 ถ้าตรงกับ password ที่ตั้งไว้มันจะเข้าไปอยู่ในลูปของ ฟังชั่นที่เราเขียนไว้ แต่พอเพิ่มโปรแกรมซ้อนไปอีกอันนึง กลับกดแล้วไม่มีอะไรเกิดขึ้น รบกวนผู้รู้ช่วยชี้แนะด้วยครับ
อันนี้จะโค๊ตตัวอย่างผมจะนำมาดัดแปลง นะครับ แต่ลองไปหลายรอบแล้วยังไม่ได้
#include <Password.h> //
http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //
http://www.arduino.cc/playground/uploads/Code/Keypad.zip
#include <LiquidCrystal.h>
const int ledPin = 10;
Password password = Password( "1234" );
const byte ROWS = 4; // Four rows
const byte COLS = 3; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = { 5,4,3,2 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 8,7,6 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
pinMode(ledPin, OUTPUT);
}
void loop(){
keypad.getKey();
}
//take care of some special events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){ ///// อันนี้เป็นฟังชั่น ใส่เลข และตรวจสอบ password ว่าถูกหรือไม่ครับ
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
case '*': checkPassword(); break;
case '#': //// อันนี้เอาไว้ reset ครับ
password.reset();
digitalWrite(ledPin,LOW);
break;
default: password.append(eKey);
}
}
void checkPassword()
{
if (password.evaluate())
{
Serial.println("Success");
digitalWrite(ledPin,HIGH); // อันนี้จะแสดงเมื่อกด password ถูกครับ แต่ถ้ากดผิดก็ไม่มีอะไรเกิดขึ้น
/// ตรงนี้ละครับ ผมอยากใช้ คำสั่ง if ซ้อน if จะได้ไหม เมื่อมีการกด เลขอีกครั้ง สมมุติ ใส่ password มา เลข 1 แล้วให้กด เลข 1 อีกครั้ง จะเข้ามาทำในลูป นี้นะครับ แต่กดแล้วมันไม่ขึ้นอะไรเลย ผมลองใช้คำสั่ง if แต่ก็ไม่ได้ครับ
//สมมุติเพิ่ม
if(สมมุติให้กดเลข 1)
{
digitalWrite(ledPin,LOW);
}
}
}
อยากจะปรึกษาเกี่ยวกับโปรแกรม keypad ใช้กับ arduino ครับผม
ผมได้ลองใช้โค๊ดที่เป็น password ในการ กดใส่เลข เป็นระหัส แต่ติดอย่างนึงคือ เวลาผมใส่ระหัสไป
สมมุติ
กดเลข 1 ถ้าตรงกับ password ที่ตั้งไว้มันจะเข้าไปอยู่ในลูปของ ฟังชั่นที่เราเขียนไว้ แต่พอเพิ่มโปรแกรมซ้อนไปอีกอันนึง กลับกดแล้วไม่มีอะไรเกิดขึ้น รบกวนผู้รู้ช่วยชี้แนะด้วยครับ
อันนี้จะโค๊ตตัวอย่างผมจะนำมาดัดแปลง นะครับ แต่ลองไปหลายรอบแล้วยังไม่ได้
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
#include <LiquidCrystal.h>
const int ledPin = 10;
Password password = Password( "1234" );
const byte ROWS = 4; // Four rows
const byte COLS = 3; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = { 5,4,3,2 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 8,7,6 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
pinMode(ledPin, OUTPUT);
}
void loop(){
keypad.getKey();
}
//take care of some special events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){ ///// อันนี้เป็นฟังชั่น ใส่เลข และตรวจสอบ password ว่าถูกหรือไม่ครับ
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
case '*': checkPassword(); break;
case '#': //// อันนี้เอาไว้ reset ครับ
password.reset();
digitalWrite(ledPin,LOW);
break;
default: password.append(eKey);
}
}
void checkPassword()
{
if (password.evaluate())
{
Serial.println("Success");
digitalWrite(ledPin,HIGH); // อันนี้จะแสดงเมื่อกด password ถูกครับ แต่ถ้ากดผิดก็ไม่มีอะไรเกิดขึ้น
/// ตรงนี้ละครับ ผมอยากใช้ คำสั่ง if ซ้อน if จะได้ไหม เมื่อมีการกด เลขอีกครั้ง สมมุติ ใส่ password มา เลข 1 แล้วให้กด เลข 1 อีกครั้ง จะเข้ามาทำในลูป นี้นะครับ แต่กดแล้วมันไม่ขึ้นอะไรเลย ผมลองใช้คำสั่ง if แต่ก็ไม่ได้ครับ
//สมมุติเพิ่ม
if(สมมุติให้กดเลข 1)
{
digitalWrite(ledPin,LOW);
}
}
}