• LCD 1602 Keypad Shield

เป็นโมดูลจอ 16 ตัวอักษร 2 บรรทัด มาพร้อมกับสวิตช์ 5 ตัว และมีสวิตช์ รีเซ็ต อีก 1 ตัว

สวิตช์ 5 ตัวประกอบด้วย select, up, right, down และ left

หลักการของสวิตช์ คือใช้วงจร voltage divider แบ่งแรงดัน และส่งระดับแรงดันเข้าไปที่ ช่องอนาล็อก A0 เพียงช่องเดียวทำให้ประหยัด IO เอาใว้ใช้งานอย่างอื่นได้

มีวอลลุ่ม 10 k Ohm สำหรับปรับความสว่างของหน้าจอ LCD 

โหมดการเชื่อมต่อของจอแบบ 4 Bit

ใช้เสียบเข้าบอร์ด Arduino UNO ได้เลย

                                                                                               

 

Pin Function
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control

 

โปรแกรมตัวอย่างพร้อมอธิบาย LCD 1602 KEYPAD กับ Arduino UNO

 

#include <LiquidCrystal.h> //นำไลบารี่ LCD เข้ามา

 

// การตั้งค่าขาอาดูโน่ตามนี้ สำหรับ LCD panel 

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //rs, enable, d4, d5, d6, d7

 

// ประกาศตัวแปร และค่าคงที่ สำหรับ ปุ่มกด

int lcd_key = 0; // เก็บค่า key

int adc_key_in = 0; // เก็บค่า ที่อ่านได้ จาก ขา A0

#define btnRIGHT 0 //ประกาศค่าคงที่ ปุ่ม RIGHT

#define btnUP 1 //ประกาศค่าคงที่ ปุ่ม UP

#define btnDOWN 2 //ประกาศค่าคงที่ ปุ่ม DOWN

#define btnLEFT 3 //ประกาศค่าคงที่ ปุ่ม LEFT

#define btnSELECT 4 //ประกาศค่าคงที่ ปุ่ม SELECT

#define btnNONE 5 //ประกาศค่าคงที่ NONE ถ้าไม่มีการกด

 

// ฟังชั้นอ่านค่าจากสวิตช์

int read_LCD_buttons() // ประกาศชื่อฟังชั่นเป็นตัวแปรแบบอินทริเจอร์

{

adc_key_in = analogRead(0); // อ่านค่าจากขาอนาล็อก A0 

// เมื่อเรากดปุ่มจะได้ค่าอนาล็อกดังนี้: RIGHT=0, UP=144, DOWN=329, LEFT=504, SELECT=741

if (adc_key_in > 1000) return btnNONE; // ถ้าอ่านค่า A0 ได้เกิน 1000 ให้ return btnNONE กลับไป

if (adc_key_in < 50) return btnRIGHT; // ถ้าอ่านค่า A0 ได้น้อยกว่า 50 ให้ return btnRIGHT กลับไป

if (adc_key_in < 250) return btnUP; // ถ้าอ่านค่า A0 ได้น้อยกว่า 250 ให้ return btnUP กลับไป

if (adc_key_in < 450) return btnDOWN; // ถ้าอ่านค่า A0 ได้น้อยกว่า 450 ให้ return btnDOWN กลับไป

if (adc_key_in < 650) return btnLEFT; // ถ้าอ่านค่า A0 ได้น้อยกว่า 650 ให้ return btnLEFT กลับไป

if (adc_key_in < 850) return btnSELECT; // ถ้าอ่านค่า A0 ได้น้อยกว่า 850 ให้ return btnSELECT กลับไป

 

return btnNONE; // เมื่อไม่สามารถอ่านค่าไดได้ให้ return btnNONE กลับไป

}

 

void setup() //ฟังชันค่าเริ่มต้น

{

lcd.begin(16, 2); // เริ่มต้นการใช้งานไลบาลี่ LCD 16 ตัวอักษร 2 บรรทัด

lcd.setCursor(0,0); //เซ็ตเคอเซอร์ให้เป็นตำแหน่ง 00 ตัวอักษรตำแหน่งที่ 0 บรรทัดที่ 0

lcd.print("star-circuit.com"); // สั่งให้ LCD ปริ้น stsr-circuit.com

}

 

void loop() //ฟังชัน วนลูปทำงานวนไป

{

lcd.setCursor(9,1); // กำหนดตำแหน่งเคอเซอร์ ตัวอักษรตำแหน่งที่ 9 บรรทัดที่ 1

lcd.print(millis()/1000); // แสดงค่าการนับขึ้นทุกวินาที

 

 

lcd.setCursor(0,1); // กำหนดตำแหน่งเคอเซอร์ ตัวอักษรตำแหน่งที่ 0 บรรทัดที่ 1

lcd_key = read_LCD_buttons(); // ให้ตัวแปร lcd_key มีค่าเท่ากับ ค่าที่อ่านได้จากฟังชัน read_LCD_buttons()ส่งมา

 

switch (lcd_key) // นำค่าจาก lcd_key มาใช้โดยจะใช้ switch case

{

case btnRIGHT: //ถ้า lcd_key มีค่าเท่ากับ btnRIGHT ให้ทำคำสั่งในปีกกา

{

lcd.print("RIGHT "); //สั่งให้แสดง RIGHT

break; // สั่งให้ออกจากลูป

}

case btnLEFT: //ถ้า lcd_key มีค่าเท่ากับ btnLEFT ให้ทำคำสั่งในปีกกา

{

lcd.print("LEFT "); //สั่งให้แสดง LEFT

break; // สั่งให้ออกจากลูป

}

case btnUP: //ถ้า lcd_key มีค่าเท่ากับ btnUP ให้ทำคำสั่งในปีกกา

{

lcd.print("UP "); //สั่งให้แสดง UP

break; // สั่งให้ออกจากลูป

}

case btnDOWN: //ถ้า lcd_key มีค่าเท่ากับ btnDOWN ให้ทำคำสั่งในปีกกา

{

lcd.print("DOWN "); //สั่งให้แสดง DOWN

break; // สั่งให้ออกจากลูป

}

case btnSELECT: //ถ้า lcd_key มีค่าเท่ากับ btnSELECT ให้ทำคำสั่งในปีกกา

{

lcd.print("SELECT"); //สั่งให้แสดง SELECT

break; // สั่งให้ออกจากลูป

}

case btnNONE: //ถ้า lcd_key มีค่าเท่ากับ btnNONE ให้ทำคำสั่งในปีกกา

{

lcd.print("NONE "); //สั่งให้แสดง NONE

break; // สั่งให้ออกจากลูป

}

}

}

บทความเกี่ยวกับ Arduino

LCD 1602 Keypad Shield

  • รหัสสินค้า: LCD 1602 Keypad Shield
  • สินค้าในสต็อก: 4
  • 130.00 บาท