Advertisement
21ani

emoneey_merchant_lcd

Jul 18th, 2020
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.42 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. #include <Wire.h>
  22. #include <LiquidCrystal_I2C.h>
  23.  
  24. LiquidCrystal_I2C lcd(0x3F, 20, 4);
  25.  
  26. #define RST_PIN         9
  27. #define SS_PIN          10
  28.  
  29. MFRC522 mfrc522(SS_PIN, RST_PIN);
  30.  
  31. MFRC522::MIFARE_Key key;
  32.  
  33. long tagihan = 10000;            // isikan tagihan merchant kelipatan 1000, max 255rb
  34.  
  35. bool notif = true;
  36.  
  37. long saldo;
  38. int digit;
  39.  
  40. long OLDsaldo;
  41. int OLDdigit;
  42.  
  43. void setup() {
  44.     Serial.begin(9600);
  45.     SPI.begin();        
  46.     mfrc522.PCD_Init();
  47.  
  48.     for (byte i = 0; i < 6; i++) {
  49.         key.keyByte[i] = 0xFF;
  50.     }
  51.  
  52.     Serial.println("EMONEY Tanpa Server - Merchant");
  53.     Serial.println();
  54.     Serial.println("Peringatan : Data akan di simpan pada RFID Card pada sector #1 (blocks #4)");
  55.     Serial.println();
  56.  
  57.     lcd.begin();
  58.     lcd.home ();
  59.     lcd.print("EMONEY - Merchant");  
  60.    
  61.     if (tagihan > 255000){
  62.       while(1){
  63.         Serial.println("ERROR - Tagihan merchant lebih dari 255rb");
  64.       }
  65.     }
  66.  
  67.     Serial.print("Tagihan Merchant : ");
  68.     Serial.println(tagihan);
  69.  
  70.     lcd.setCursor(0,1);
  71.     lcd.print("Harga ");
  72.     lcd.print(tagihan);
  73.    
  74.     digit = tagihan/1000;
  75.     //Serial.println(digit);
  76. }
  77.  
  78. void loop() {
  79.   if (notif){
  80.     notif = false;
  81.     Serial.println();
  82.     Serial.println("________________________________________________________________________________");
  83.     Serial.println("Silahkan tap kartu");
  84.     Serial.print("Setiap TAP, saldo berkurang sebesar ");
  85.     Serial.println(tagihan);
  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.   //Serial.println("Current data in sector:");
  124.   mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
  125.   Serial.println();
  126.  
  127.   // Baca Saldo yang ada dari RFID Card
  128.   status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  129.   if (status != MFRC522::STATUS_OK) {
  130.       Serial.println("Gagal Baca Kartu RFID");
  131.       //Serial.println(mfrc522.GetStatusCodeName(status));
  132.       resetReader();
  133.       return;
  134.   }
  135.   OLDdigit = buffer[0];
  136.   OLDsaldo = OLDdigit;
  137.   OLDsaldo *= 1000;
  138.   Serial.print("Saldo Kartu Sebelumnya : ");
  139.   Serial.println(OLDsaldo);
  140.   Serial.println();
  141.   lcd.setCursor(0,2);
  142.   lcd.print("Saldo Kartu");
  143.   lcd.setCursor(0,3);
  144.   lcd.print(OLDsaldo);
  145.   delay(2000);
  146.   lcd.setCursor(0,2);
  147.   lcd.print("                   ");
  148.   lcd.setCursor(0,3);
  149.   lcd.print("                   ");
  150.  
  151.   // Kurangi Saldo sebesar tagihan merchant
  152.   if (OLDdigit < digit){
  153.     Serial.println("Saldo belum di kurangi, saldo tidak cukup, silahkan isi saldo terlebih dahulu");
  154.     Serial.println("GAGAL bayar merchant");
  155.     lcd.setCursor(0,2);
  156.     lcd.print("GAGAL Bayar");
  157.     lcd.setCursor(0,3);
  158.     lcd.print("Saldo Kurang");
  159.     delay(2000);
  160.     lcd.setCursor(0,2);
  161.     lcd.print("                   ");
  162.     lcd.setCursor(0,3);
  163.     lcd.print("                   ");
  164.  
  165.     resetReader();
  166.     return;
  167.   }
  168.  
  169.   OLDdigit -= digit;
  170.  
  171.   byte dataBlock[]    = {
  172.       //0,      1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15
  173.       OLDdigit, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  174.   };
  175.   status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
  176.   if (status != MFRC522::STATUS_OK) {
  177.       Serial.println("GAGAL Write Saldo pada Kartu RFID");
  178.       //Serial.println(mfrc522.GetStatusCodeName(status));
  179.   }
  180.   Serial.println();
  181.  
  182.   status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  183.   if (status != MFRC522::STATUS_OK) {
  184.       Serial.println("Gagal Baca Kartu RFID");
  185.       //Serial.println(mfrc522.GetStatusCodeName(status));
  186.   }
  187.  
  188.   Serial.println();
  189.  
  190.   Serial.println("Mengurangi Saldo...");
  191.   if (buffer[0] == dataBlock[0]){
  192.     saldo = buffer[0];
  193.     saldo *= 1000;
  194.     //Serial.print("data digit ke 0 : ");
  195.     //Serial.println(buffer[0]);
  196.     Serial.print("======================>>>>>> Saldo kartu sekarang : ");
  197.     Serial.println(saldo);
  198.     Serial.println("_________ Berhasil bayar Merchant ___________");
  199.     lcd.setCursor(0,2);
  200.     lcd.print("BERHASIL Bayar");
  201.     lcd.setCursor(0,3);
  202.     lcd.print("Sisa Saldo ");
  203.     lcd.print(saldo);
  204.     delay(2000);
  205.     lcd.setCursor(0,2);
  206.     lcd.print("                   ");
  207.     lcd.setCursor(0,3);
  208.     lcd.print("                   ");
  209.   }else{
  210.     Serial.println("------------ GAGAL bayar Merchant --------------");
  211.   }
  212.  
  213.   Serial.println();
  214.  
  215.   // Dump the sector data
  216.   //Serial.println("Current data in sector:");
  217.   //mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
  218.   Serial.println();
  219.  
  220.   resetReader();
  221. }
  222.  
  223. void dump_byte_array(byte *buffer, byte bufferSize) {
  224.     for (byte i = 0; i < bufferSize; i++) {
  225.         Serial.print(buffer[i] < 0x10 ? " 0" : " ");
  226.         Serial.print(buffer[i], HEX);
  227.     }
  228. }
  229.  
  230. void resetReader(){
  231.   // Halt PICC
  232.   mfrc522.PICC_HaltA();
  233.   // Stop encryption on PCD
  234.   mfrc522.PCD_StopCrypto1();
  235.  
  236.   notif = true;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement