Jumat, 10 Agustus 2018

Koleksi String dan Implementasinya

sbb kode u upload data ke server dan mengolah data dari server............
Port 80 atau HTTP

#include <SPI.h>
#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);
  }
}