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");
}
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
Reviewed by Arsi
on
8:26 PM
Rating:
No comments: