Desain & Implementasi Perangkat Lunak Proyek IMKA

Dalam pengerjaan perangkat lunak ini kami menggunakan platform website dengan hosting online gratis. Kemudian kami menggunakan MYSQL sebagai database dan protokol HTTP sebagai sarana komunikasi data.

Berikut ini merupakan flow chart perangkat lunak dari proyek ini.



Untuk source code ada dua komponen yang penting, yakni source code menu utama yang berformat .ino dan juga .php untuk menghubungkan dengan website.

Berikut ini source code dari menu utama Arduino.

//Import Library
#include <SPI.h>
#include <MFRC522.h>
#include <Keypad.h>

#define RST_PIN         9           // Configurable, see typical pin layout above
#define SS_PIN          8           // Configurable, see typical pin layout above

MFRC522 rfid(SS_PIN, RST_PIN);   // Create MFRC522 instance
byte nuidPICC[4];

//*****************************************************************************************//
//Konfigurasi Keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {3,2,A4,0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A3,A2,A1,A5}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//*****************************************************************************************//

//Variabel Global
char c;
int Harga = 0;
char jumlah;
bool keluar;
String pengguna[2] = {"E5 1C 8B AB","55 8B 61 5F"};
String id;


//Konfigurasi ethernet
#include<Ethernet.h>

byte mac[]={0xDE, 0xAD, 0xEF, 0xFE, 0xED};
//set static IP
IPAddress ip(10,10,10,40);

//set server
char server[]="arsiamallah.000webhostapp.com";

//inisialisasi sebagai client
EthernetClient client;

void printIP(){
  //Ini untuk memeriksa apakah mendapatkan IP
 Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
}

void sendData(String x, String y){
  if(Ethernet.begin(mac)==0){
    Serial.println("Gagal menggunakan DHCP server");
    Ethernet.begin(mac,ip);
  }
 
  Serial.println("Menyambungkan ke server");
  x.replace(" ","%20");
  if(client.connect(server,80)){
    Serial.println("Terhubung dengan server");
    //membuat HTTP request
    client.println("GET /update.php?submit=&total="+y+"000&id="+x+" HTTP/1.1");
    client.println("Host: arsiamallah.000webhostapp.com");
    client.println("Connection: close");
    client.println();
  } else{
    Serial.println("Gagal menghubungkan ke server");
  }
}


int ctoint(char c){
  switch(c){
    case '0': return 0; break;
    case '1': return 1; break;
    case '2': return 2; break;
    case '3': return 3; break;
    case '4': return 4; break;
    case '5': return 5; break;
    case '6': return 6; break;
    case '7': return 7; break;
    case '8': return 8; break;
    case '9': return 9; break;
  }
}

void pilihan1(){
  Serial.println("Harga Beras 13.000 /Kg");
  Serial.print("Masukkan jumlahnya : ");
  jumlah = keypad.waitForKey();
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*13);
}

void pilihan2(){
  Serial.print("Harga Rp 12.000 /Kg\n");
  Serial.print("Masukkan jumlahnya : ");
  jumlah = keypad.waitForKey();
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*12);
}

void pilihan3(){
  Serial.print("Harga Minyak Rp 15.000 /L\n");
  Serial.print("Masukkan jumlahnya : ");
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*15);
}

void menuUtama()//Menampilkan menu utama
{
  noTone(5);//Mematikan buzzer
  Serial.println("///////////////////////////////////");
  Serial.println("Pilih transaksi yang Anda inginkan:");
  Serial.println("1. Beras");
  Serial.println("2. Gula");
  Serial.println("3. Minyak");
  Serial.println("4. Batal");
  Serial.println("'#' Selesai");
  Serial.println("///////////////////////////////////");
  Serial.print("Masukkan pilihan: ");
  /* UNTUK baca melalui serial
  while(!Serial.available())
  {}
  c = Serial.read();*/
    c = keypad.waitForKey();
    Serial.println(c);
    if(c!=NO_KEY){
      if((c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')||(c=='#')){
          switch(c){
              case '1': pilihan1(); break;
              case '2': pilihan2(); break;
              case '3': pilihan3(); break;
              case '4': Serial.print("Transaksi dibatalkan\n"); keluar = true; Harga =0; break;
              case '#': Serial.print("Sistem sedang memproses pembayaran\n");sendData(id,String(Harga));keluar = true; break;
          }
          Serial.print("Total : Rp. ");
          Serial.print(Harga);
          if(Harga==0){
            Serial.println(",-");
          } else{
            Serial.println(".000,-");
            Serial.println("\n");
          }
      } else{
          Serial.println("Masukan salah, silahkan ulangi");
        }
    }
}



String getHex(byte *buffer, byte bufferSize) {
  //Fungsi ini untuk memperoleh nilai string dari RFID (HEX)
  String s;
  for (byte i = 0; i < bufferSize; i++) {
    s += String(buffer[i]< 0x10 ? " 0" : " ");
    s += String(buffer[i],HEX);
    s.toUpperCase();
  }
  return s;
}

bool cek(String s){
  int i;
  bool found=false;
  while(found==false){
    if(pengguna[i]==s) found =true;
    i++;
  }
  return found;
}


//*****************************************************************************************//
void setup() {
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus

  // disable RFID SPI
  pinMode(9,OUTPUT);
  digitalWrite(9,HIGH);

  // disable w5100 SPI
  pinMode(10,OUTPUT);
  digitalWrite(10,HIGH);

  rfid.PCD_Init();                                           // Init MFRC522 card
  pinMode(5,OUTPUT);                                            // untuk buzzer
  pinMode(6,OUTPUT);                                            // LED Merah
  pinMode(7,OUTPUT);                                            // LED Hijau
  Serial.println("===== Selamat Datang ====\nSilahkan tempelkan kartu anda");
}
//*****************************************************************************************//

void loop() {
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
 
  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    return;
  }

 
  // Store NUID into nuidPICC array
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }
 
  id = getHex(rfid.uid.uidByte, rfid.uid.size);
  id.remove(0,1);
  if(cek(id)){
      digitalWrite(6,LOW);
      digitalWrite(7,HIGH);
      tone(5,4000); //Menyalakan buzzer tanda kartu ditempelkan
      delay(500);
      do{
          menuUtama();
      }while(keluar==false);
  } else{
      digitalWrite(6,LOW);
      delay(300);
      digitalWrite(6,HIGH);
      Serial.println("Kartu tidak terdaftar");
  }
  Serial.print("Transaksi telah selesai\nSilahkan ambil kartu anda\n");
  delay(1000); //change value if you want to read cards faster

  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
  Serial.println("\n\n===== Selamat Datang ====\nSilahkan tempelkan kartu anda");
}


Untuk source code .php, kami pilih yang berkaitan dengan update database .
Desain & Implementasi Perangkat Lunak Proyek IMKA Desain & Implementasi Perangkat Lunak Proyek IMKA Reviewed by Arsi on 8:26 PM Rating: 5

No comments:

Powered by Blogger.