Perancangan dan Realisasi EDC Berbasis Mikrokontroler Arduino Untuk Sistem Pembayaran Berbasis ISO 8583.

(1)

1

Universitas Kristen Maranatha

PERANCANGAN DAN REALISASI EDC BERBASIS

MIKROKONTROLER ARDUINO UNTUK SISTEM

PEMBAYARAN BERBASIS ISO 8583

ABSTRAK

Hans Alexander (0822013)

Jurusan Teknik Elektro Universitas Kristen Maranatha

Email : [email protected]

Dengan teknologi yang sudah ada sekarang, banyak sekali variasi dan

metode berbeda yang dipakai untuk membuat sesuatu dengan menggabungkan

antara hardware dan software. Tugas akhir ini adalah suatu penggabungan antara

hardware (mikrokontroler, PC, keypad, LCD, RFID, kabel penghubung, dll) dan

software (VB NET, SQL Server, dan Arduino Software) dalam suatu sistem

pembayaran yang berbasiskan standarisasi internasional untuk sistem pembayaran

yang disebut ISO 8583.

VDb dan VCM adalah fitur tambahan yang terdapat didalam sistem

pembayaran, baik metoda maupun pemakaiannya. VDb digunakan untuk

menyimpan data user secara offline, ketika SQL Server digunakan untuk

menyimpan data secara online. Sedangkan VCM berupa metoda untuk

penyimpanan data sementara didalam suatu variable atau tools untuk

mempermudah proses data ketika sistem pembayaran dilakukan.

Data yang didapat ketika menguji waktu siklus yang dibutuhkan untuk

menyelesaikan sistem pembayaran sangat variatif, bergantung kepada user itu

sendiri. Waktu yang didapat untuk setiap prosesnya berbeda-beda, tetapi yang

pasti adalah waktu yang dibutuhkan lebih lama daripada waktu yang sudah

ditentukan dalam kode program menggunakan delay untuk setiap prosesnya.

Kata kunci : Virtual Database, Virtual Cache Memory, EDC, ISO 8583, Sistem

Pembayaran, Arduino.


(2)

2

Universitas Kristen Maranatha

DESIGN AND REALIZATION OF EDC BASED ON

ARDUINO MICROCONTROLLER FOR PAYMENT

SYSTEM BASED ON ISO 8583

ABSTRACT

Hans Alexander (0822013)

Jurusan Teknik Elektro Universitas Kristen Maranatha

Email : [email protected]

In currently technologies, there are so many variations and different

methods are used to create something that combined hardware and software. This

final project is combined hardware and software (microcontroller, PC, keypad,

LCD, RFID, connector wire, etc) in a payment system based on international

standardization for payment system is called ISO 8583.

VDb and VCM are features that rarely found on payment system, either

method or it usage. VDb is used for offline data saving, while SQL Server is used

for online data saving. Whereas VCM is a method for temporary data saving in a

variable, tools (in VB.NET likes textbox, listbox, label, etc), etc, which its

purpose is to simplified data process when payment system is running.

Data that received when testing cycle time that needed to finished payment

system is varied, depends on its user itself. Time that needed for each process are

differents, but one that certainly is time that needed are longer than time which

determined in program code using delay for each process.

Keywords : Virtual Database, Virtual Cache Memory, EDC, ISO 8583,


(3)

i

Universitas Kristen Maranatha

DAFTAR ISI

HALAMAN JUDUL, LEMBAR PENGESAHAN DAN PERNYATAAN

DAFTAR ISI... i-iii

DAFTAR GAMBAR………. iv-vii

DAFTAR TABEL………. viii

ABSTRAK... 1

ABSTRACT………...……. 2

KATA PENGANTAR... 3-4

BAB I PENDAHULUAN

I.1 Latar belakang... 5

I.2 Rumusan Masalah... 5

I.3 Tujuan... 6

I.4 Batasan Masalah... 6

BAB II DASAR TEORI

II.1 ISO 8583……….. 7

II.1.1 Konsep ISO 8583……….………. 7-8

II.2 HARDWARE

II.2.1 Mikrokontroler Arduino……… 8-10

II.2.2 SPI LCD Module………... 10-12

II.2.3 RFID (Radio Frequency IDentification)…….……...………... 12-13

II.2.4 Smart Card……….………... 13-14

II.2.5 Keypad……….……….... 15

II.3 SOFTWARE

II.3.1 Microsoft Visual Studio 2010 (VB.NET)……….…... 16

II.3.2 Arduino Software……….. 17


(4)

ii

Universitas Kristen Maranatha

BAB III PERANCANGAN DAN REALISASI

III.1 PERANCANGAN HARDWARE………... 19-20

III.1.1 Perancangan Proses Personifikasi…….………..…… 21

III.1.2 Perancangan Sistem Pembayaran……… 21-24

III.2 PERANCANGAN SOFTWARE

III.2.1 Flowchart Proses Personifikasi……….………….…. 25

III.2.2 Sub-Flowchart Penyimpanan Data User Proses Personifikasi... 26

III.2.3 Flowchart Sistem Pembayaran……….……….…... 26-27

III.2.4 Flowchart Pengiriman Data User dari Arduino ke PC Server……… 28

III.2.5 Flowchart Penerimaan Data dari Arduino ke PC Server………. 29

III.2.6 Flowchart Penerimaan Data String ID dari Arduino oleh PC Server

Dan Pengiriman Respon Dari PC Server ke Arduino……….. 29-30

III.2.7 Flowchart Penerimaan Data Restart dari Arduino oleh PC Ser-

-ver dan Pengiriman Respon dari PC Server ke Arduino……..……. 30

III.2.8 Flowchart Penerimaan Data Password dari Arduino oleh PC Ser-

-ver dan Pengiriman Respon dari PC Server ke Arduino……… 31

III.2.9 Flowchart Penerimaan Data Balance dari Arduino oleh PC Ser-

-ver dan Pengiriman Respon dari PC Server ke Arduino……… 32

III.2.10 Flowchart Penerimaan Data Top Up / Top Down dari Arduino

oleh PC Server dan Pengiriman Respon dari PC Server ke Arduino…. 33

III.3 KODE PROGRAM……….………... 34

III.3.1 Kode Program SQL Server…………...……….... 34


(5)

iii

Universitas Kristen Maranatha

III.3.2 Kode Program VB.NET………. 35

III.3.2.1 Proses Login……….………... 35-37

III.3.2.2 Proses Personifikasi………..………... 37-50

III.3.2.3 Hubungan Serial………..………... 50-52

III.3.2.3.1 Activities Form………. 52-55

III.3.2.3.2 Observing Form……… 55-59

III.3.3 Kode Program Arduino………...……….. 59-60

III.3.3.1 Proses Scanning………...…………..……….…………... 60

III.3.3.2 Proses Konfirmasi Password………..………... 60-61

III.3.3.3 Proses Top Up, Top Down, dan Balance…..………... 61

III.3.3.4 Hubungan Serial………..…… 61-62

BAB IV DATA PENGAMATAN DAN ANALISA

IV.1.1 Proses Personifikasi………..…………... 63

IV.1.2 Proses Scanning……….……….. 63-64

IV.1.3 Proses Konfirmasi Password………..………. 65-66

IV.1.4 Proses Top Up, Top Down, dan Balance………... 66-67

IV.2 Hasil Pengujian……… 67-68

BAB V PENUTUP

V.1 Kesimpulan………... 69

V.2 Saran………. 69

DAFTAR PUSTAKA……….………….... 70


(6)

iv

Universitas Kristen Maranatha

DAFTAR GAMBAR

Gambar 2.1 Mesin EDC……….… 8

Gambar 2.2 DFRduino Mega 2560 V2.0………... 9

Gambar 2.3 Tampak depan SPI LCD Module……….. 11

Gambar 2.4 Tampak belakang SPI LCD Module………. 11

Gambar 2.5 RFID Reader CR013A R/W RFID Module 13.56 MHz +

Antenna……… 12

Gambar 2.6 Chip / Label RFID bersebelahan dengan sebutir beras……... 13

Gambar 2.7 Smart Card untuk keperluan asuransi kesehatan di Perancis…. 14

Gambar 2.8 Mifare Card ( salah satu contoh smart card )……… 14

Gambar 2.9 DI-Smart Keypad 4x4 Input……….….. 15

Gambar 2.10 Skematik rangkaian DI-Smart Keypad 4x4 Input……… 15

Gambar 2.11 Tampilan Microsoft Visual Studio 2010……….. 16

Gambar 2.12 Tampilan Arduino Software………. 17

Gambar 2.13 Toolbar buttons pada Arduino Software……….. 17

Gambar 2.14 Tampilan Microsoft SQL Server 2008 Express………... 18

Gambar 3.1 Diagram blok proses personifikasi………. 19

Gambar 3.2 Diagram blok keseluruhan sistem……….. 19

Gambar 3.3 Skematik keseluruhan hardware dalam sistem pembayaran…. 20

Gambar 3.4 Proses personifikasi User dengan Operator……… 21

Gambar 3.5 Proses penyimpanan data user dari PC Back Office ke


(7)

v

Universitas Kristen Maranatha

PC Server setelah personifikasi user selesai……… 21

Gambar 3.6 Proses identifikasi kartu user………... 22

Gambar 3.7 Proses pengiriman no ID yang berupa string dari RFID

Reader ke Mikrokontroler Arduino………. 22

Gambar 3.8 Proses pengiriman data dari arduino ke PC Server……….. 23

Gambar 3.9 Proses pengiriman respon untuk konfirmasi dari data string

ID user yang ditampilkan pada LCD………... 23

Gambar 3.10 Proses user memasukkan password……….. 24

Gambar 3.11 Flowchart proses personifikasi………... 25

Gambar 3.12 Flowchart penyimpanan data user……….... 26

Gambar 3.13 Flowchart sistem pembayaran………. 27

Gambar 3.14 Flowchart pengiriman data dari arduino ke PC Server………. 28

Gambar 3.15 Flowchart penerimaan data dari arduino oleh PC Server…… 29

Gambar 3.16 Flowchart penerimaan dan pengiriman data string ID

antara Arduino dan PC Server………. 30

Gambar 3.17 Flowchart penerimaan dan pengiriman data restart antara

Arduino dan PC Server………..… 30

Gambar 3.18 Flowchart penerimaan dan pengiriman data password antara

Arduino dan PC Server………... 31

Gambar 3.19 Flowchart penerimaan dan pengiriman data balance antara

Arduino dan PC Server………. 32

Gambar 3.20 Flowchart penerimaan dan pengiriman data Top Up


(8)

vi

Universitas Kristen Maranatha

/ Top Down antara Arduino dan PC Server……… 33

Gambar 3.21 Query SQL Server dan penjelasannya……….. 34

Gambar 3.22 Tampilan form login pada aplikasi VB.NET yang dipakai

Operator untuk proses login……….. 35

Gambar 3.23 Pilihan sebelum exit program dan ucapan terima kasih

ketika program berhasil ditutup………. 36

Gambar 3.24 Peringatan saat login gagal……….. 37

Gambar 3.25 Progress bar sedang dalam proses loading………. 37

Gambar 3.26 Data yang dibutuhkan operator untuk registration form…….. 38

Gambar 3.27 Tampilan registration form secara keseluruhan………... 38

Gambar 3.28 Tampilan tombol clear, clear all, VDb, dan history pada

registration form……… 39

Gambar 3.29 Tampilan Recent Registrated User Form……… 40

Gambar 3.30 Tampilan Virtual Cache Memory Form……….. 42

Gambar 3.31 Peringatan bahwa operator telah berhasil melakukan log out. 42

Gambar 3.32 Bindingnavigator………. 43

Gambar 3.33 Tombol-tombol pada bindingnavigator dan pengertiannya.... 43

Gambar 3.34 Membuat koneksi antara tool pada VB.NET dan database

di SQL Server……… 44

Gambar 3.35 UsersBindingSource Tool yang muncuk ketika koneksi antara

tools ( datagridview, textbox, dan bindingnavigator ) dan

database pada SQL Server berhasil……….. 44


(9)

vii

Universitas Kristen Maranatha

Gambar 3.37 UsersTableAdapter tool……… 46

Gambar 3.38 TableAdapterManager tool………. 50

Gambar 3.39 Tampilan Starting form………. 51

Gambar 3.40 Observing form………... 52

Gambar 3.41 Activities form………. 52

Gambar 3.42 Tools yang dipakai didalam Observing form……… 55

Gambar 3.43 Nilai pointer untuk proses dalam arduino……… 60

Gambar 3.44 Variabel yang dikirim dari arduino ke VB. NET.

Gambar 4.1 Proses Scanning kartu yang tidak terdaftar dalam database…… 64

Gambar 4.2 Proses Scanning kartu yang terdaftar dalam database…………. 64

Gambar 4.3 Scanning kartu yang dilakukan User……… 64

Gambar 4.4 Proses dimana user harus memasukkan password (kiri) dan

Proses pengecekan password yang telah dimasukkan user…… 65

Gambar 4.5 Proses dimana user memasukkan password yang kedua kalinya

(kiri) dan pemberitahuan bahwa password yang telah dimasukkan

sudah benar……….. 65

Gambar 4.6 Tampilan menu utama pada arduino………... 66

Gambar 4.7 Tampilan menu untuk top up………. 66

Gambar 4.8 Tampilan menu untuk top down………...………. 67

Gambar 4.9 Tampilan setelah user menekan tombol “C” pada menu

utama, untuk melakukan pengecekan balance……….…..……... 67


(10)

viii

Universitas Kristen Maranatha

DAFTAR TABEL

Tabel 4.1 Delay yang ditentukan dalam kode progra………….……..……… 68

Tabel 4.2 Data hasil pengujian……… 68


(11)

LAMPIRAN A


(12)

1

A

Proses Top Up, Top Down, dan Registration

Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Timer3.Tick If TextBox11.Text = "" Then

SerialPort1.Open()

TextBox11.Text = SerialPort1.ReadLine() SerialPort1.Close()

If Mid(TextBox11.Text, 1, 7) = "balance" Then

If TextBox7.Text = "100000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "90000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "80000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "70000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "60000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "50000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "40000" Then


(13)

2

A

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "30000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "20000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") ElseIf TextBox7.Text = "10000" Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

MsgBox("User is checking balance.") Else

End If

ElseIf Mid(TextBox11.Text, 1, 8) = "tu100000" Then

If MessageBox.Show("User is requesting for tu100k", "TOP UP", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP UP Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "tu50000" Then

If MessageBox.Show("User is requesting for tu50k", "TOP UP", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()


(14)

3

A

MessageBox.Show("TOP UP Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "tu20000" Then

If MessageBox.Show("User is requesting for tu20k", "TOP UP", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP UP Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "tu10000" Then

If MessageBox.Show("User is requesting for tu10k", "TOP UP", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP UP Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 8) = "td100000" Then

If MessageBox.Show("User is requesting for td100k", "TOP DOWN", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP DOWN Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "td50000" Then

If MessageBox.Show("User is requesting for td50k", "TOP DOWN", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()


(15)

4

A

MessageBox.Show("TOP DOWN Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "td20000" Then

If MessageBox.Show("User is requesting for td20k", "TOP DOWN", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP DOWN Canceled") End If

ElseIf Mid(TextBox11.Text, 1, 7) = "td10000" Then

If MessageBox.Show("User is requesting for td10k", "TOP DOWN", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

Timer3.Stop()

Timer5.Interval = 2000 Timer5.Start()

Else

MessageBox.Show("TOP DOWN Canceled") End If

ElseIf TextBox11.Text = "restart" Then

Timer3.Stop()

Timer1.Interval = 2000 Timer1.Start()

Else

MsgBox("TOP UP / TOP DOWN Failed!")

Form2.ListBox1.Items.Add(Me.TextBox1.Text + "'s request for TOP UP / TOP DOWN is failed at " +

Form2.DateTimePicker1.Text + " , " + TimeOfDay) SerialPort1.Open()

SerialPort1.WriteLine("0") SerialPort1.Close()

Timer3.Stop() End If

Else

End If


(16)

5

A

Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Timer5.Tick If TextBox13.Text = "" Then

SerialPort1.Open()

TextBox13.Text = SerialPort1.ReadLine() SerialPort1.Close()

If Mid(TextBox13.Text, 1, 7) = "balance" Then

If TextBox7.Text = "100000" Then

SerialPort1.Open()

SerialPort1.WriteLine("0") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "90000" Then

SerialPort1.Open()

SerialPort1.WriteLine("9") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "80000" Then

SerialPort1.Open()

SerialPort1.WriteLine("8") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "70000" Then

SerialPort1.Open()

SerialPort1.WriteLine("7") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "60000" Then

SerialPort1.Open()

SerialPort1.WriteLine("6") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "50000" Then

SerialPort1.Open()


(17)

6

A

SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "40000" Then

SerialPort1.Open()

SerialPort1.WriteLine("4") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "30000" Then

SerialPort1.Open()

SerialPort1.WriteLine("3") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "20000" Then

SerialPort1.Open()

SerialPort1.WriteLine("2") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

ElseIf TextBox7.Text = "10000" Then

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Form2.ListBox1.Items.Add(TextBox1.Text + " is checking balance...")

Else

End If

ElseIf Mid(TextBox13.Text, 1, 8) = "tu100000" Then

TextBox7.Text = Val(TextBox7.Text) + 100000 If Val(TextBox7.Text) > 100000 Then

MsgBox("Top Up Failed!") Else

Dim balanceconfirmation As New System.IO.StreamWriter("E:\Data laptop\TA\Virtual Database TA\balanceconfirmation\" + TextBox1.Text + ".txt")

balanceconfirmation.WriteLine(TextBox7.Text) balanceconfirmation.Close()


(18)

7

A

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Up for 100k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()

Me.UsersBindingSource.EndEdit()


(19)

8

A

MsgBox("TOP UP Success!") End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "tu50000" Then

TextBox7.Text = Val(TextBox7.Text) + 50000 If Val(TextBox7.Text) > 100000 Then

MsgBox("Top Up Failed!") Else

Dim balanceconfirmation As New System.IO.StreamWriter("E:\Data laptop\TA\Virtual Database TA\balanceconfirmation\" + TextBox1.Text + ".txt")

balanceconfirmation.WriteLine(TextBox7.Text) balanceconfirmation.Close()

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Up for 50k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)


(20)

9

A

Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "tu20000" Then

TextBox7.Text = Val(TextBox7.Text) + 20000 If Val(TextBox7.Text) > 100000 Then

MsgBox("Top Up Failed!") Else

Dim balanceconfirmation As New System.IO.StreamWriter("E:\Data laptop\TA\Virtual Database TA\balanceconfirmation\" + TextBox1.Text + ".txt")

balanceconfirmation.WriteLine(TextBox7.Text) balanceconfirmation.Close()

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Up for 20k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")


(21)

10

A

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP UP Success!")

End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "tu10000" Then

TextBox7.Text = Val(TextBox7.Text) + 10000 If Val(TextBox7.Text) > 100000 Then

MsgBox("Top Up Failed!") Else

Dim balanceconfirmation As New System.IO.StreamWriter("E:\Data laptop\TA\Virtual Database TA\balanceconfirmation\" + TextBox1.Text + ".txt")

balanceconfirmation.WriteLine(TextBox7.Text) balanceconfirmation.Close()


(22)

11

A

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Up for 10k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()


(23)

12

A

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP UP Success!")

End If

End If

ElseIf Mid(TextBox13.Text, 1, 8) = "td100000" Then

TextBox7.Text = Val(TextBox7.Text) - 100000 If Val(TextBox7.Text) < 0 Then

MsgBox("Top Down Failed!") Else

Dim cek_balance As Integer

If balanceconfirmation.Text =

DataGridView1.Item(6, cek_balance).Value Then

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Down for 100k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer


(24)

13

A

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP DOWN Success!")

End If Else

End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "td50000" Then

TextBox7.Text = Val(TextBox7.Text) - 50000 If Val(TextBox7.Text) < 0 Then

MsgBox("Top Down Failed!") Else

If balanceconfirmation.Text = DataGridView1.Item(6, cek_balance).Value

Then

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Down for 50k balance")

If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")


(25)

14

A

ListBox1.Items.Add("") readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1

savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index

DataGridView1.Item(6, d).Value = TextBox7.Text Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP DOWN Success!")

End If Else

End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "td20000" Then

TextBox7.Text = Val(TextBox7.Text) - 20000 If Val(TextBox7.Text) < 0 Then

MsgBox("Top Down Failed!") Else

If balanceconfirmation.Text = DataGridView1.Item(6, cek_balance).Value


(26)

15

A

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Down for 20k balance")

TextBox7.Text = Val(TextBox7.Text) - 20000 If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text) ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1 savinguserdata.WriteLine(ListBox1.Items.Item(a)) Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index DataGridView1.Item(6, d).Value = TextBox7.Text


(27)

16

A

Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP DOWN Success!")

End If Else

End If

End If

ElseIf Mid(TextBox13.Text, 1, 7) = "td10000" Then

TextBox7.Text = Val(TextBox7.Text) - 10000 If Val(TextBox7.Text) < 0 Then

MsgBox("Top Down Failed!") Else

If balanceconfirmation.Text = DataGridView1.Item(6, cek_balance).Value

Then

SerialPort1.Open()

SerialPort1.WriteLine("1") SerialPort1.Close()

Timer5.Stop()

Form2.ListBox1.Items.Add(TextBox1.Text + " is doing Top Down for 10k balance")

TextBox7.Text = Val(TextBox7.Text) - 10000 If System.IO.File.Exists("E:\Data

Laptop\TA\Virtual Database TA\" + Me.TextBox1.Text + ".txt") = True Then

Dim readinguserdata As New

System.IO.StreamReader("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

ListBox1.Items.Add(readinguserdata.ReadToEnd) ListBox1.Items.Add("")

readinguserdata.Close()

ListBox1.Items.Add("ID Number " +

Me.TextBox1.Text)

ListBox1.Items.Add(Me.TextBox1.Text) ListBox1.Items.Add(Me.TextBox2.Text) ListBox1.Items.Add(Me.TextBox3.Text) ListBox1.Items.Add(Me.TextBox4.Text) ListBox1.Items.Add(Me.TextBox5.Text) ListBox1.Items.Add(Me.TextBox7.Text) ListBox1.Items.Add(Me.TextBox8.Text)


(28)

17

A

ListBox1.Items.Add(Form2.DateTimePicker1.Text + ", " + TimeOfDay)

ListBox1.Items.Add("") Dim a As Integer

Dim savinguserdata As New

System.IO.StreamWriter("E:\Data Laptop\TA\Virtual Database TA\" +

Me.TextBox1.Text + ".txt")

For a = 0 To ListBox1.Items.Count - 1 savinguserdata.WriteLine(ListBox1.Items.Item(a))

Next

savinguserdata.Close() Dim d As Integer

d = DataGridView1.CurrentRow.Index DataGridView1.Item(6, d).Value = TextBox7.Text

Me.Validate()

Me.UsersBindingSource.EndEdit()

Me.TableAdapterManager1.UpdateAll(Me.TA_HanzDataSet) MsgBox("TOP DOWN Success!")

End If Else

End If

End If

ElseIf TextBox13.Text = "restart" Then

Timer5.Stop()

Timer1.Interval = 2000 Timer1.Start()

Else

MsgBox("TOP UP / TOP DOWN Failed!")

Form2.ListBox1.Items.Add(Me.TextBox1.Text + "'s request for TOP UP / TOP DOWN is failed at " +

Form2.DateTimePicker1.Text + " , " + TimeOfDay) SerialPort1.Open()

SerialPort1.WriteLine("0") SerialPort1.Close() Timer5.Stop() End If Else End If End Sub


(29)

LAMPIRAN B


(30)

1

B

Kode program pada arduino untuk memulai sistem pembayaran

#include "LCD12864RSPI.h"

#include "menu.h"

#include "greet.h"

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

#define ledPin 13 #define rfid Serial1

int baris1=30; int baris2=31;

int baris3=32; int baris4=33;

int kolom1=34; int kolom2=35; int kolom3=36;

int kolom4=37; int Str1[12];

int Str2[14];

int a = 999; String data_kirim; String data_terima;

//password

String password1 = "1";

String password2 = "2"; String password3 = "3";


(31)

2

B

String password4 = "4"; String password5 = "5";

String password6 = "6"; String password7 = "7";

String password8 = "8"; String password9 = "9";

String passworda = "a"; String passwordb = "b";

String passwordc = "c"; String passwordd = "d";

String password0 = "0";

void setup()

{LCDA.Initialise(); delay(100);

// LCDA.DisplayString(0,0,g1,16);

// delay(300);

// LCDA.DisplayString(1,0,g2,16);

// delay(300);

// LCDA.DisplayString(2,0,g3,16);

// delay(300);

// LCDA.DisplayString(3,0,g4,16);

// delay(5000); // LCDA.CLEAR();


(32)

3

B

LCDA.DisplayString(0,0,g7,16); LCDA.DisplayString(1,0,g5,16);

LCDA.DisplayString(2,0,g6,16); LCDA.DisplayString(3,0,g7,16);

Serial.begin(9600); rfid.begin(19200);

pinMode(baris1,OUTPUT); pinMode(baris2,OUTPUT);

pinMode(baris3,OUTPUT); pinMode(baris4,OUTPUT);

pinMode(kolom1,INPUT); pinMode(kolom2,INPUT);

pinMode(kolom3,INPUT); pinMode(kolom4,INPUT); pinMode(ledPin, OUTPUT);

digitalWrite(ledPin, LOW);}

void loop()

{ if (a==21)

{ reading_topdown_confirmation();}

else if (a==20)

{reading_topup_confirmation();} else if (a==19)

{ reading_current_balance_confirmation_td(); }


(33)

4

B

{ reading_current_balance_confirmation_tu();} else if (a==17)

{reading_current_balance_confirmation();} else if (a==16)

{ inserting_password_confirmation();} else if (a==101)

{terima_konfirmasi_password(); } else if (a==997)

{kirim_konfirmasi_password(); } else if (a==998)

{password(); } else if (a==100)

{terima_data_string_id();} else if (a==999)

{rfid();} else if (a==0)

{//setting the columns as high initially

digitalWrite(kolom1,HIGH); digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//checking everything one by one //case 1: col1 =0 while other col as 1


(34)

5

B

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) {//Serial.println("key 1 pressed"); }

else if(digitalRead(kolom2)==0) {//Serial.println("key 2 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 3 pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16);

LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16);

a = 1;

//Serial.println("key A pressed"); //klo yang dipilih TOP UP }

//case 2: col2 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,LOW); digitalWrite(baris3,HIGH);


(35)

6

B

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 4 pressed"); } else if(digitalRead(kolom2)==0)

{//Serial.println("key 5 pressed"); } else if(digitalRead(kolom3)==0)

{ //Serial.println("key 6 pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,td1,16); LCDA.DisplayString(1,0,td2,16);

LCDA.DisplayString(2,0,td3,16); LCDA.DisplayString(3,0,td4,16); a = 8;

//Serial.println("key B pressed"); } //case 3: col3 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,LOW); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)


(36)

7

B

else if(digitalRead(kolom2)==0) { //Serial.println("key 8 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 9 pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

data_kirim = "balance";

Serial.println(data_kirim); LCDA.DisplayString(0,0,b1,16);

LCDA.DisplayString(1,0,b2,16); delay(100);

a = 17;

//Serial.println("key C pressed"); } //case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key F pressed"); } else if(digitalRead(kolom2)==0)


(37)

8

B

data_kirim = "restart"; Serial.println(data_kirim);

delay(100); LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,g7,16);

LCDA.DisplayString(1,0,g5,16); LCDA.DisplayString(2,0,g6,16);

LCDA.DisplayString(3,0,g7,16); digitalWrite(ledPin, LOW);

//Serial.println("key 0 pressed"); } else if(digitalRead(kolom3)==0)

{ //Serial.println("key E pressed"); } else if(digitalRead(kolom4)==0) { //Serial.println("key D pressed"); }

//giving delay between keypress delay(50); }


(38)

9

B

Proses Scanning

void read_serial()

{ mifare_request();

get_response (); mifare_anticollision();

parse (); print_serial();

delay(100); }

void mifare_request()

{ rfid.write(0xAA); rfid.write(0xBB);

rfid.write(0x06); rfid.write((uint8_t)0); rfid.write((uint8_t)0);

rfid.write((uint8_t)0); rfid.write(0x01);

rfid.write(0x02);

rfid.write(0x52); rfid.write(0x51); delay (10);}

void get_response()

{ while(rfid.available())

{for(int i=0;i<12;i++) {Str1[i]= rfid.read();


(39)

10

B

delay (10); }}}

void mifare_anticollision()

{rfid.write(0xAA); rfid.write(0xBB);

rfid.write(0x05); rfid.write((uint8_t)0);

rfid.write((uint8_t)0); rfid.write((uint8_t)0);

rfid.write(0x02); rfid.write(0x02);

rfid.write((uint8_t)0); delay (10); }

void parse()

{ while(rfid.available()>0) { for(int i=0;i<14;i++)

{Str2[i]= rfid.read(); delay(10);}}}

void print_serial()

{ //print to serial port

if (Str2[10] == 0x00 && Str2[9] == 0x00) { }

else

{Serial.println(Str2[10] + Str2[9],DEC);


(40)

11

B

Proses Konfimasi Password

void password()

{ //setting the columns as high initially

digitalWrite(kolom1,HIGH); digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//checking everything one by one //case 1: col1 =0 while other col as 1

digitalWrite(baris1,LOW); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) { LCDA.DisplayString(2,0,p3,16);

data_kirim = password1;

a = 16;

//Serial.println("key 1 pressed"); } else if(digitalRead(kolom2)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = password2;

a = 16;


(41)

12

B

else if(digitalRead(kolom3)==0) { LCDA.DisplayString(2,0,p3,16);

data_kirim = password3; a = 16;

//Serial.println("key 3 pressed");} else if(digitalRead(kolom4)==0)

{LCDA.DisplayString(2,0,p3,16); data_kirim = passworda;

a = 16;

//Serial.println("key A pressed"); //klo yang dipilih TOP UP }

//case 2: col2 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,LOW); digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = password4;

a = 16;

//Serial.println("key 4 pressed"); }

else if(digitalRead(kolom2)==0) {LCDA.DisplayString(2,0,p3,16);


(42)

13

B

a = 16;

//Serial.println("key 5 pressed"); }

else if(digitalRead(kolom3)==0) { LCDA.DisplayString(2,0,p3,16);

data_kirim = password6; a = 16;

//Serial.println("key 6 pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = passwordb;

a = 16;

//Serial.println("key B pressed"); }

//case 3: col3 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH);

digitalWrite(baris3,LOW); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = password7;

a = 16;

//Serial.println("key 7 pressed"); }


(43)

14

B

{ LCDA.DisplayString(2,0,p3,16); data_kirim = password8;

a = 16;

//Serial.println("key 8 pressed"); }

else if(digitalRead(kolom3)==0) { LCDA.DisplayString(2,0,p3,16);

data_kirim = password9; a = 16;

//Serial.println("key 9 pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = passwordc;

a = 16;

//Serial.println("key C pressed"); } //case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{LCDA.CLEAR(); a = 999;


(44)

15

B

Serial.println(data_kirim); delay(100);

LCDA.DisplayString(0,0,g7,16); LCDA.DisplayString(1,0,g5,16);

LCDA.DisplayString(2,0,g6,16); LCDA.DisplayString(3,0,g7,16);

//Serial.println("key F pressed");} else if(digitalRead(kolom2)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = password0;

a = 16;

//Serial.println("key 0 pressed");}

else if(digitalRead(kolom3)==0) {LCDA.CLEAR();

LCDA.DisplayString(1,0,p6,16);

delay(2000);

LCDA.DisplayString(0,0,p1,16);

LCDA.DisplayString(1,0,p2,16); a = 998;

//Serial.println("key E pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.DisplayString(2,0,p3,16); data_kirim = passwordd;


(45)

16

B

//Serial.println("key D pressed"); } //giving delay between keypress

delay(50);}

void inserting_password_confirmation()

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH); //checking everything one by one

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,LOW);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 1 pressed"); } else if(digitalRead(kolom2)==0)

{ //Serial.println("key 2 pressed"); } else if(digitalRead(kolom3)==0)

{ //Serial.println("key 3 pressed"); } else if(digitalRead(kolom4)==0)


(46)

17

B

//case 2: col2 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,LOW); digitalWrite(baris3,HIGH);

digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0)

{ //Serial.println("key 4 pressed"); }

else if(digitalRead(kolom2)==0) { //Serial.println("key 5 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 6 pressed");}

else if(digitalRead(kolom4)==0) { //Serial.println("key B pressed");} //case 3: col3 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,LOW); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 7 pressed");} else if(digitalRead(kolom2)==0)


(47)

18

B

else if(digitalRead(kolom3)==0) { //Serial.println("key 9 pressed");}

else if(digitalRead(kolom4)==0) { //Serial.println("key C pressed");}

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,LOW);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) { LCDA.CLEAR();

LCDA.DisplayString(0,0,p1,16); LCDA.DisplayString(1,0,p2,16); a = 998;

//Serial.println("key F pressed");} else if(digitalRead(kolom2)==0)

{ //Serial.println("key 0 pressed");} else if(digitalRead(kolom3)==0)

{ a = 997;

//Serial.println("key E pressed");}

else if(digitalRead(kolom4)==0) { //Serial.println("key D pressed");}


(48)

19

B

delay(50);}

void kirim_konfirmasi_password()

{Serial.println(data_kirim); delay(100);

a = 101;}

void terima_konfirmasi_password()

{ if (Serial.available()>0)

{ data_terima = Serial.read() - '0';

if (data_terima==1) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,p8,16);

delay(2000);

LCDA.DisplayString(0,0,m1,16); LCDA.DisplayString(1,0,m2,16);

LCDA.DisplayString(2,0,m3,16); LCDA.DisplayString(3,0,m4,16);

a = 0;}

else if (data_terima==0)

{LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,p5,16); delay(2000);


(49)

20

B

LCDA.DisplayString(1,0,p2,16); a = 998; }

else

{ LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,p4,16);

delay(2000);

LCDA.DisplayString(0,0,p7,16);

LCDA.DisplayString(1,0,p2,16); a = 998; }}}


(50)

21

B

Proses Top Up, Top Down, dan Balance

Top Up

Kode program berikut berada didalam void loop().

else if (a==1)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH); //checking everything one by one

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,LOW);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0)

{ //Serial.println("key 1 pressed"); } else if(digitalRead(kolom2)==0)

{ //Serial.println("key 2 pressed"); } else if(digitalRead(kolom3)==0)

{ //Serial.println("key 3 pressed"); } else if(digitalRead(kolom4)==0)


(51)

22

B

delay(50);

LCDA.DisplayString(1,0,c1,16);

LCDA.DisplayString(2,0,c2,16); a = 2;

//Serial.println("key A pressed"); //klo yang dipilih TOP UP} //case 2: col2 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,LOW);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{//Serial.println("key 4 pressed"); } else if(digitalRead(kolom2)==0) { //Serial.println("key 5 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 6 pressed"); }

else if(digitalRead(kolom4)==0) {LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,c1,16);

LCDA.DisplayString(2,0,c2,16); a = 3;


(52)

23

B

//case 3: col3 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,LOW);

digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0)

{ //Serial.println("key 7 pressed"); }

else if(digitalRead(kolom2)==0) { //Serial.println("key 8 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 9 pressed"); }

else if(digitalRead(kolom4)==0) {LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,c1,16); LCDA.DisplayString(2,0,c2,16);

a = 4;

//Serial.println("key C pressed"); }

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);


(53)

24

B

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ a = 0;

LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,m1,16);

LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16);

LCDA.DisplayString(3,0,m4,16); //Serial.println("key F pressed"); }

else if(digitalRead(kolom2)==0) { a = 999;

data_kirim = "restart"; Serial.println(data_kirim); delay(100);

LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,g7,16); LCDA.DisplayString(1,0,g5,16);

LCDA.DisplayString(2,0,g6,16); LCDA.DisplayString(3,0,g7,16);

digitalWrite(ledPin, LOW);

//Serial.println("key 0 pressed"); }


(54)

25

B

{ //Serial.println("key E pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu5,16);

LCDA.DisplayString(2,0,tu6,16); a = 7;

//Serial.println("key D pressed");} //giving delay between keypress

delay(50); }

else if (a==2)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,LOW);

//checking each column for row1 one by one


(55)

26

B

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16);

LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16);

a = 1;

//Serial.println("key F pressed"); }

else if(digitalRead(kolom3)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,tu10,16);

data_kirim = "tu100000"; Serial.println(data_kirim); delay(100);

a = 20;

//Serial.println("key E pressed"); }

//giving delay between keypress delay(50); }

else if (a==3)

{ //setting the columns as high initially

digitalWrite(kolom1,HIGH); digitalWrite(kolom2,HIGH);


(56)

27

B

digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16);

LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16); a = 1;

//Serial.println("key F pressed"); } else if(digitalRead(kolom3)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,tu10,16); data_kirim = "tu50000";

Serial.println(data_kirim); delay(100);


(57)

28

B

//Serial.println("key E pressed"); } //giving delay between keypress

delay(50); } else if (a==4)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,tu1,16);

LCDA.DisplayString(1,0,tu2,16); LCDA.DisplayString(2,0,tu3,16);

LCDA.DisplayString(3,0,tu4,16); a = 1;


(58)

29

B

else if(digitalRead(kolom3)==0) {LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,tu10,16);

data_kirim = "tu20000"; Serial.println(data_kirim);

delay(100); a = 20;

//Serial.println("key E pressed"); } //giving delay between keypress

delay(50); } else if (a==5)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,LOW);

//checking each column for row1 one by one


(59)

30

B

{LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,tu10,16); data_kirim = "tu10000";

Serial.println(data_kirim); delay(100);

a = 20;

//Serial.println("key F pressed"); }

else if(digitalRead(kolom3)==0) {LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,tu9,16);

a = 0; delay(2000);

LCDA.DisplayString(0,0,m1,16);

LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16);

LCDA.DisplayString(3,0,m4,16); //Serial.println("key E pressed"); }

//giving delay between keypress delay(50); }

else if (a==6)

{ //setting the columns as high initially


(60)

31

B

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16); LCDA.DisplayString(2,0,tu3,16);

LCDA.DisplayString(3,0,tu4,16); a = 1;

//Serial.println("key F pressed"); } else if(digitalRead(kolom3)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16);


(61)

32

B

LCDA.DisplayString(3,0,tu4,16); a = 1;

//Serial.println("key E pressed"); } //giving delay between keypress

delay(50);}

else if (a==7)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH); //checking everything one by one

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,LOW);

digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 1 pressed"); } else if(digitalRead(kolom2)==0)

{ //Serial.println("key 2 pressed"); } else if(digitalRead(kolom3)==0)


(62)

33

B

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,c1,16);

LCDA.DisplayString(2,0,c2,16); a = 5;

//Serial.println("key A pressed"); //klo yang dipilih TOP UP } //case 2: col2 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,LOW);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 4 pressed"); }

else if(digitalRead(kolom2)==0) { //Serial.println("key 5 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 6 pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

data_kirim = "balance";


(63)

34

B

LCDA.DisplayString(0,0,b1,16); LCDA.DisplayString(1,0,b2,16);

delay(100); a = 18;

//Serial.println("key B pressed"); } //case 3: col3 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,LOW); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 7 pressed"); } else if(digitalRead(kolom2)==0) { //Serial.println("key 8 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 9 pressed"); }

else if(digitalRead(kolom4)==0) { //Serial.println("key C pressed"); }

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);


(64)

35

B

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ a = 0;

LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,m1,16);

LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16);

LCDA.DisplayString(3,0,m4,16); //Serial.println("key F pressed"); }

else if(digitalRead(kolom2)==0) { a = 999;

data_kirim = "restart"; Serial.println(data_kirim); delay(100);

LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,g7,16); LCDA.DisplayString(1,0,g5,16);

LCDA.DisplayString(2,0,g6,16); LCDA.DisplayString(3,0,g7,16);

digitalWrite(ledPin, LOW); //Serial.println("key 0 pressed"); }


(65)

36

B

{ //Serial.println("key E pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,tu1,16); LCDA.DisplayString(1,0,tu2,16);

LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16);

a = 1;

//Serial.println("key D pressed"); }

//giving delay between keypress delay(50); }

Setelah nilai pointer “a” bernilai 20, maka kode program dilanjutkan ke

kode program dibawah ini.

void reading_topup_confirmation() { if (Serial.available()>0)

{data_terima = Serial.read() - '0'; if (data_terima == 1)

{ delay(1000);

LCDA.DisplayString(1,0,tu9,16); delay(2000);

LCDA.DisplayString(0,0,m1,16); LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16); LCDA.DisplayString(3,0,m4,16); a = 0;}

else if (data_terima == 0) {delay(1000);

LCDA.DisplayString(1,0,tu11,16); delay(2000);


(66)

37

B

LCDA.DisplayString(0,0,m1,16); LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16); LCDA.DisplayString(3,0,m4,16); a = 0; }

else

{ delay(1000);

LCDA.DisplayString(1,0,tu10,16); delay(2000);

LCDA.DisplayString(0,0,m1,16); LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16); LCDA.DisplayString(3,0,m4,16); a = 0; }}}

Top Down

Kode program berikut berada didalam void loop(). else if (a==8)

{ //setting the columns as high initially

digitalWrite(kolom1,HIGH); digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//checking everything one by one //case 1: col1 =0 while other col as 1

digitalWrite(baris1,LOW); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);


(67)

38

B

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 1 pressed"); } else if(digitalRead(kolom2)==0)

{//Serial.println("key 2 pressed"); } else if(digitalRead(kolom3)==0)

{ //Serial.println("key 3 pressed"); } else if(digitalRead(kolom4)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,c1,16); LCDA.DisplayString(2,0,c2,16);

a = 9;

//Serial.println("key A pressed"); //klo yang dipilih TOP UP } //case 2: col2 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,LOW);

digitalWrite(baris3,HIGH); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ //Serial.println("key 4 pressed"); } else if(digitalRead(kolom2)==0)


(68)

39

B

else if(digitalRead(kolom3)==0) { //Serial.println("key 6 pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,c1,16);

LCDA.DisplayString(2,0,c2,16); a = 10;

//Serial.println("key B pressed"); } //case 3: col3 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,LOW); digitalWrite(baris4,HIGH);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0)

{ //Serial.println("key 7 pressed"); }

else if(digitalRead(kolom2)==0) { //Serial.println("key 8 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key 9 pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();


(69)

40

B

LCDA.DisplayString(1,0,c1,16); LCDA.DisplayString(2,0,c2,16);

a = 11;

//Serial.println("key C pressed"); }

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,LOW);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) { a = 0;

LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,m1,16);

LCDA.DisplayString(1,0,m2,16); LCDA.DisplayString(2,0,m3,16);

LCDA.DisplayString(3,0,m4,16); //Serial.println("key F pressed"); }

else if(digitalRead(kolom2)==0) { a = 999;

data_kirim = "restart"; Serial.println(data_kirim);


(70)

41

B

LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,g7,16); LCDA.DisplayString(1,0,g5,16);

LCDA.DisplayString(2,0,g6,16); LCDA.DisplayString(3,0,g7,16);

digitalWrite(ledPin, LOW); //Serial.println("key 0 pressed"); }

else if(digitalRead(kolom3)==0) { //Serial.println("key E pressed"); }

else if(digitalRead(kolom4)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,td1,16); LCDA.DisplayString(1,0,tu5,16);

LCDA.DisplayString(2,0,tu6,16); a = 14;

//Serial.println("key D pressed"); } //giving delay between keypress

delay(50); } else if (a==9)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);


(71)

42

B

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH);

digitalWrite(baris4,LOW);

//checking each column for row1 one by one

if(digitalRead(kolom1)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,td1,16);

LCDA.DisplayString(1,0,tu2,16); LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16);

a = 8;

//Serial.println("key F pressed"); }

else if(digitalRead(kolom3)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(1,0,td10,16);

data_kirim = "td100000"; Serial.println(data_kirim);


(72)

43

B

a = 21;

//Serial.println("key E pressed"); }

//giving delay between keypress delay(50); }

else if (a==10)

{ //setting the columns as high initially

digitalWrite(kolom1,HIGH); digitalWrite(kolom2,HIGH);

digitalWrite(kolom3,HIGH); digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1 digitalWrite(baris1,HIGH);

digitalWrite(baris2,HIGH); digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);

//checking each column for row1 one by one if(digitalRead(kolom1)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(0,0,td1,16); LCDA.DisplayString(1,0,tu2,16);

LCDA.DisplayString(2,0,tu3,16); LCDA.DisplayString(3,0,tu4,16);


(73)

44

B

//Serial.println("key F pressed");} else if(digitalRead(kolom3)==0)

{ LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,td10,16); data_kirim = "td50000";

Serial.println(data_kirim); delay(100);

a = 21;

//Serial.println("key E pressed"); }

//giving delay between keypress delay(50); }

else if (a==11)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);

digitalWrite(kolom2,HIGH); digitalWrite(kolom3,HIGH);

digitalWrite(kolom4,HIGH);

//case 1: col1 =0 while other col as 1

digitalWrite(baris1,HIGH); digitalWrite(baris2,HIGH);

digitalWrite(baris3,HIGH); digitalWrite(baris4,LOW);


(74)

45

B

if(digitalRead(kolom1)==0) { LCDA.CLEAR();

delay(50);

LCDA.DisplayString(0,0,td1,16);

LCDA.DisplayString(1,0,tu2,16); LCDA.DisplayString(2,0,tu3,16);

LCDA.DisplayString(3,0,tu4,16); a = 8;

//Serial.println("key F pressed");} else if(digitalRead(kolom3)==0)

{LCDA.CLEAR(); delay(50);

LCDA.DisplayString(1,0,td10,16); data_kirim = "td20000";

Serial.println(data_kirim);

delay(100); a = 21;

//Serial.println("key E pressed"); } //giving delay between keypress

delay(50); }

else if (a==12)

{ //setting the columns as high initially digitalWrite(kolom1,HIGH);


(1)

LAMPIRAN D

DATABASE FORMAT


(2)

1

D

Tabel Format Database

Data Format pada MS

SQL Server

Format pada VDb

Fullname Address Phone Number Username Password ID Balance Email String String String String String Int Int String String String String String String String String String

Data disimpan di dua tempat, yang pertama menggunakan MS SQL Server, dan yang kedua menggunakan Virtual Database (VDb). Berikut adalah tabel wewenang untuk mengakses database.

Tabel Wewenang Pengaksesan Database

Status MS SQL Server VDb

User

Operator Administrator

Transaction only (top up/ down, balance check) Update data ( Except balance) & Saving data Unlimited Access

Transaction only (top up/ down, balance check)

Update data ( Except balance) & Saving data Unlimited Access

Tabel Pengertian wewenang pengaksesan

Authority Description

Transaction Only Update Data Saving Data Unlimited Access

User hanya bisa mengakses database melalui transaksi yang dilakukan pada arduino.

Operator dapat mengubah semua isi data dalam database, kecuali jumlah balance suatu user account.

Operator dapat menyimpan suatu user data yang baru terdaftar melalui proses registrasi ke dalam database.


(3)

5

Universitas Kristen Maranatha

BAB I

PENDAHULUAN

Pada bab ini akan dibahas mengenai latar belakang, rumusan masalah, tujuan, batasan masalah.

I.1 Latar Belakang

Penggunaan Mikrokontroler Arduino sudah berkembang dengan baik dalam dunia perbankan, otomotif, dll. Dengan perkembangan yang signifikan, Mikrokontroler Arduino telah menjadi dasar teknologi yang dapat dipakai dalam area aplikasi yang luas.

Dalam dunia perbankan dipergunakan ISO 8583 untuk mengatur proses transaksi pembayaran, baik dengan menggunakan komputer maupun menggunakan EDC. Pengembangan EDC sebagai alat untuk sistem pembayaran dengan Mikrokontroler Arduino menjadi pokok penelitian dalam tugas akhir ini dengan disesuaikan terhadap beberapa pembatasan yang ada didalam ISO 8583. Meskipun berbagai sistem pembayaran sudah banyak dibuat, tidak menutup kemungkinan untuk selalu dibuat sistem pembayaran yang baru, karena sistem pembayaran yang baru pun pasti akan berbeda dari sebelumnya dengan mengikuti perkembangan teknologi atau mengikuti selera pembuatnya baik dari segi fitur, penyajian, atau program.

I.2 Rumusan Masalah

Tugas Akhir yang akan dilakukan adalah mempelajari beberapa bahasa pemrograman seperti VB. NET, SQL Server, dan C untuk dapat menemukan cara membuat program menggunakan bahasa-bahasa pemrograman tersebut.

Setelah itu, mencoba untuk mengaplikasikan program yang dibuat dalam sistem pembayaran menggunakan EDC (Electronic Data Capture) berbasis Mikrokontroler Arduino yang sesuai dengan ISO 8583.


(4)

6

Universitas Kristen Maranatha

I.3 Tujuan

Tujuan Tugas Akhir ini adalah untuk merancang dan merealisasikan sistem pembayaran dengan EDC (Electronic Data Capture) berbasis Mikrokontroler Arduino sesuai dengan ISO 8583.

I.4 Batasan Masalah

Bahasa pemrograman yang dipakai, yaitu VB.NET, SQL Server, dan C. Dengan menggunakan bahasa-bahasa pemrograman tersebut, sistem pembayaran dengan EDC (Electronic Data Capture)dapat dibuat untuk top up, top down,

balance check dan registration saja.

Untuk data yang diambil pada data pengamatan, data diambil dengan syarat

user sebagai berikut:

1. User sudah mengetahui apa yang akan dilakukan sebelum memasuki

sistem pembayaran.

2. User tidak melakukan kesalahan input saat memasuki sistem


(5)

Universitas Kristen Maranatha

BAB V

PENUTUP

V.1 KESIMPULAN

Sistem pembayaran telah berhasil dibuat. Menurut data hasil pengujian, waktu yang dibutuhkan untuk melakukan satu siklus bervariasi, tetapi hal yang pasti adalah waktu yang dibutuhkan lebih lama dari durasi siklus yang sudah ditentukan dalam kode program melalui delay dari masing-masing prosesnya.

V.2 SARAN

Dengan perkembangan teknologi yang terus berkembang dan pengetahuan yang terus bertambah, sistem pembayaran ini masi dapat dimaksimalkan baik dari segi keamanan, kenyamanan, fitur, dan lain-lain.


(6)

Universitas Kristen Maranatha

DAFTAR PUSTAKA

[1]. http://bayurimba.wordpress.com/2011/06/03/edc-electronic-data-capture/ [2]. http://deltaelectronic.com/shop/product_info.php?cPath=115&products_id=1 25

[3]. http://delta-electronic.com/shop/product_info.php?cPath=115&products_id=1 969

[4]. http://en.wikipedia.org/wiki/ISO_8583

[5]. http://help.sap.com/saphelp_pos21/helpdata/en/5c/509777819e4629b4eceb2e 5ca03b5/content.htm

[6]. http://howtostartprogramming.com [7]. http://id.wikipedia.org/wiki/Arduino [8] http://id.wikipedia.org/wiki/RFID

[9]. http://www.lytsing.org/downloads/iso8583.pdf

[10]. http://netindonesia.net/blogs/ebs135/archive/2011/09/26/berkenalan-dengan- iso8583.aspx

[11] http://www.robotshop.com/dfrobot-spi-lcd-module-arduino-compatible-