21ani

emoney_cek_tambahsaldo

Jul 12th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.81 KB | None | 0 0
  1. /*
  2.  * Peringatan : Data akan di simpan pada RFID Card pada sector #1 (blocks #4).
  3.  *
  4.  * tytomulyono.com
  5.  * Typical pin layout used:
  6.  * --------------------------------------
  7.  *             MFRC522      Arduino      
  8.  *             Reader/PCD   Uno/101      
  9.  * Signal      Pin          Pin          
  10.  * --------------------------------------
  11.  * RST/Reset   RST          9            
  12.  * SPI SS      SDA(SS)      10            
  13.  * SPI MOSI    MOSI         11 / ICSP-4  
  14.  * SPI MISO    MISO         12 / ICSP-1  
  15.  * SPI SCK     SCK          13 / ICSP-3  
  16.  * tytomulyono.com
  17.  */
  18.  
  19. #include <SPI.h>
  20. #include <MFRC522.h>
  21.  
  22. #define RST_PIN         9           // Configurable, see typical pin layout above
  23. #define SS_PIN          6          // Configurable, see typical pin layout above
  24.  
  25. MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
  26.  
  27. MFRC522::MIFARE_Key key;
  28.  
  29. bool notif = true;
  30. bool isiSaldo = false;
  31. String input;
  32. long saldo;
  33. int digit;
  34.  
  35. long OLDsaldo;
  36. int OLDdigit;
  37.  
  38. void setup() {
  39.     Serial.begin(9600); // Initialize serial communications with the PC
  40.     SPI.begin();        // Init SPI bus
  41.     mfrc522.PCD_Init(); // Init MFRC522 card
  42.  
  43.     for (byte i = 0; i < 6; i++) {
  44.         key.keyByte[i] = 0xFF;
  45.     }
  46.  
  47.     Serial.println("EMONEY Tanpa Server Cek dan Tambah Saldo");
  48.  
  49.     Serial.println();
  50.  
  51.     Serial.println("Peringatan : Data akan di simpan pada RFID Card pada sector #1 (blocks #4)");
  52. }
  53.  
  54. void loop() {
  55.   if (Serial.available()){
  56.     isiSaldo = true;
  57.     input = "";
  58.     while(Serial.available()>0){
  59.       input += char(Serial.read());
  60.     }
  61.     //Serial.println(input);
  62.     saldo = input.toInt();
  63.     if (saldo > 255){
  64.       saldo = 0;
  65.       Serial.println("Saldo tidak boleh lebih dari 255");
  66.     }
  67.     if (saldo < 0){
  68.       saldo = 0;
  69.       Serial.println("Saldo tidak boleh kurang dari 0");
  70.     }
  71.     digit = saldo;
  72.     saldo *= 1000;
  73.     Serial.print("saldo yang di input : ");
  74.     Serial.println(saldo);
  75.     Serial.println("Silahkan tap kartu untuk menambah saldo kartu");
  76.   }
  77.   if (notif){
  78.     notif = false;
  79.     Serial.println();
  80.     Serial.println("________________________________________________________________________________");
  81.     Serial.println("Silahkan input jumlah saldo dan tap kartu");
  82.     Serial.println("tiap decimal dikali 1.000");
  83.     Serial.println("contoh input 9 => saldo = 9ribu || max saldo 255rb");
  84.     Serial.println();
  85.     Serial.println("CEK SALDO LANGSUNG TAP");
  86.   }
  87.   if ( ! mfrc522.PICC_IsNewCardPresent()){
  88.       return;
  89.   }
  90.  
  91.   if ( ! mfrc522.PICC_ReadCardSerial()){
  92.       return;
  93.   }
  94.  
  95.   Serial.println();
  96.   Serial.print("Card UID:");
  97.   dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
  98.  
  99.   Serial.println();
  100.   Serial.print("Tipe Kartu : ");
  101.   MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  102.   Serial.println(mfrc522.PICC_GetTypeName(piccType));
  103.  
  104.   // Cek kesesuaian kartu
  105.   if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI
  106.       &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K
  107.       &&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
  108.       Serial.println(F("Kode ini hanya dapat digunakan pada MIFARE Classic cards 1KB - 13.56MHz."));
  109.       notif = true;
  110.       delay(2000);
  111.       resetReader();
  112.       return;
  113.   }
  114.  
  115.   // that is: sector #1, covering block #4 up to and including block #7
  116.   byte sector         = 1;
  117.   byte blockAddr      = 4;
  118.  
  119.   MFRC522::StatusCode status;
  120.   byte buffer[18];
  121.   byte size = sizeof(buffer);
  122.  
  123.   // Show the whole sector as it currently is
  124.   //Serial.println("Current data in sector:");
  125.   mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
  126.   Serial.println();
  127.  
  128.   if (isiSaldo){
  129.     // Baca Saldo yang ada dari RFID Card
  130.     status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  131.     if (status != MFRC522::STATUS_OK) {
  132.         Serial.println("Gagal Baca Kartu RFID");
  133.         //Serial.println(mfrc522.GetStatusCodeName(status));
  134.         resetReader();
  135.         return;
  136.     }
  137.     OLDdigit = buffer[0];
  138.     OLDsaldo = OLDdigit;
  139.     OLDsaldo *= 1000;
  140.     Serial.print("Saldo Kartu Sebelumnya : ");
  141.     Serial.println(OLDsaldo);
  142.     Serial.println();
  143.  
  144.     // Tambah saldo dan Write Saldo pada RFID Card
  145.     saldo += OLDsaldo;
  146.     digit += OLDdigit;
  147.    
  148.     if (digit > 255){
  149.       saldo = 0;
  150.       digit = 0;
  151.       Serial.println("Saldo sebelum di tambah saldo baru melebihi 255 ribu");
  152.       Serial.println("GAGAL tambah saldo");
  153.       resetReader();
  154.       return;
  155.     }
  156.    
  157.     byte dataBlock[]    = {
  158.         //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15
  159.         digit, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  160.     };
  161.     status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
  162.     if (status != MFRC522::STATUS_OK) {
  163.         Serial.println("GAGAL Write Saldo pada Kartu RFID");
  164.         //Serial.println(mfrc522.GetStatusCodeName(status));
  165.     }
  166.     Serial.println();
  167.  
  168.     status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  169.     if (status != MFRC522::STATUS_OK) {
  170.         Serial.println("Gagal Baca Kartu RFID");
  171.         //Serial.println(mfrc522.GetStatusCodeName(status));
  172.     }
  173.  
  174.     Serial.println();
  175.  
  176.     Serial.println("Menambahkan Saldo...");
  177.     if (buffer[0] == dataBlock[0]){
  178.       //Serial.print("data digit ke 0 : ");
  179.       //Serial.println(buffer[0]);
  180.       Serial.print("Saldo kartu sekarang : ");
  181.       Serial.println(saldo);
  182.       Serial.println("_________ Berhasil isi saldo pada kartu ___________");
  183.     }else{
  184.       Serial.println("------------ GAGAL ISI SALDO --------------");
  185.     }
  186.   }else{
  187.     status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  188.     if (status != MFRC522::STATUS_OK) {
  189.         Serial.println("Gagal Baca Kartu RFID");
  190.         //Serial.println(mfrc522.GetStatusCodeName(status));
  191.         saldo = 0;
  192.         digit = 0;
  193.         resetReader();
  194.         return;
  195.     }
  196.  
  197.     Serial.println();
  198.  
  199.     Serial.println("Cek Saldo Kartu");
  200.     //Serial.print("data digit ke 0 : ");
  201.     //Serial.println(buffer[0]);
  202.     saldo = buffer[0];
  203.     saldo *= 1000;
  204.     Serial.print("===============>>>> Saldo kartu sekarang : ");
  205.     Serial.println(saldo);
  206.   }
  207.  
  208.   saldo = 0;
  209.   digit = 0;
  210.  
  211.   Serial.println();
  212.  
  213.   // Dump the sector data
  214.   //Serial.println("Current data in sector:");
  215.   //mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
  216.   Serial.println();
  217.  
  218.   resetReader();
  219. }
  220.  
  221. void dump_byte_array(byte *buffer, byte bufferSize) {
  222.     for (byte i = 0; i < bufferSize; i++) {
  223.         Serial.print(buffer[i] < 0x10 ? " 0" : " ");
  224.         Serial.print(buffer[i], HEX);
  225.     }
  226. }
  227.  
  228. void resetReader(){
  229.   // Halt PICC
  230.   mfrc522.PICC_HaltA();
  231.   // Stop encryption on PCD
  232.   mfrc522.PCD_StopCrypto1();
  233.  
  234.   notif = true;
  235.   isiSaldo = false;
  236. }
Add Comment
Please, Sign In to add comment