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