Terjemahan Source Code
Terjemahan Source Code
#include < EEPROM.h > // Kita akan membaca dan menulis UID
PICC dari/ke EEPROM
#include < SPI.h > // Modul RC522 menggunakan protokol SPI
#include <MFRC522.h > / / Library untuk Perangkat Mifare RC522
/*
Alih-alih Relay Anda mungkin ingin menggunakan servo. Servo juga
dapat mengunci dan membuka kunci pintu
Relay akan digunakan secara default
*/
/*
Untuk memvisualisasikan apa yang terjadi pada perangkat keras ,
kami memerlukan beberapa led dan untuk mengontrol kunci pintu,
relai dan tombol hapus
(atau perangkat keras lainnya) Menggunakan led anoda umum ,
digitalWriting HIGH mematikan led Ingat bahwa jika Anda pergi
untuk menggunakan led katoda umum atau hanya terpisah leds ,
cukup komentar #define COMMON_ANODE,
*/
# tentukan COMMON_ANODE
# ifdef COMMON_ANODE
# tentukan LED_ON RENDAH
# tentukan LED_OFF TINGGI
# lain
# tentukan LED_ON TINGGI
# tentukan LED_OFF RENDAH
#endif _
/////////////////////////////////////////
Mempersiapkan //////// ///////////////////////////////////////
batalkan pengaturan ( ) {
//Konfigurasi Pin Arduino
pinMode ( redLed , OUTPUT);
pinMode ( lampu hijau , OUTPUT);
pinMode ( led biru , OUTPUT);
pinMode ( wipeB , INPUT_PULLUP); // Aktifkan resistor pull up
pin
pinMode ( relai, OUTPUT);
//Hati-hati dengan perilaku rangkaian relai saat menyetel ulang atau
mendaur ulang daya Arduino Anda
digitalWrite ( relai, TINGGI); // Pastikan pintu terkunci
digitalWrite ( merahLed , LED_OFF); // Pastikan led mati
digitalWrite ( led hijau, LED_OFF ); // Pastikan led mati
digitalWrite ( led biru , LED_OFF ); // Pastikan led mati
//Konfigurasi Protokol
Serial.begin (9600 ); // Inisialisasi komunikasi serial dengan PC
SPI.mulai ( ); // MFRC522 Perangkat Keras menggunakan protokol
SPI
mfrc522.PCD_ Init( ); // Inisialisasi Perangkat Keras MFRC522
/////////////////////////////////////// Putaran
Utama /////// ////////////////////////////////////////
lingkaran kosong () {
melakukan {
suksesBaca = getID ( ); // menetapkan successRead ke 1 ketika kita
dibaca dari pembaca jika tidak 0
// Saat perangkat sedang digunakan jika tombol hapus ditekan selama
10 detik, inisialisasi penghapusan Kartu Master
if ( digitalRead ( wipeB ) == LOW) { / / Periksa apakah tombol
ditekan
// Visualisasikan operasi normal terganggu dengan menekan tombol
hapus Merah seperti lebih banyak Peringatan bagi pengguna
digitalWrite ( merahLed , LED_ON); // Pastikan led mati
digitalWrite ( led hijau, LED_OFF ); // Pastikan led mati
digitalWrite ( led biru , LED_OFF ); // Pastikan led mati
// Berikan beberapa umpan balik
Serial.println ( F( "Tombol Hapus Ditekan"));
Serial.println ( F( "Kartu Master akan Dihapus! dalam 10 detik"));
penundaan ( 10000); // Tunggu 10 detik untuk melihat pengguna
masih ingin menghapus
if ( digitalRead ( wipeB ) == RENDAH) {
EEPROM.tulis (1, 0 ); // Setel Ulang Angka Ajaib.
Serial.println ( F( "Restart device untuk memprogram ulang
Master Card"));
sementara (1);
}
}
jika ( mode program ) {
siklusLeds ( ); // Mode Program berputar melalui Merah Hijau
Biru menunggu untuk membaca kartu baru
}
kalau tidak {
normalModeOn ( ); // Mode normal, LED Daya biru menyala,
yang lainnya mati
}
}
while (! suksesBaca ); //program tidak akan berjalan lebih jauh saat
Anda tidak berhasil membaca
jika ( mode program ) {
if ( isMaster ( readCard ) ) { //Ketika dalam mode program periksa
Pertama Jika kartu master dipindai lagi untuk keluar dari mode
program
Serial.println ( F( "Kartu Master Dipindai"));
Serial.println ( F( "Keluar dari Mode Program"));
Serial.println ( F( "-----------------------------"));
programMode = salah;
kembali;
}
kalau tidak {
if ( findID ( readCard ) ) { // Jika kartu yang dipindai diketahui, hapus
kartu tersebut
Serial.println ( F( "Saya tahu PICC ini, menghapus..."));
deleteID ( readCard );
Serial.println ("------------------");
Serial.println ( F( "Pindai PICC untuk ADD atau REMOVE ke
EEPROM"));
}
else { // Jika kartu yang dipindai tidak diketahui, tambahkan
Serial.println ( F( "Saya tidak tahu PICC ini, menambahkan..."));
writeID ( readCard );
Serial.println ( F( "-----------------------------"));
Serial.println ( F( "Pindai PICC untuk ADD atau REMOVE ke
EEPROM"));
}
}
}
kalau tidak {
if ( isMaster ( readCard )) { // Jika ID kartu yang dipindai cocok
dengan ID Master Card - masuk ke mode program
programMode = benar;
Serial.println ( F( "Halo Master - Masuk ke Mode Program"));
uint8_t count = EEPROM.read (0 ); // Baca Byte pertama EEPROM
yang
Serial.print ( F( "Saya punya ")); // menyimpan nomor ID di
EEPROM
Serial.print (hitungan);
Serial.print ( F( " record(s) pada EEPROM"));
Serial.println ("");
Serial.println ( F( "Pindai PICC untuk ADD atau REMOVE ke
EEPROM"));
Serial.println ( F( "Scan Master Card lagi untuk Keluar dari Mode
Program"));
Serial.println ( F( "-----------------------------"));
}
kalau tidak {
if ( findID ( readCard ) ) { // Jika tidak, lihat apakah kartu ada di
EEPROM
Serial.println ( F( "Selamat datang, Anda akan lulus"));
diberikan ( 300); // Buka kunci pintu selama 300 ms
}
else { // Jika tidak, tunjukkan bahwa ID tidak valid
Serial.println ( F( "Kamu tidak boleh lulus"));
ditolak( );
}
}
}
}
////////////////////////////////////// / Akses
Diberikan /////// ////////////////////////////////////////
batal diberikan ( uint 16_t setDelay ) {
digitalWrite ( led biru , LED_OFF ); // Pastikan LED biru mati
penundaan ( 100);
digitalWrite ( led biru , LED_ON ); // Pastikan LED biru menyala
penundaan ( 200);
digitalWrite ( led biru , LED_OFF ); // Pastikan LED biru mati
penundaan ( 100);
digitalWrite ( led biru , LED_ON ); // Pastikan LED biru menyala
penundaan ( 200);
boolean a= digitalRead (relai);
digitalWrite ( relai, !a);
/////////////////////////////////////// Akses
Ditolak / ////// ////////////////////////////////////////
batal ditolak ( ) {
digitalWrite ( led hijau, LED_OFF ); // Pastikan LED hijau mati
digitalWrite ( led biru , LED_OFF ); // Pastikan LED biru mati
digitalWrite ( merahLed , LED_ON); // Nyalakan LED merah
penundaan( 1000);
}
void ShowReaderDetails ( ) {
// Dapatkan versi perangkat lunak MFRC522
byte v = mfrc522.PCD_ ReadRegister( mfrc522.VersionReg);
Serial.print ( F( "Versi Perangkat Lunak MFRC522: 0x"));
Serial.print (v, HEX);
jika (v == 0x91)
Serial.print ( F( " = v1.0"));
lain jika (v == 0x92)
Serial.print ( F( " = v2.0"));
kalau tidak
Serial.print ( F( " (tidak diketahui),mungkin klon cina ?"));
Serial.println ("");
// Ketika 0x00 atau 0xFF dikembalikan, komunikasi mungkin gagal
if ((v == 0x00) || (v == 0xFF)) {
Serial.println ( F( "PERINGATAN: Komunikasi gagal, apakah
MFRC522 terhubung dengan benar?"));
Serial.println ( F( "SYSTEM HALTED: Periksa koneksi."));
// Visualisasikan sistem dihentikan
digitalWrite ( led hijau, LED_OFF ); // Pastikan LED hijau mati
digitalWrite ( led biru , LED_OFF ); // Pastikan LED biru mati
digitalWrite ( merahLed , LED_ON); // Nyalakan LED merah
sementara (benar); // jangan melangkah lebih jauh
}
}
/////////////////////////////////////// Tambahkan ID ke
EEPROM ///// ///////////////////////////////////////////
void writeID ( byte a[] ) {
if ( ! findID ( a ) ) { // Sebelum kita menulis ke EEPROM, periksa
apakah kita pernah melihat kartu ini sebelumnya!
uint8_t num = EEPROM.read (0 ); // Dapatkan jumlah ruang yang
digunakan, posisi 0 menyimpan jumlah kartu ID
uint8_t mulai = ( num * 4 ) + 6; // Cari tahu di mana slot berikutnya
dimulai
bilangan ++; // Tingkatkan penghitung satu per satu
EEPROM.tulis ( 0 , angka ); // Tulis hitungan baru ke penghitung
for ( uint 8_t j = 0; j < 4; j++ ) { // Perulangan 4 kali
EEPROM.write ( mulai + j, a[j] ); // Tulis nilai array ke EEPROM
di posisi yang tepat
}
suksesTulis ( );
Serial.println ( F( " Berhasil menambahkan catatan ID ke
EEPROM"));
}
kalau tidak {
gagalTulis ( );
Serial.println ( F( "Gagal! Ada yang salah dengan ID atau
EEPROM rusak"));
}
}
/////////////////////////////////////// Periksa
Byte /////// ////////////////////////////////////////
boolean cekDua ( byte a[], byte b[] ) {
if ( a [0] != 0 ) // Pastikan ada sesuatu dalam array terlebih dahulu
cocok = benar; // Asumsikan mereka cocok pada awalnya
for ( uint 8_t k = 0; k < 4; k++ ) { // Perulangan 4 kali
if ( a [k] != b[k] ) // JIKA a != b maka set match = false, satu gagal,
semua gagal
cocok = salah;
}
if ( cocok ) { // Periksa apakah kecocokan masih benar
kembali benar; // Kembalikan benar
}
kalau tidak {
kembali salah; // Kembalikan salah
}
}
/////////////////////////////////////// Temukan
Slot /////// ////////////////////////////////////////
uint8_t findIDSLOT ( byte temukan[] ) {
uint8_t count = EEPROM.read (0 ); // Baca Byte pertama EEPROM
yang
for ( uint 8_t i = 1; i <= count; i ++ ) { // Loop sekali untuk setiap
entri EEPROM
readID ( i ); // Membaca ID dari EEPROM, disimpan di storedCard
[4]
if ( checkTwo ( find, storedCard ) ) { // Periksa untuk melihat apakah
storedCard membaca dari EEPROM
// sama dengan kartu identitas find[ ] yang diberikan
kembali saya ; // Nomor slot kartu
merusak; // Berhenti mencari, kami menemukannya
}
}
}