LAMPIRAN
Lampiran 1: Kode Program Arduino
#include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h>
#include <EEPROM.h> #include <Wire.h>
#include <LiquidCrystal_I2C.h> #include <stdio.h>
#include <DS1302.h> #include <SPI.h> #include <SD.h>
File myFile; File root;
String readString;
String mata_kuliah = ""; String ID = "";
String kode_matkul[]={"kal","mat","dtd"};
int button = 0; int button1 = 0;
const int buttonPin = 4;
LiquidCrystal_I2C lcd(0x3F, 16, 2);
{
DS1302 rtc(5, 6, 7); }
int getFingerprintIDez(); char a;
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup() {
pinMode(buttonPin, INPUT);
while (!Serial); Serial.begin(9600); finger.begin(9600); lcd.begin();
lcd.backlight();
if (finger.verifyPassword()) {
lcd.clear(); }
else {
lcd.clear();
}
if (!SD.begin(10)) {
Serial.println("initialization failed!"); return;
}
lcd.setCursor(0,0); lcd.print("Start"); lcd.setCursor(0,1);
lcd.print("Scan Finger"); }
//membaca serial dan menyimpan data dalam format string void serialRead(){
while (Serial.available()){ delay(10);
if (Serial.available() > 0){ char c = Serial.read(); readString += c;}; }
}
//mengirim daftar hadir mata kuliah tertentu void baca_kirim(String matkul){
myFile = SD.open(matkul); if (myFile) {
Serial.println(myFile.readString()); }
// close the file: myFile.close(); } else {
// if the file didn't open, print an error: Serial.println("error opening test.txt"); }
}
void tulis_ke_microSD(String c1, String c2){ myFile = SD.open(mata_kuliah, FILE_WRITE);
if (myFile) { if (c1 != "#") myFile.print(c2); // close the file: myFile.close();
//Serial.println("done."); } else {
// Serial.println("error opening test.txt"); }
}
//Mengirim daftar absensi mata kuliah yang ada pada microSD card void list_data_kirim(){
}
void kom_pc(){ String c1; String c2;
if (Serial.available() > 0){ readString = "";
serialRead();
c1 = readString.substring(0,1); c2 = readString.substring(20,1);
}
if (c1 == "!"){
baca_kirim(c2); }
if (c1 == "@"){ list_data_kirim(); }
if (c1 == "#"){ mata_kuliah = c2;
tulis_ke_microSD(c1, c2); Serial.println("OK"); }
if (c1 == "$"){
tulis_ke_microSD(c1, c2); }
void meng_absen(){ int jam,hasil; lcd.clear();
//---========== Matkul 1==========--- if (mata_kuliah == "kal")
{
while(1) {
Time t = rtc.time(); // getFileName();
// myFile = SD.open(filename, FILE_WRITE); tampilwaktu();
jam = t.hr*100; hasil = jam+t.min;
if(hasil > 730 && hasil < 910) {
getFingerprintIDez(); tulis_ke_microSD(ID,ID); }
else {
lcd.setCursor(0,0); lcd.print("Wrong Time"); tampilwaktu();
//---========== Matkul 2==========--- if (mata_kuliah == "mat")
{
while(1) {
Time t = rtc.time(); //getFileName();
//myFile = SD.open(filename, FILE_WRITE); tampilwaktu();
jam = t.hr*100; hasil = jam+t.min;
if(hasil > 910 && hasil < 1050) {
getFingerprintIDez();
} else {
lcd.setCursor(0,0); lcd.print("Wrong Time"); tampilwaktu();
} } }
//---========== Matkul 3==========--- if (mata_kuliah == "dtd")
{
Time t = rtc.time(); //getFileName();
//myFile = SD.open(filename, FILE_WRITE); tampilwaktu();
jam = t.hr*100; hasil = jam+t.min;
if(hasil > 1400 && hasil < 1540) {
getFingerprintIDez(); tulis_ke_microSD(ID,ID); }
else {
lcd.setCursor(0,0); lcd.print("Wrong Time"); tampilwaktu();
} } }
//---========= Akhir Matkul 3=========--- delay(50);
}
void pilih_matkul(){
while(mata_kuliah == ""){ lcd.setCursor(0,1);
lcd.print(kode_matkul[0]); delay(1500);
if(button1 == HIGH){
mata_kuliah = kode_matkul[0]; }
else{lcd.setCursor(0,1); lcd.print(kode_matkul[1]); delay(1500);
button1 = digitalRead(buttonPin);
if(button1 == HIGH){
mata_kuliah = kode_matkul[1]; }
else{lcd.setCursor(0,1); lcd.print(kode_matkul[2]); delay(1500);
button1 = digitalRead(buttonPin); if(button1 == HIGH){
mata_kuliah = kode_matkul[2];} }
} } }
void loop() //...MAIN. {
if(button == 0){
button = digitalRead(buttonPin); if(button == HIGH){
} else{
lcd.clear();
lcd.setCursor(0,0); lcd.print("PC"); kom_pc();
} }
if(button == 1){ lcd.clear();
lcd.setCursor(0,0);
lcd.print("pilih matkul !"); pilih_matkul();
Serial.println(mata_kuliah); meng_absen();
} }
uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken"); break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected"); return p;
case FINGERPRINT_PACKETRECIEVEERR:
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error"); return p;
default:
Serial.println("Unknown error"); return p;
}
// OK success!
p = finger.image2Tz(); switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted"); break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy"); return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error"); return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features"); return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features"); return p;
default:
return p; }
// OK converted!
p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return p;
} else {
Serial.println("Unknown error"); return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence); }
// returns -1 if failed, otherwise returns ID # int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence); ID = finger.fingerID;
return finger.fingerID; }
void printDirectory(File dir, int numTabs) { while (true) {
File entry = dir.openNextFile(); if (! entry) {
// no more files break;
}
for (uint8_t i = 0; i < numTabs; i++) { Serial.print('\t');
}
Serial.print(entry.name()); Serial.print(",");
if (entry.isDirectory()) { //Serial.println("/");
printDirectory(entry, numTabs + 1); } else {
//Serial.println(entry.size(), DEC); }
entry.close(); }
}
void tampilwaktu() {
Time t = rtc.time(); char menit[]="00"; if (t.min <10) {
menit[0]='0'; menit[1]=t.min; }
Lampiran 2: Kode Program VB .NET
Imports System Imports System.IO
Imports System.Data.SqlClient
Imports Excel = Microsoft.Office.Interop.Excel Imports System.Data.OleDb
Imports System.Data Imports System.DateTime
Imports MySql.Data.MySqlClient
Public Class Form1
Dim comPORT As String Dim data As String = "" Dim MySQLConnection As New
MySqlConnection("Server=202.0.107.165;Port=16033;Database=sia_pelatihan;Uid =root;Pwd=qwerty;")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SerialPort1.Close() Timer1.Enabled = False
comPORT = ""
For Each sp As String In My.Computer.Ports.SerialPortNames ComboBox1.Items.Add(sp)
Next
Dim path As String =
System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim path1 As String = path & "\" & "Absensi Portabel"
If (Not System.IO.Directory.Exists(path1)) Then System.IO.Directory.CreateDirectory(path1) End If
End Sub
Private Sub comboBox_pilih_Port(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
If (ComboBox1.SelectedItem <> "") Then comPORT = ComboBox1.SelectedItem End If
End Sub
Private Sub Button1_klik(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (Button1.Text = "Connect") Then If (comPORT <> "") Then
SerialPort1.PortName = comPORT SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8
SerialPort1.Parity = Ports.Parity.None
SerialPort1.Handshake = Ports.Handshake.None
SerialPort1.Encoding = System.Text.Encoding.Default SerialPort1.ReadTimeout = 250
SerialPort1.Open()
Timer1.Enabled = True Timer1.Start()
Button2.Enabled = True Button3.Enabled = True
RichTextBox1.Enabled = True RichTextBox2.Enabled = True TabControl2.Enabled = True ListBox1.Enabled = True Else
MsgBox("Pilih Port") End If
Else
SerialPort1.Close() Button1.Text = "Connect" Timer1.Enabled = False RichTextBox1.Text = "" RichTextBox2.Text = "" Label1.Text = ""
ListBox1.Items.Clear()
TabControl2.Enabled = True ListBox1.Enabled = False End If
End Sub
Function TerimaDataSerial() As String Dim Incoming As String
Try
Incoming = SerialPort1.ReadExisting()
If Incoming Is Nothing Then Return "nothing" & vbCrLf Else
Return Incoming End If
Catch ex As TimeoutException
Return "Error: read time out." Console.WriteLine(ex)
End Try End Function
Private Sub Proses_Data(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim data1 As String = TerimaDataSerial()
If data1 IsNot " " Then data = data1
RichTextBox1.Text &= data
If data.Contains("OK") Then kirim_matkul()
End If
End Sub
Function kirim_matkul()
Dim strArr As String() = RichTextBox2.Text.Split(New String() {"-"}, StringSplitOptions.None)
Dim count As Integer
For count = 0 To strArr.Length() - 1
Dim data1 As String = "$" & strArr(count) SerialPort1.Write(data1)
RichTextBox1.Text = data1 Threading.Thread.Sleep(200) Next
End Function
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim path As String =
System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim path1 As String = path & "\" & "Absensi Portabel"
Dim NAME As String = ListBox1.SelectedItem.ToString() Dim FILE_NAME As String = path1 & "\" & NAME
'--- Dim name2 As String = path1 & "\" & "PFD.xls"
Dim appXL As Excel.Application Dim wbXL As Excel.Workbook Dim wbsXL As Excel.Workbooks Dim shXL As Excel.Worksheet
Dim Checker As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker1 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker2 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker3 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
appXL = CreateObject("excel.application") appXL.Visible = False
wbsXL = appXL.Workbooks
wbXL = wbsXL.Open(name2, , , , 12121) shXL = wbXL.ActiveSheet
'--absDetil--
For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 6), Excel.Range)
'MsgBox(Checker(count)) Next
'--absJumlahHadir For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 7), Excel.Range)
Checker1(count) = xRng.Value() ' MsgBox(Checker1(count)) Next
'--absJumlahPertemuan-- For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 8), Excel.Range)
Checker2(count) = xRng.Value() 'MsgBox(Checker2(count))
Next
'--absDate--
For count = 1 To 2
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 9), Excel.Range)
Checker3(count) = xRng.Value() MsgBox(Checker3(count))
Next
'-- untuk memperbaharui DATA---
Dim jlh_hadir As Double() = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} Dim jlh_pertemuan As Double = 1
text1 = RichTextBox1.Text.Split(New String() {","}, StringSplitOptions.None)
Dim a As String = ListBox1.SelectedItem.ToString() Dim b As String() = a.Split(New String() {"_"}, StringSplitOptions.None)
Dim c As String() = b(2).Split(New String() {"."}, StringSplitOptions.None)
Dim bulan As String = c(0) Dim tanggal As String = b(1)
Dim tahun As String = Date.Today.Year
Dim tgl As String = "|" + tanggal + "-" + bulan + "-" + tahun Dim tgl1 As String = Checker3(1) + tgl
Dim d As String = Checker(1) Dim text2 As String()
If d IsNot Checker1(1) Then
text2 = d.Split(New String() {"|"}, StringSplitOptions.None)
jlh_pertemuan = text2.Length
For count = 1 To text1.Length - 1 For count1 = 0 To text2.Length - 1 If text2(count1) = "1" Then jlh_hadir(count) += 1 End If
Next Next Else
Try
Dim cn As New OleDbConnection Dim cm As New OleDbCommand Dim no As Integer = 0
cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & name2 & ";extended properties=excel 8.0;"
cn.Open()
With cm
.Connection = cn
For count = 1 To text1.Length - 1
Dim cek As Integer = text1(count) + 1
.CommandText = "UPDATE [Sheet1$] SET absDetil='" & Checker(cek) & "|1',absJumlahHadir='" & jlh_hadir(count) &
"',absJumlahPertemuan='" & jlh_pertemuan & "',absDate='" & tgl1 & "' WHERE id=" & text1(count) & ""
.ExecuteNonQuery() Next
For count As Integer = 0 To 9
Dim id As String = count.ToString Dim kondisi As Integer = 0
For count1 = 1 To text1.Length - 1 Dim tex As String = text1(count1) Dim hsl As String = id - tex If hsl = 0 Then
kondisi = kondisi + 1 End If
Next
If kondisi = 0 Then
Dim hdr As String = Checker1(count + 1) + 0 .CommandText = "UPDATE [Sheet1$] SET absDetil='" &
Checker(count + 1) & "|0',absJumlahHadir='" & hdr &
"',absJumlahPertemuan='" & jlh_pertemuan & "',absDate='" & tgl1 & "' WHERE id=" & id & ""
.ExecuteNonQuery() End If
Next
End With cn.Close()
Catch ex As Exception MsgBox(ex.ToString) End Try
MsgBox("Saved")
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim perintah As String = "@" SerialPort1.Write(perintah) RichTextBox1.Text = "" Button5.Enabled = True
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Using dialog As New OpenFileDialog
If dialog.ShowDialog() <> DialogResult.OK Then Return Dim dir As String
dir = dialog.FileName
Dim filename As System.IO.StreamReader
filename = My.Computer.FileSystem.OpenTextFileReader(dir) RichTextBox1.Text = ""
RichTextBox1.Text = filename.ReadToEnd filename.Close()
End Using
Button4.Enabled = False End Sub
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Dim words() As String = RichTextBox1.Text.Split(",")
For Each word In words
End If Next
ListBox1.Items.Remove("@MMS") ListBox1.Items.Remove("RECORD~1") ListBox1.Items.Remove("@BGSR_1") ListBox1.Items.Remove("SYSTEM~1") RichTextBox1.Text = ""
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
RichTextBox1.Text = ""
If ListBox1.SelectedItem IsNot Nothing Then
Dim txt As String = ListBox1.SelectedItem.ToString() Dim perintah As String = "!" & txt
SerialPort1.Write(perintah) Button4.Enabled = True End If
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
If ListBox1.SelectedItem IsNot Nothing Then Button6.Enabled = True
End If End Sub
If dialog.ShowDialog() <> DialogResult.OK Then Return Dim dir As String
dir = dialog.FileName
Try
Dim MyConnection As System.Data.OleDb.OleDbConnection Dim Ds As System.Data.DataSet
Dim MyAdapter As System.Data.OleDb.OleDbDataAdapter
Dim path As String =
System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim path1 As String = dir 'path & "\" & "Absensi Portabel" & "\" & "PFD.xls"
MyConnection = New
System.Data.OleDb.OleDbConnection("provider=Microsoft.JET.OLEDB.4.0; " & "Data Source=" & path1 & "; " & "Extended Properties=Excel 8.0;")
MyAdapter = New System.Data.OleDb.OleDbDataAdapter("Select * from [sheet1$]", MyConnection)
Ds = New System.Data.DataSet MyAdapter.Fill(Ds)
DataGridView2.DataSource = Ds.Tables(0) MyConnection.Close()
DataGridView2.AutoGenerateColumns = True
Catch ex As Exception MsgBox(ex.Message) End Try
'menampilkan nama file yang sedang di proses
Label1.Text = ""
Dim strArr As String() = dir.Split(New String() {"\"}, StringSplitOptions.None)
Dim count As Integer = strArr.Length() Label1.Text = strArr(count - 1)
'---
End Using End Sub
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
Using dialog As New OpenFileDialog
If dialog.ShowDialog() <> DialogResult.OK Then Return Dim dir As String
dir = dialog.FileName
Try
Dim MyConnection As System.Data.OleDb.OleDbConnection Dim Ds As System.Data.DataSet
Dim MyAdapter As System.Data.OleDb.OleDbDataAdapter
Dim path As String =
System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim path1 As String = Dir MyConnection = New
System.Data.OleDb.OleDbConnection("provider=Microsoft.JET.OLEDB.4.0; " & "Data Source=" & path1 & "; " & "Extended Properties=Excel 8.0;")
Ds = New System.Data.DataSet MyAdapter.Fill(Ds)
DataGridView2.DataSource = Ds.Tables(0) MyConnection.Close()
DataGridView2.AutoGenerateColumns = True
Catch ex As Exception MsgBox(ex.Message) End Try
'menampilkan nama file yang sedang di proses
'---
Label1.Text = ""
Dim strArr As String() = dir.Split(New String() {"\"}, StringSplitOptions.None)
Dim count As Integer = strArr.Length() Label1.Text = strArr(count - 1)
'---
End Using End Sub
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
Dim path As String =
System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim path1 As String = path & "\" & "Absensi Portabel"
'--- Dim name2 As String = path1 & "\" & "PFD.xls"
Dim appXL As Excel.Application Dim wbXL As Excel.Workbook Dim wbsXL As Excel.Workbooks Dim shXL As Excel.Worksheet
Dim Checker As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker1 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker2 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker3 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker4 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
Dim Checker5 As String() = {"", "", "", "", "", "", "", "", "", "", ""}
appXL = CreateObject("excel.application") appXL.Visible = False
wbsXL = appXL.Workbooks
wbXL = wbsXL.Open(name2, , , , 12121) shXL = wbXL.ActiveSheet
'--absDetil--
For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 6), Excel.Range)
Next
'--absJumlahHadir For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 7), Excel.Range)
Checker1(count) = xRng.Value() ' MsgBox(Checker1(count)) Next
'--absJumlahPertemuan-- For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 8), Excel.Range)
Checker2(count) = xRng.Value() 'MsgBox(Checker2(count))
Next
'--absDate--
For count = 1 To 2
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 9), Excel.Range)
Checker3(count) = xRng.Value() 'MsgBox(Checker3(count))
Next
'absKrsdtid
For count = 1 To 10
Dim xRng As Excel.Range = CType(shXL.Cells(count + 1, 4), Excel.Range)
'---UPLOAD ke SERVER---
For count = 1 To 10 Try
MySQLConnection.Open()
MessageBox.Show("Terhubung ke server") Catch ex As Exception
MessageBox.Show(ex.Message) End Try
Dim SQLStatement As String = "UPDATE s_absensi SET
absKlsid='8110000893',absDetil='" & Checker(count) & "',absJumlahHadir='" & Checker1(count) & "',absJumlahPertemuan='" & Checker2(count) &
"',absDate='" & Checker3(count) & "' WHERE absKrsdtid='" & Checker4(count) & "'"
Save(SQLStatement) Next
End Sub
Public Sub Save(ByRef SQLStatement As String) Dim cmd As MySqlCommand = New MySqlCommand With cmd
.CommandText = SQLStatement .CommandType = CommandType.Text .Connection = MySqlConnection End With
cmd.ExecuteNonQuery()