Absensi Sidik Jari Portabel Terintegrasi Sistem Informasi Akademik Universitas Sumatera Utara

LAMPIRAN

Lampiran 1: Kode Program Arduino

#include
#include
#include
#include
#include
#include
#include
#include
#include

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);

namespace

27
Universitas Sumatera Utara

{
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();
lcd.setCursor(0,0);
lcd.print("FP Error");

while (1);

28
Universitas Sumatera Utara

}

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) {

// read from the file until there's nothing else in it:
while (myFile.available()) {

29
Universitas Sumatera Utara

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(){

root = SD.open("/");
printDirectory(root, 0);

30
Universitas Sumatera Utara

}

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);
}
}

31
Universitas Sumatera Utara

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();
}
}
}

32
Universitas Sumatera Utara


//-----------========== 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")
{
while(1)
{

33
Universitas Sumatera Utara

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);
button1 = digitalRead(buttonPin);

34
Universitas Sumatera Utara

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){
button = 1;

35
Universitas Sumatera Utara

}
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:
Serial.println("Communication error");

36
Universitas Sumatera Utara

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:
Serial.println("Unknown error");

37
Universitas Sumatera Utara

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();
if (p != FINGERPRINT_OK)

return -1;

38
Universitas Sumatera Utara

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 {
// files have sizes, directories do not
//Serial.print("\t\t");

39
Universitas Sumatera Utara

//Serial.println(entry.size(), DEC);
}
entry.close();
}
}

void tampilwaktu()
{
Time t = rtc.time();
char menit[]="00";
if (t.min