28
Thaieasyelec นายสิทธิกร หมึกแดง (นักศึกษาฝ ึกงาน ) : Line computer54 QT + RFID MAIFARE

บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

QT + RFID MAIFARE

Page 2: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ไฟล์ mianwindow.ui ไดเรกทอรี่ Forms ภายในประกอบไปด้วย Form File (.ui) ท่ีได้จากการออกแบบ หน้าตาของโปรแกรม (User Interface)

การออกแบบ GUI สามารถดูรายละเอียดเพ่ิมเติมได้จากก บทความการพัฒนาโปรแกรมบน Raspberry Pi ด้วย Qt ตอนท่ี 3 แนะน าการใช้งาน Qt Creator

. .

. .

Page 3: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

อธิบาย ไฟล์ mianwindow.ui เพ่ิมเติม 1. ปุ่ม btn_connect_printer คือปุ่มคอนเน็ค ท ำหน้ำเชื่อมต่อกับคอมพอร์ต 1.1 comboBox_port_printer คือ คอมโบบล็อก มีไว้ส ำหรับเลือกคอมพอร์ต 1.2 comboBox_baud_rate_printer คือ คอมโบบล็อก มีไว้ส ำหรับเลือกบอร์ดเรต ซ่ึงทั้ง ข้อที่ 1,1.1 และ 1.2 อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_connect_printer_clicked(bool checked) 1.3 textEdit_send คือกล่องข้อควำมทีมีไว้ส ำหรับแสดง ข้อควำมหรือคอมมำนที่ทำง Host ส่งไปยัง Mifare 1.4 textEdit_recive คือกล่องข้อควำมทีมีไว้ส ำหรับแสดง ข้อควำมหรือคอมมำนที่ทำง Mifare ส่งไปยัง Host 2. ปุ่ม btn_select_card คือปุ่มซีเร็คกำร์ด ท ำหน้ำตรวจเช็คกำร์ด เม่ือมีกำรน ำกำร์ดมำแตะที่เครื่องอ่ำน อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_select_card_clicked() 3. ปุ่ม btn_led_on คือปุ่มแอลอีดีออน ท ำหน้ำที่สั่งให้ หลอด LED ที่อยู่ภำยในเครื่องอ่ำนบัตรติดสว่ำง อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_led_on_clicked() 4. ปุ่ม btn_led_off คือปุ่มแอลอีดีออฟ ท ำหน้ำที่สั่งให้ หลอด LED ที่อยู่ภำยในเครื่องอ่ำนบัตรดับ อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_led_off_clicked() 5. combo_login_type คือ คอมโบบล็อก มีไว้ส ำหรับเลือกไทม์ หรือ ก ำหนดสิทธ์ิผู้ใช้งำน 6. combo_login_sector คือ คอมโบบล็อก มีไว้ส ำหรับเลือกเซ็คเตอร์ ที่จะเข้ำไปอ่ำน/เขียน ข้อมูล 7. lineEdit_login_key_1 ถึง lineEdit_login_key_6 คือกล่องข้อควำมทีมีไว้ส ำหรับกรอกรหัส กำรเข้ำใช้งำนกำร์ด ซ่ึงในแต่ละกล่องข้อควำมจะใส่ข้อมูลใน 2 ตัวอักษร หรือ 1 ไบต์ และจะมีข้อมูลทั้งหมด 12 ตัวอักษร หรือ 6 ไบต์ และเป็นข้อมูลฐำนสิบหก 8. ปุ่ม btn_loginคือปุ่มล็อกอิน ท ำหน้ำที่เข้ำล็อกอินใช้งำนกำร์ด โดยจะท ำกำรร่วมกับเครื่องมือ ในข้อ 5 -7 โดยจะน ำข้อมูลในข้อ 5-7 มำ getch ไว้ก่อน ซ่ึงทั้ง ข้อที่ 5,6,7 และ 8 อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_login_clicked()

Page 4: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

9. combo_read_block คือ คอมโบบล็อก มีไว้ส ำหรับเลือกบล็อก เพ่ือท ำกำรอ่ำนข้อมูลภำยในกำร์ด 10. textEdit_read คือกล่องข้อควำมทีมีไว้ส ำหรับแสดงข้อมูลที่อยู่ภำยในกำร์ด 11. ปุ่ม btn_read คือปุ่มอ่ำนข้อมูล ท ำหน้ำที่เข้ำล็อกอินใช้งำนกำร์ด โดยจะท ำกำรร่วมกับเครื่องมือ ในข้อ 5 -10 โดยจะน ำข้อมูลในข้อ 5-10 มำ getch ไว้ก่อน ซ่ึงทั้ง ข้อที่ 9,10 และ 11 อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_read_clicked() 12. lineEdit_write_data1 ถึง lineEdit_write_data16 คือกล่องข้อควำมทีมีไว้ส ำหรับกรอกข้อมูลลงไปนกำร์ด หลักจำกที่ได้ท ำกำรล็อกอิน เลือกเซ็คเตอร์ เลือกบล็อกแล้ว ซ่ึงในแต่ละกล่องข้อควำมจะใส่ข้อมูลใน 2 ตัวอักษร หรือ 1 ไบต์ และจะมีข้อมูลทั้งหมด 32 ตัวอักษร หรือ 16 ไบต์ และเป็นข้อมูลฐำนสิบหก 13. ปุ่ม btn_write_data คือปุ่มเขียนข้อมูล ท ำหน้ำที่เขียนข้อมูลลงไปในกำร์ด โดยจะท ำกำรร่วมกับเครื่องมือ ในข้อ 12 โดยจะน ำข้อมูลในข้อ 12 มำ getch ไว้ก่อน ซ่ึงทั้ง ข้อที่ 12 และ 13 อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_write_data_clicked() 14. lineEdit_write_key1 ถึง lineEdit_write_key6 คือกล่องข้อควำมทีมีไว้ส ำหรับกรอกรหัสซ่ึงในขั้นตอนนี้จะเป็นกำรเปลี่ยนรหัสกำรเข้ำล็อกอินใหม่ ก่อนที่จะท ำกำรเปลี่ยนรหัสใหม่ได้ ต้องท ำกำรล็อกอินด้วยรหัสผ่ำนเก่ำเข้ำมำก่อน ซ่ึงในแต่ละกล่องข้อควำมจะใส่ข้อมูลใน 2 ตัวอักษร หรือ 1 ไบต์ และจะมีข้อมูลทั้งหมด 12 ตัวอักษร หรือ 6 ไบต์ และเป็นข้อมูลฐำนสิบหก 15. btn_write_key คือ ปุ่มเขียนรหัสใหม่ ท ำหน้ำที่เขียนรหัสใหม่ ที่ใช้ในกำรล็อกอินเข้ำมำในกำร์ด โดยจะท ำกำรร่วมกับเครื่องมือ ในข้อ 14 โดยจะน ำข้อมูลในข้อ 14 มำ getch ไว้ก่อน ซ่ึงทั้ง ข้อที่ 14 และ 15 อยู่ภำยใน ฟังก์ชั่น void MainWindow::on_btn_write_key_clicked()

Page 5: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ไฟล์ .pro เป็นไฟล์ท่ีเก็บรายละเอียดของตัว Project บรรทัดที่ 15-17 ไฟล์ mianwindow.h

Page 6: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ไดเรกทอรี่ Headers ภายในประกอบด้วย Header File (.h) ท่ีประกาศใน Project บรรทัดที่ 4-18 เรียกใช้คลำสต่ำงๆที่ใช้ในงำน

Page 7: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 33-44 ประกำศฟังก์ชั่นย่อย ภำยใต้ private slot สำมำรถเรียกใช้งำนตัวแปรที่อยู่ในคลำสเดียวกันได้ เท่ำนั้น บรรทัดที่ 48-49 ประกำศตัวแปร ภำยใต้ private นี้ คลำสอ่ืนๆสำมำรถเรียกใช้งำนตัวแปรได้

Page 8: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ไฟล์ mian.cpp

Page 9: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ไฟล์ mainwindow.cpp ไดเรกทอรี่ Sources ภำยในประกอบด้วย Source File (.cpp) ที่เป็นโค้ดโปรแกรมของ Project บรรทัดที่ 4-15 ประกำศตัวแปร เป็น Global

Page 10: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 24 ประกำศตัวแปร serial_maifare เป็น พอยต์เตอร์ บรรทัดที่ 26-29 เป็นกำรก ำหนดพำรำมิเตอร์ หรือ ก ำหนดชื่อคอมพอร์ตลงไปใน ui_comboBox_port บรรทัดที่ 31-32 เป็นกำรก ำหนดพำรำมิเตอร์ หรือ ก ำหนดบอร์ดเรตลงไปใน ui_comboBox_baud_rate บรรทัดที่ 34-35 เป็นกำรก ำหนดพำรำมิเตอร์ หรือ ก ำหนด type ลงไปใน ui_comboBox_login_type บรรทัดที่ 38-41 เป็นกำรก ำหนดพำรำมิเตอร์ หรือ ก ำหนด sector ลงไปใน ui_comboBox_login_sector บรรทัดที่ 43-46 เป็นกำรก ำหนดพำรำมิเตอร์ หรือ ก ำหนด block ลงไปใน ui_comboBox_login_sector

Page 11: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 56 คือฟังก์ชั่นที่สร้ำงมำจำกอีเว้นท์จำกกำรคลิกขวำที่ปุ่ม connect เลือก Go to slot… ---> Signal > toggled(bool) ---> คลิกปุ่ม Ok บรรทัดที่ 58 ก ำหนดให้ตัวแปร chk_getch=1 บรรทัดที่ 59-62 ก ำหนดเง่ือนไข ถ้ำมีกำรกดปุ่ม connect หรือ ตัวแปร checked==true ก ำหนดให้ตัว แปร chk_port_maifare=1 บรรทัดที่ 64-67 ถ้ำหำกไม่มีกำรกดปุ่ม connect ก ำหนดให้ตัวแปร chk_pory=0 และ ก ำหนดให้ตัวแปร chk_port_maifare=0 บรรทัดที่ 70 ถ้ำหำกมีกำรกดปุ่ม connect หรือ ตัวแปร checked == true บรรทัดที่ 71 ก ำหนดให้ข้อควำมที่ปุ่ม connect เปลี่ยนเป็น Disconnect

Page 12: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 74 เรียกใช้พำรำมิเตอร์จำกบรรทัดที่ 26-29 มำแปลงให้เป็นสตริง เก็บไว้ในตัวแปร ComPort บรรทัดที่ 75 ก ำหนดคอมพอร์ตให้กับ serialport โดยน ำข้อมูลที่เป็นสตริง /dev ซ่ึงเป็นไดเร็กทอรี่ที่ระบุคอม พอร์ตมำต่อด้วยข้อมูลที่อยู่ในตัวแปร Comport ก็จะได้เป็น /dev/ComPort บรรทัดที่ 78-83 เรียกใช้พำรำมิเตอร์จำกบรรทัดที่ 31-32 ซ่ึงข้อมูลจะเป็นชนิด int โดยข้อมูลตัวแรกจะเป็น 0,1,2 ตำมล ำดับ

จำกนั้นก็น ำมำเปรียบเทียบโดยกำรใช้ switch case ถ้ำหำกเรำเลือกข้อมูลใน combox_buad_rate เป็น Buad115200 ข้อมูลที่ รีเทรินออกมำก็จะเป็น 0 เม่ือน ำมำเปรียบเทียบใน switch case ก็จะท ำตำมเง่ือนไขใน case 0 บรรทัดที่ 85 setDatabit ให้มีค่ำเท่ำกับ Data8 บรรทัดที่ 86 setstopbit ให้มีค่ำเท่ำกับ Onestop บรรทัดที่ 87 setparity ให้มีค่ำเท่ำกับ NoParity บรรทัดที่ 88 setflowcontrol ให้มีค่ำเท่ำกับ NoFlowControl บรรทัดที่ 89 ก ำหนดเง่ือนไข ถ้ำหำกว่ำมีกำรเชื่อมต่อกับ Serialport บรรทัดที่ 91 สั่งให้ serialport อ่ำนข้อมูลมำจำกภำยนอก บรรทัดที่ 93 แสดงชื่อคอมพอร์ตที่ ui_textEdit_sent บรรทัดที่ 94 แสดงสถำนะกำรเชื่อมต่อคอมพอร์ตที่ ui_textEdit_recive บรรทัดที่ 97 ถ้ำหำกว่ำเลือกคอมพอร์ตไม่ถูกต้อง หรือ ไม่มีกำรเชื่อมต่อคอมพอร์ต จะมีกล่องข้อควำมแจ้ง

เตือน “Please Check Comport” บรรทัดที่ 101 ถ้ำหำกสถำนะของปุ่ม connect ไม่เท่ำกับ 1 หรือ เป็น false บรรทัดที่ 103 แสดงข้อควำมในหน้ำ console “ Close comport ” บรรทัดที่ 104 เคลียร์ข้อมูลในบัฟเฟอร์ใน read_all_maifare() บรรทัดที่ 105 แสดงข้อควำม “ Connect ” ที่ปุ่ม Connect บรรทัดที่ 106 แสดงข้อควำม “Close Comport” ใน ui_textEdit_sent บรรทัดที่ 107 แสดงข้อควำม “Close Comport Success” ใน ui_textEdit_recive บรรทัดที่ 108 ปิดคอมพอร์ต

Page 13: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 114 ฟังก์ชั่น readyRead_maifare() ท ำหน้ำที่เป็นตัวอ่ำนข้อมูลมำจำกภำยนอก บรรทัดที่ 116 ก ำหนดให้น ำข้อมูลที่อ่ำนมำจำกภำยนอก มำต่อกัน ด้วยค ำสั่ง append บรรทัดที่ 117 รีเทรินข้อมูล ส่งไปยังฟังก์ชั่น process_data_maifare();

Page 14: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 122 ฟังก์ชั่น process_data_maifare(QByteArray data) ท ำหน้ำที่ตัวตรวจเช็คโปรโตคอลข้อมูลว่ำถูกต้อง หรือไม่ ซ่ึงข้อมูลที่น ำมำตรวจเช็คควำมถูกต้องนั้น ถูกรีเทรินมำจำกฟังก์ชั่น ready_read_maifare() ซ่ึงรับมำเก็บไว้ในตัวแปร QByteArray data

บรรทัดที่ 124 ประกำศตัวแปร sum=0 บรรทัดที่ 125 ประกำศตัวแปร chk = data.length()-1 ซ่ึงเป็นข้อมูลตัวสุดท้ำย บรรทัดที่ 127 ประกำศตัวแปร QByteArray header1 บรรทัดที่ 128 ก ำหนดในตัวแปร header1[0] = 0xBD หมำยควำมว่ำก ำหนดให้ตัวแปร header1 ใน index 0 เก็บข้อมูล 0xBD ไว้ เนื่องจำกเป็นข้อมูลที่ Mifare ส่งมำยัง Host ข้อมูลตัวแรก หรือ เฮรดเดอร์จะเป็น 0xBD เสมอ บรรทัดที่ 130 สั่งให้เคลียร์ข้อมูลในตัวแปร status_con บรรทัดที่ 131 ตรวจเช็คเฮรดเดอร์ที่สั่งมำจำก Mifare ว่ำมีค่ำเท่ำกับ 0XBD หรือไม่ ถ้ำถูกต้องท ำบรรทัดถัดไป บรรทัดที่ 133 ตรวจเช็คจ ำนวนของข้อมูลว่ำส่งมำครบหรือไม่ ถ้ำถูกต้องท ำบรรทัดถัดไป บรรทัดที่ 135-137 น ำข้อมูลทั้งหมดมำท ำกำร XOR วนลูป ตำมจ ำนวน length+2 แล้วน ำผลลัพธ์ท่ีได้ท ำกำร XOR เสร็จแล้วไปเก็บไว้ในตัวแปร sum บรรทัดที่ 139 ตรวจเช็คข้อมูลตัวสุดท้ำยที่ได้ท ำกำร XOR หรือ checksum ว่ำมีควำมเท่ำกับ data[chk] หรือไม่ ถ้ำถูกต้องท ำบรรทัดถัดไป บรรทัดที่ 140 ท ำกำรรีเทรินข้อมูล data[2] ส่งไปยังฟังก์ชั่น command_overview เพ่ือท ำกำรตรวจเช็ค คอมมำนต่อไป บรรทัดที่ 141 ท ำกำรรีเทรินข้อมูล data[3] ส่งไปยังฟังก์ชั่น status_overview เพ่ือท ำกำรตรวจเช็ค สถำนะต่อไป บรรทัดที่ 142 น ำข้อมูลที่เก็บอยู่ในตัวแปร data มำแปลงให้เป็น Hex (toHex) และ แปลงให้เป็นอักษร ตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร status_con บรรทัดที่ 143 น ำข้อมูลที่เก็บอยู่ในตัวแปร data มำแปลงให้เป็น Hex (toHex) และ แปลงให้เป็นอักษร ตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร str บรรทัดที่ 145-148 ท ำกำรน ำข้อมูลในแปร data ต้ังแต่ index 4 ถึง index 19 มำเก็บไว้ในตัวแปร str4 ถึง str19 บรรทัดที่ 150–157 น ำข้อมูลในแปร str4 ถึง str 19 มำแปลงให้เป็น Hex (toHex) และ แปลงให้เป็นอักษร ตัวพิมพ์ใหญ่ (toUpper) แล้วน ำมำเก็บไว้ในตัวแปร str4_con ถึง str19_con ตำมล ำดับ บรรทัดที่ 159 ท ำกำรตรวจเช็คข้อมูลในตัวแปร status_con ว่ำมีค่ำเท่ำกับ BD080100E850F74701BD หรือไม่ บรรทัดที่ 161 ก ำหนดให้ตัวแปร chk_getch มีค่ำเท่ำกับ 1 บรรทัดที่ 163 ท ำกำรเคลียร์ข้อมูลในตัวแปร read_all_maifare บรรทัดที่ 166 -169 ถ้ำหำกว่ำกำรตรวจเช็คข้อมูลในครั้งแรก หรือ ท ำกำรตรวจเช็คเฮรดเดอร์ไม่ถูกต้องต้ังแต่แรก จะสั่งให้เคลียร์ข้อมูลในตัวแปร read_all_maifare แล้วให้ท ำกำรอ่ำนข้อมูลใหม่ จนกว่ำข้อมูล จะถูกต้อง

Page 15: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 174 ฟังก์ชั่น on_btn_select_card_clicked() ท ำหน้ำที่ select card หรือท ำกำรตรวจเช็คว่ำมีกำร แตะบัตรหรือไม่ ซ่ึงบัตรดังกล่ำวนั้นต้องเป็นบัตรที่ เครื่องอ่ำนสำมำรถอ่ำนได้ บรรทัดที่ 176 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 180 ก ำหนดตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 182 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 4 โดยเริ่มที่ index 0 … , index 3 บรรทัดที่ 183-186 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร select card ไปเก็บไว้ในตัวแปร data[0] ถึง data[3] บรรทัดที่ 188 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 189 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 190 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร select card บรรทัดที่ 193 – 195 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect ”

Page 16: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 201 ฟังก์ชั่น on_btn_led_on_clicked() ท ำหน้ำที่ On LED บรรทัดที่ 203 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 205 ประกำศตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 207 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 5 โดยเริ่มที่ index 0 … , index 4 บรรทัดที่ 208-212 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร On LED ไปเก็บไว้ในตัวแปร data[0] ถึง data[4] บรรทัดที่ 214 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 215 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 216 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร On LED บรรทัดที่ 219 – 212 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect ”

Page 17: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 227 ฟังก์ชั่น on_btn_led_off_clicked() ท ำหน้ำที่ Off LED บรรทัดที่ 230 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 233 ประกำศตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 235 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 5 โดยเริ่มที่ index 0 … , index 4 บรรทัดที่ 236-240 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร Off LED ไปเก็บไว้ในตัวแปร data[0] ถึง data[4] บรรทัดที่ 242 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 243 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 244 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร Off LED บรรทัดที่ 247 – 250 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect ”

Page 18: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 256 ฟังก์ชั่น on_btn_select_login_clicked() ท ำหน้ำที่ login card บรรทัดที่ 258 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 260-262 ประกำศตัวแปร บรรทัดที่ 264 ประกำศตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 266 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 12 โดยเริ่มที่ index 0 ... , index 11 บรรทัดที่ 267-269 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร login ไปเก็บไว้ในตัวแปร data[0] ถึง data[2] ประกอบด้วย 0xBA,0x0A,0x02 ตำมล ำดับ บรรทัดที่ 271-275 ท ำกำรแปลงข้อมูลที่รับมำจำก ui_comboBox_login_sector ซ่ึงข้อมูลมีชนิดเป็น int ฐำนสิบ มำแปลงให้เป็นฐำนสิบหก แล้วน ำข้อมูลที่แปลงเสร็จแล้วมำเก็บไว้ในตัวแปร data[3] บรรทัดที่ 277-280 น ำข้อมูลที่ได้กำรเลือกไว้ใน ui_combo_login_type มำเปรียบเทียบใน switch case แล้ว น ำข้อมูลที่เป็นคอมมำน (type) ไปเก็บไว้ในตัวแปร data[4]

Page 19: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 283-288 ท ำกำรน ำข้อมูลที่กรอกใน ui_textEdit_key ต้ังแต่ ui_textEdit_key 1 ถึง ui_textEdit_key 6 มำเก็บไว้ในตัวแปร key1 ถึง key6 ซ่ึงในขั้นตอน login card จะต้องท ำ กำรใส่ key หรือ รหัสก่อน บรรทัดที่ 290-295 น ำข้อมูลที่เก็บอยู่ในตัวแปร key1 ถึง key6 มำแปลงให้เป็นฐำนสิบหก แล้วมำเก็บไว้ในตัวแปร key_con1 ถึง key_con6 บรรทัดที่ 299 – 304 น ำข้อมูลที่เก็บอยู่ในตัวแปร key_con1 ถึง key_con6 มำเก็บไว้ในตัวแปร data[5] ถึง data[11] ตำมล ำดับ บรรทัดที่ 305 -306 ท ำกำร checksum โดยน ำข้อมูลต้ังแต่ data[0] ถึง data[10] มำท ำกำร XOR แล้ว น ำผลลัพธ์ไปเก็บไว้ในตัวแปร data[11] *** ในกรณีนี้ข้อมูลมีกำรเปลี่ยนแปลงได้เสมอ จึงต้องมีกำร checksum เพ่ิมขึ้นมำ ต่ำงจำกกำร select card , on LED , off LED เนื่องจำกขั้นตอนพวกนี้ข้อมูล หรือ command ไม่ได้มีกำรเปลี่ยนแปลงจึงไม่จ ำเป็นต้องมีกำร checksum อยู่ตลอด เพียงแค่ checksum ไว้ต้ังแต่แรกแล้วก ำหนดค่ำใส่ไว้ในข้อมูลตัวสุดท้ำยได้เลย บรรทัดที่ 308 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 309 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 310 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร login card บรรทัดที่ 313-316 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect ”

Page 20: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 320 ฟังก์ชั่น on_btn_read_clicked() ท ำหน้ำที่ login card บรรทัดที่ 322 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 324 ประกำศตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 326 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 5 โดยเริ่มที่ index 0 ... , index 4 บรรทัดที่ 327-329 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร read data block ไปเก็บไว้ในตัวแปร data[0] ถึง data[2] ประกอบด้วย 0xBA,0x03,0x03 ตำมล ำดับ บรรทัดที่ 331 ประกำศตัวแปร chk_combo_login_sector เพ่ือน ำมำเก็บข้อมูลที่รีเทรินมำจำกกำรเลือก ข้อมูลใน ui_combo_login_sector บรรทัดที่ 332 ประกำศตัวแปร combo_read_block เพ่ือน ำมำเก็บข้อมูลที่รีเทรินมำจำกกำรเลือกข้อมูล

Page 21: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

ใน ui_combo_read_block บรรทัดที่ 335 – 353 ใช้ switch case ท ำกำรเปรียบเทียบข้อมูลที่รับมำจำก chk_combo_login_sector กำร reda data block นั้นจะมีข้อมูล 2 ข้อมูลที่ท ำงำนขึ้นต่อกัน คือข้อมูลที่เป็น sector และ ข้อมูลที่เป็น block ยกตัวอย่ำง ถ้ำหำกว่ำเรำเลือก sector 0 และ เลือก block ก็จะเข้ำ case 0 ดูได้จำกตำรำงที่ 5 ในบทควำมท ำควำมรู้จักับ Thermal Printer ดังนี้

………… บรรทัดที่ 355 ท ำกำร checksum โดยกำรน ำข้อมูลใน data[0] ถึง data[3] มำ XOR แล้วน ำไปเก็บไว้ใน ตัวแปร data[4] บรรทัดที่ 357 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 358 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 359 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร read data block บรรทัดที่ 360 ก ำหนดให้ตัวแปร chk_fn_read มีค่ำเท่ำกับ 1

Page 22: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 364 - 366 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect ” บรรทัดที่ 371 ฟังก์ชั่น on_btn_write_data_clicked() ท ำหน้ำที่เขียนข้อมูลลงไปใน กำร์ด บรรทัดที่ 374 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 377-382 ประกำศตัวแปร

Page 23: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 383 ประกำศตัวแปร data เป็นชนิด ByreArray บรรทัดที่ 385 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ 21 โดยเริ่มที่ index 0 ... , index 20 บรรทัดที่ 386-388ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร write data block ไปเก็บไว้ในตัวแปร data[0] ถึง data[2] ประกอบด้วย 0xBA,0x13,0x04 ตำมล ำดับ บรรทัดที่ 390-408 ในขั้นตอนนี้จะมีกำรใส่ข้อมูล เหมือนกับบรรทัดที่ 335 -353 ของฟังก์ชั่น on_btn_read_clicked() บรรทัดที่ 410 -425 ท ำกำรน ำข้อมูลที่ได้กรอกไว้ใน ui_lineEdit_data1 ถึง ui_lineEdit_data16 มำเก็บไว้ในตัว แปร key1 ถึง key16 จำกนั้นก็น ำข้อมูลที่เก็บอยู่ในตัวแปร key1 ถึง key16 มำแปลงให้เป็น ฐำนสิบ16 แล้วน ำมำเก็บไว้ในตัวแปร key1_con ถึง key_con16 บรรทัดที่ 428 -431 น ำข้อมูลที่เก็บอยู่ในตัวแปร key1_con ถึง key_con16 มำเก็บไว้ในตัวแปร data[4 ถึง data[19]

Page 24: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 434-435 ท ำกำร checksum โดยน ำข้อมูลที่เก็บอยู่ในตัวแปร data[0] ถึง data[19] มำ XOR แล้วน ำ ผลลัพธ์ไปเก็บไว้ในตัวแปร data[20] บรรทัดที่ 438 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 439 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_textEdit_send บรรทัดที่ 340 น ำข้อมูลในตัวแปร data ทั้งหมดส่งไปยัง Mifare เพ่ือท ำกำร write data block บรรทัดที่ 445 - 448 ถ้ำหำกว่ำยังไม่มีกำรกดปุ่ม connect จะท ำกำรแสดงข้อควำมใน ui_textEdit_sent และ ui_textEdit_recive เป็น “ No connect บรรทัดที่ 455 ฟังก์ชั่น on_btn_write_key_clicked() ท ำหน้ำที่เขียนรหัส ที่ใช้ในกำร login ลงในกำร์ด บรรทัดที่ 458 ท ำกำรตรวจเช็คว่ำ มีกำรกดปุ่ม connect คอมพอร์ตแล้วหรือไม่ บรรทัดที่ 460-462 ประกำศตัวแปร บรรทัดที่ 464 ประกำศตัวแปร data เป็นชนิด ByreArray

Page 25: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 466 ก ำหนดขนำดของตัวแปร data ให้มีขนำดเท่ำกับ11 โดยเริ่มที่ index 0 ... , index 10 บรรทัดที่ 467-469 ก ำหนดข้อมูล หรือ รูปแบบโปรโตคอลที่ใช้ในกำร write data block ไปเก็บไว้ในตัวแปร data[0] ถึง data[2] ประกอบด้วย 0xBA,0x09,0x07 ตำมล ำดับ บรรทัดที่ 471-475 รับข้อมูลมำจำก ui_combo_login_sector แล้วน ำมำเก็บไว้ในตัวแปร sector_1 จำกนั้นก้ ท ำกำรแปลงข้อมูลให้เป็นฐำนสิบหก แล้วน ำข้อมูลไปเก็บไว้ในตัวแปร data[3] บรรทัดที่ 478-483 น ำข้อมูลที่กรอกไว้ใน ui_textEdit_write_key1 ถึง ui_textEdit_write_key6 มำเก็บไว้ใน ตัวแปร key1 ถึง key6 ตำมล ำดับ บรรทัดที่ 485-490 น ำข้อมูลที่เก็บอยู่ในตัวแปร key1 ถึง key6 มำแปลงเป็นให้เป็นฐำนสิบหก แล้วน ำไปเก็บไว้ ในตัวแปร key_con1 ถึง key_con6 ตำมล ำดับ

บรรทัดที่ 493-498 น ำข้อมูลที่เก็บอยู่ในตัวแปร key_con1 ถึง key_ con6 มำเก็บไว้ในตัวแปร data[4] ถึง data[10] ตำมล ำดับ บรรทัดที่ 499-450 ท ำกำร checksum โดยน ำข้อมูลที่เก็บอยู่ในตัวแปร data[0] ถึง data[9] มำ XOR แล้วน ำ ผลลัพธ์ไปเก็บไว้ในตัวแปร data[10] บรรทัดที่ 502 น ำข้อมูลในตัวแปร data มำแปลงมำเป็น Hex (toHex) และ แปลงให้เป็นอักษรตัวพิมพ์ใหญ่ (toUpper) และ น ำข้อมูลที่ได้ท ำกำรแปลงแล้วมำเก็บไว้ในตัวแปร command_con บรรทัดที่ 503 น ำข้อมูลในตัวแปร command_con มำแสดงใน ui_

Page 26: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 542-559 ฟังก์ชั่น status_overview( QbyteRef data_status) ท ำหน้ำที่เป็นตัวตรวจเช็ค สถำนะ โดยน ำข้อมูลที่ฟังก์ชัน Process_data รีเทรินมำให้ ซ่ึงเก็บอยู่ในตัวแปร data_status จำกนั้นก็น ำข้อมูลที่อยู่ในตัวแปร data_status มำเปรียบข้อมูลโดย ใช้ switch case เม่ือตรงกับ case ใด ก็จะแสดงข้อมูลออกไปยัง ui_textEdit_send ซ่ึง ข้อมูลที่ส่งออกไปแสดง จะประกอบด้วย คอมมำน และ ควำมหมำยของคอมมำนนั้นๆ บรรทัดที่ 562 เป็นกำรตรวจเช็คสถำนะ เหมือนกับบรรทัดที่ 548-559 เช่นกัน แต่จะมีกำรตรวจเช็คเง่ือนไข เพ่ิมเติม ดังนี้ บรรทัดที่ 564 ก ำหนดเง่ือนไข ถ้ำหำกว่ำตัวแปร chk_fn_read==1 สั่งให้ท ำในบรรทัดถัดไป ซ่ึง ตัวแปร chk_fn_read นี้ได้ถูกก ำหนดค่ำไว้ให้เท่ำกับ 1 แล้ว เม่ือมีกำรเรียกใช้ฟังก์ชั่น on_btn_read_clicked() บรรทัดที่ 567-570 น ำข้อมูลในตัวแปรต้ังแต่ str4_con ถึง str19_con มำต่อกัน ซ่ึงเป็นตัวแปรที่ประกำศเป็น Global ซ่ึงได้ถูกน ำไปใช้ในฟังก์ชั่น process_data แล้วก่อนหน้ำนี้ เพ่ือท ำกำร getch ข้อมูลไว้ ในตัวแปรดังกล่ำว จำกนั้นเรำก็น ำข้อมูลดังกล่ำวส่งออกไปแสดงใน ui->textEdit_read ซ่ึงข้อมูลดังกล่ำวนี้ก็คือ ข้อมูลที่ถูกเก็บไว้ใน block นั้นเอง ซ่ึงข้อมูลเหล่ำนี้จะถูกน ำมำแสดงใน ขั้นตอนกำรเรียกใช้งำนฟังก์ชั่น on_btn_read_clicked() เท่ำนั้น

Page 27: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 572 ก ำหนดเง่ือนไขว่ำ ตัวแปร chk_getch==1 หรือไม่ ถ้ำใช่ให้ท ำบรรทัดถัดไป บรรทัดที่ 574-575 ประกำศตัวแปร บรรทัดที่ 577-586 แปลงข้อมูลที่อยู่ในตัวแปร status_con[8] ถึง status_con[17] ให้เป็น Ascii (toAscii) แล้ว น ำไปเก็บไว้ในตัวแปร data[0] ถึง data[9] เพ่ือจะน ำไปตรวจเช็คในกำรเลือกชนิดของกำร์ด ต่อไป บรรทัดที่ 588 น ำข้อมูลที่อยู่ในตัวแปร data ทั้งหมด มำเก็บไว้ในตัวแปร data_sum บรรทัดที่ 590 น ำข้อมูลที่อยู่ในตัวแปร data[9] มำเก็บไว้ในตัวแปร chk_data บรรทัดที่ 591 น ำข้อมูลที่อยู่ในตัวแปร chk_data มำแปลงเป็นจ ำนวนเต็ม หรือ ฐำนสิบ บรรทัดที่ 593 ก ำหนดเง่ือนไข ถ้ำหำกตัวแปร data[9] == ‘A’ ถ้ำเป็นจริงให้ท ำบรรทัดถัดไป บรรทัดที่ 595 ก ำหนดให้ตัวแปร chk_case มีค่ำเท่ำกับ 10

Page 28: บทความ การเขียนโปรแกรมและอธิบาย code RFID Mifare

Thaieasyelec

นายสิทธิกร หมึกแดง (นักศึกษาฝึกงาน ) : Line computer54

บรรทัดที่ 598-610 น ำตัวแปร chk_case เช็คเง่ือนไข โดยใช้ switch case ถ้ำตรงกับเง่ือนไขใด ก็จะมีกำรแสดง- ข้อมูลออกไปยัง ui_textEdit_recive ซ่ึงข้อมูลที่ส่งออกไปจะประกอบด้วย สถำนกำรณ์ท ำงำน ของกำร์ด , data_sum และ ชนิดของกำร์ด