การใช้งาน โมดูลปุ่มกด 12 ปุ่ม 3x4 Matrix Keypad บน Raspberry pi ด้วย Node js
วันนี้ผมจะพาท่านผู้อ่านไปใช้งาน โมดูลปุ่มกด 12 ปุ่ม 3x4 Matrix Keypad เชื่อมต่อกับ Raspberry pi โดยใช้ Node js ในการเขียนโปรแกรม เพื่อให้ทุกท่านไปประยุกต์ใช้งานกัน
3x4 Matrix Keypad คือ สวิทช์ที่นำมาต่อกันแบบแนวนอนและแนวตั้ง การใช้งานต้องใช้วิธีสแกน ส่งสัญญาณทาง Row และรับทาง Column ดังรูป
ถ้ายังไม่ลง Node js ดูบทความ 
มาต่อใช้งานและโปรแกรมกัน
1. ต่อ Keypad เข้ากับ Raspberry pi 
Pi GPIO6   to keypad R1
  Pi GPIO13 to keypad R2
  Pi GPIO19 to keypad R3
  Pi GPIO26 to keypad R4
  Pi GPIO21 to keypad C1
  Pi GPIO20 to keypad C2
  Pi GPIO16 to keypad C3
  2. เนื่องจากผมต้องการต่อ input pull up แบบ internal
  กำหนดค่าใน /boot/config.txt New "gpio" config command
sudo nano /boot/config.txt
กด ctrl+x > y เพื่อ save แล้ว Reboot
2. สร้างโฟลเดอร์ของโปรเจค จากนั้น init โปรเจค
 mkdir keypad3x4
 cd keypad3x4
 npm init -y
  3. ติดตั้ง module onoff  npmjs.com/package/onoff
npm add onoff
4. สร้างไฟล์ app.js เพื่อเขียนโปรแกรม จากนั้นกด Save
  //Pi GPIO6  to keypad R1
//Pi GPIO13 to keypad R2
//Pi GPIO19 to keypad R3
//Pi GPIO26 to keypad R4
//Pi GPIO21 to keypad C1
//Pi GPIO20 to keypad C2
//Pi GPIO16 to keypad C3
const Gpio = require('onoff').Gpio;
const keypadR1 = new Gpio(6, 'out');
const keypadR2 = new Gpio(13, 'out');
const keypadR3 = new Gpio(19, 'out');
const keypadR4 = new Gpio(26, 'out');
const keypadC1 = new Gpio(21, 'in', 'falling', {debounceTimeout: 10});
const keypadC2 = new Gpio(20, 'in', 'falling', {debounceTimeout: 10});
const keypadC3 = new Gpio(16, 'in', 'falling', {debounceTimeout: 10});
let scanRow = 0
const keys = [
  ['1','2','3'],
  ['4','5','6'],
  ['7','8','9'],
  ['*','0','#'],
]
keypadC1.watch((err, value) => {
  if (err) {
    throw err;
  }
  console.log('keypad C1')
  checkKey(0)
});
keypadC2.watch((err, value) => {
  if (err) {
    throw err;
  }
  console.log('keypad C2')
  checkKey(1)
});
keypadC3.watch((err, value) => {
  if (err) {
    throw err;
  }
  console.log('keypad C3')
  checkKey(2)
});
const checkKey = (col) => {
  console.log('Key:', keys[scanRow][col], new Date().getTime())
}
const scanInterval = setInterval(function(){ 
  // console.log('scanRow:', scanRow)
  if(++scanRow >= 4) scanRow = 0; 
  keypadR1.writeSync(1)
  keypadR2.writeSync(1)
  keypadR3.writeSync(1)
  keypadR4.writeSync(1)
  
  switch(scanRow) {
    case 0: keypadR1.writeSync(0); break; 
    case 1: keypadR2.writeSync(0); break;
    case 2: keypadR3.writeSync(0); break;
    case 3: keypadR4.writeSync(0); break;
  }
 
}, 50);
process.on('SIGINT', _ => {
  keypadR1.unexport();
  keypadR1.unexport();
  keypadR1.unexport();
  keypadR1.unexport();
  keypadC1.unexport();
  keypadC1.unexport();
  keypadC1.unexport();
});
console.log('Start scan keypad')
 
5. กลับไปที่ Terminal รันโปรแกรม พิมพ์คำสั่ง node app แล้วลองกดปุ่มดู
node app
มาดูการทำงานของโปรแกรมคร่าวๆ
const Gpio = require('onoff').Gpio;
เรียกใช้งาน module onoff เพื่อควบคุม gpio
const keypadR1 = new Gpio(6, 'out');
กำหนดขา 6 เป็น output สำหรับ keypad row
const keypadC1 = new Gpio(21, 'in', 'falling', {debounceTimeout: 10});
กำหนดขา 21 เป็น input สำหรับ keypad column, falling=interrupt ขอบลบ, debounce=10ms 
let scanRow = 0
const keys = [
  ['1','2','3'],
  ['4','5','6'],
  ['7','8','9'],
  ['*','0','#'],
]
กำหนดตัวแปร scanRow=นับค่า row, keys=ค่า key 
keypadC1.watch((err, value) => {
  if (err) {
    throw err;
  }
  console.log('keypad C1')
  checkKey(0)
});
กำหนด interrupt รับปุ่ม
const checkKey = (col) => {
  console.log('Key:', keys[scanRow][col], new Date().getTime())
}
ฟังชั่นแสดงค่า key
const scanInterval = setInterval(function(){ 
  // console.log('scanRow:', scanRow)
  if(++scanRow >= 4) scanRow = 0; 
  keypadR1.writeSync(1)
  keypadR2.writeSync(1)
  keypadR3.writeSync(1)
  keypadR4.writeSync(1)
  switch(scanRow) {
    case 0: keypadR1.writeSync(0); break; 
    case 1: keypadR2.writeSync(0); break;
    case 2: keypadR3.writeSync(0); break;
    case 3: keypadR4.writeSync(0); break;
  }
}, 50);
สแกน row ทุกๆ 50ms
ฝากกดติดตาม blog นี้ด้วยนะครับ
ติดตามพูดคุยได้ที่ facebook: Bulantech
การใช้งาน โมดูลปุ่มกด 12 ปุ่ม 3x4 Matrix Keypad บน Raspberry pi ด้วย Node js
 
        Reviewed by amaloma
        on 
        
ตุลาคม 08, 2564
 
        Rating: 
 
        Reviewed by amaloma
        on 
        
ตุลาคม 08, 2564
 
        Rating: 










ไม่มีความคิดเห็น