#include <Ethernet.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 49
MFRC522 mfrc522(SS_PIN, RST_PIN);
int kirim = 0;
String content = "";
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
boolean received = false;
EthernetClient client;
IPAddress server(192, 168, 1, 2);
IPAddress ip(192, 168, 1, 3);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 5000;
String pergi = "0";
String record = "myrfid";
String value2 = "-";
String value3 = "-";
int sudahbuka1 = 0;
int sudahbuka3 = 0;
const int relay = 48;
const int buzzer = 22;
int ledunlock = 23;
int ledlock = 24;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
Serial.println();
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
pinMode(buzzer, OUTPUT);
pinMode(ledunlock, OUTPUT);
pinMode(ledlock, OUTPUT);
lcd.init();
lcd.backlight();
SPI.begin();
mfrc522.PCD_Init();
// lcd.setCursor(0, 0);
// lcd.print("TUGAS AKHIR PNJ");
// lcd.setCursor(0, 1);
// lcd.print(" ERWIN - SHEILA ");
// delay(3000);
// lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" UNTUK MULAI ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
digitalWrite(ledunlock, LOW);
digitalWrite(ledlock, HIGH);
}
void loop() {
// if (client.available()) {
// char c = client.read();
// Serial.write(c);
// if (c == '@') {
// kirim = 0;
// }
// }
int status = 1;
String gabs = "";
while (client.available() and status == 1) {
char c = client.read();
// Serial.print(c);
gabs = gabs + String(c);
received = true;
if (c == '@') {
status = 0;
//break;
}
}
if (gabs.length() > 1) {
Serial.println("GABS:" + gabs);
pergi = "0";
String value1 = splitString(gabs, '#', 0);
value2 = splitString(gabs, '#', 1);//TX
value3 = splitString(gabs, '#', 2);
pergi = splitString(gabs, '#', 3);//pergi
record = splitString(gabs, '#', 4); //rfid_ktp
Serial.println("X-TX:" + value2);
Serial.println("Y-Nama:" + value3);
Serial.println("Z-PErgi:" + pergi);
cekstatus();
}
if (received) {
client.stop();
received = false;
}
if (!client.connected() && lastConnected) {
Serial.println(); Serial.println("disconnecting.");
client.stop();
}
MFRC522::MIFARE_Key key;
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
else {
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
// Serial.println(kirim);
int sudah = 0;
if (content.length() > 10) {
sudah = 1;
Serial.println("Kirim0");
httpRequest0();//CEK validasi
}
else if (pergi == "1" && content.length() < 10) {
sudah = 2;
Serial.println("Kirim1");
httpRequest1();
}
else if (pergi == "3" && content.length() < 10) {
sudah = 3;
Serial.println("Kirim2");
httpRequest2();
}
Serial.println("");
Serial.println("+++++++++++++++++++");
Serial.println(sudah);
Serial.println(content);
Serial.println(content.length());
Serial.println(kirim);
Serial.println("+++++++++++++++++++");
//=========================
// if (!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
// int i = random(10000);
// String reading = "1:" + String(i);
// httpRequest();
// }
// lastConnected = client.connected();
// delay(1000);
//============================================
cekstatus();
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '@') {
Serial.print("OK.");
Serial.println(inChar);
}
}
}
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
void kunci_box () {
digitalWrite(relay, LOW);
digitalWrite(ledunlock, HIGH);
digitalWrite(ledlock, LOW);
delay(8000);
digitalWrite(relay, HIGH);
digitalWrite(ledunlock, LOW);
digitalWrite(ledlock, HIGH);
}
void httpRequest0() {
client.stop();
client.stop();
if (client.connect(server, 80)) {
String myrfid = String(content);
String SQL = "";
SQL = "GET /webkunci/prosescek.php?rfid=" + String(myrfid) + "&rfid2=ok&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
// lastConnectionTime = millis();
}
else {
Serial.println("auto-refresh.");
client.stop();
}
}
//===============================================
void httpRequest1() {
client.stop();
client.stop();
if (client.connect(server, 80)) {
String myrfid = String(content);
String SQL = "";
SQL = "GET /webkunci/prosesinsert.php?&ktp=" + String(record) + "&rfid=" + String(myrfid) + "&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
// lastConnectionTime = millis();
}
else {
Serial.println("auto-refresh.");
client.stop();
}
}
//===============================================
void httpRequest2() {
client.stop();
client.stop();
if (client.connect(server, 80)) {
String myrfid = String(content);
String SQL = "";
SQL = "GET /webkunci/prosesupdate.php?ktp=" + String(record) + "&rfid=" + String(myrfid) + "&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
// lastConnectionTime = millis();
}
else {
Serial.println("auto-refresh.");
client.stop();
}
}
//===============================================
void httpRequest() {
client.stop();
client.stop();
if (client.connect(server, 80)) {
String myrfid = String(content);
String SQL = "";
if (pergi.equals("0")) { //cek
SQL = "GET /webkunci/prosescek.php?rfid=" + String(myrfid) + "&rfid2=ok&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
}
else if (kirim == 1) { //PINJAM
SQL = "GET /webkunci/prosesinsert.php?&ktp=" + String(record) + "&rfid=" + String(myrfid) + "&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
}
else if (pergi == "3") { //BALIK
SQL = "GET /webkunci/prosesupdate.php?ktp=" + String(record) + "&rfid=" + String(myrfid) + "&status=ok HTTP/1.1";
client.println(SQL);
Serial.print(SQL);
client.println("Host: *HOST*");
client.println("Connection: keep-open");
client.println();
client.flush();
}
// lastConnectionTime = millis();
}
else {
Serial.println("auto-refresh.");
client.stop();
}
}
String splitString(String str, char sep, int index)
{
int found = 0;
int strIdx[] = { 0, -1 };
int maxIdx = str.length() - 1;
for (int i = 0; i <= maxIdx && found <= index; i++)
{
if (str.charAt(i) == sep || i == maxIdx)
{
found++;
strIdx[0] = strIdx[1] + 1;
strIdx[1] = (i == maxIdx) ? i + 1 : i;
}
}
return found > index ? str.substring(strIdx[0], strIdx[1]) : "";
}
void cekstatus() {
if (pergi == "1") {
sudahbuka3 = 0;
if (sudahbuka1 == 0) {
// tone(buzzer, 500);
// delay(500);
// noTone(buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print(value3);
delay(2000);
kunci_box ();
sudahbuka1 = 1;
}//sudahbuka
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP KUNCI ");
delay(2000);
}
else if (pergi == "2" ) {
sudahbuka1 = 0;
sudahbuka3 = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print(value3);
delay(1000);
pergi = "0";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAHKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
delay(1000);
kirim = 0;
}
else if (pergi == "6" ) {
// tone(buzzer, 500);
// delay(500);
// noTone(buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print( record );
delay(3000);
pergi = "0";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAHKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
delay(1000);
kirim = 0;
}
else if (pergi == "3" ) {
sudahbuka1 = 0;
if (sudahbuka3 == 0) {
// tone(buzzer, 500);
// delay(500);
// noTone(buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print(value3);
delay(3000);
sudahbuka3 = 1;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP KUNCI ");
delay(1000);
}
else if (pergi == "4" ) {
sudahbuka1 = 0;
sudahbuka3 = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" MASUKAN KUNCI ");
lcd.setCursor(0, 1);
lcd.print(" KE RAK ");
delay(1000);
kunci_box();
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print(value3);
delay(3000);
pergi = "0";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAHKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
delay(1000);
kirim = 0;
}//
else if (pergi == "5" ) {
sudahbuka1 = 0;
sudahbuka3 = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(value2);
lcd.setCursor(0, 1);
lcd.print(value3);
delay(3000);
pergi = "0";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAHKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
delay(1000);
kirim = 0;
}
else {
pergi = "0";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SILAHKAN ");
lcd.setCursor(0, 1);
lcd.print(" TAP e-KTP ");
delay(1000);
}
}
Coba rekan2 mati..ada 10 materi tersembunyi di atas...
1.RFID reader
2.LED IO
3.LCD
4.Web CLient Send data
5.Web Client Read Data
6.Web Client Standby
7.Explode String
8.Serial Event
9.Reset data Buffer
10.Konversi input data
11.Pengalaman......
..
Tidak ada komentar:
Posting Komentar