1
Universitas Kristen MaranathaPERANCANGAN DAN REALISASI EDC BERBASIS
MIKROKONTROLER ARDUINO UNTUK SISTEM
PEMBAYARAN BERBASIS ISO 8583
ABSTRAK
Hans Alexander (0822013)
Jurusan Teknik Elektro Universitas Kristen Maranatha
Email : atomical@rocketmail.com
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
2
Universitas Kristen MaranathaDESIGN 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 : atomical@rocketmail.com
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,
i
Universitas Kristen MaranathaDAFTAR 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
ii
Universitas Kristen MaranathaBAB 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
Universitas Kristen MaranathaIII.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
iv
Universitas Kristen MaranathaDAFTAR 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
v
Universitas Kristen MaranathaPC 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
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
vii
Universitas Kristen MaranathaGambar 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
viii
Universitas Kristen MaranathaDAFTAR TABEL
Tabel 4.1 Delay yang ditentukan dalam kode progra………….……..……… 68
LAMPIRAN A
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()
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()
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()
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
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()
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()
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()
8
A
MsgBox("TOP UP Success!") End IfEnd 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)
9
A
Dim a As IntegerDim 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")
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")
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()
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)
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")
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
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
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)
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()
LAMPIRAN B
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";
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();
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(); }
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
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);
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)
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)
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
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++)
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);
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;
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);
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"); }
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;
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;
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)
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)
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");}
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);
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);
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)
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;
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);
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"); }
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
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);
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);
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;
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
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
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);
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)
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";
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);
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"); }
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) <