#include <WiFi.h>
#include <HTTPClient.h>
// #include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
#include <ArduinoJson.h>
// for serial qrcode
// #include <SoftwareSerial.h>
// Konfigurasi WiFi
const char *ssid = "Wokwi-GUEST";
const char *password = "";
// URL server untuk mengirim data QR code dan menerima respon
const char *serverUrl = "http://alamat_server/api/verifikasi";
const char* postEndpoint = "http://192.168.0.100/goalpara/ceksaldo_curl_2.php";
const char* postPayload = "kodegate=1&koderf=90000000016";
// Alamat I2C sensor magnetometer (contoh menggunakan HMC5883L)
#define MAGNETOMETER_ADDRESS (0x1E)
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(MAGNETOMETER_ADDRESS);
// Pin untuk sensor inframerah dan mesin scanner
const int infraredPin = 2; // Ganti dengan pin yang sesuai
const int scannerPin = 4; // Ganti dengan pin yang sesuai
//just for testing
const int ledPin = 0;
int infraredPinState = LOW;
int val = 0;
const int relayPin = 4;
String ip = "";
// variable untuk scanner
// SoftwareSerial myserial(2,3);
// String kode;
void sendConfirData(String qr) {
// Buat objek HTTPClient
String gateID = "1";
HTTPClient http;
http.begin("http://103.187.114.7/goalpara/konfir_saldo_curl_2.php?kodegate=" + gateID + "&koderf=" + qr);
int httpResponCode = http.GET();
if (httpResponCode > 0) {
String payload = http.getString();
Serial.print("Response: ");
Serial.println(payload);
} else {
Serial.print("Error ");
Serial.println(httpResponCode);
}
http.end();
}
void sendData(String qr) {
// Buat objek HTTPClient
String gateID = "1";
HTTPClient http;
http.begin("http://103.187.114.7/goalpara/ceksaldo_curl_2.php?kodegate=" + gateID + "&koderf=" + qr);
int httpResponCode = http.GET();
if (httpResponCode > 0) {
String payload = http.getString();
Serial.print("Response: ");
Serial.println(payload);
// Cari posisi 'buka='
int bukaPos = payload.indexOf("buka=");
if (bukaPos != -1) {
// Ambil nilai setelah 'buka=' hingga karakter berikutnya
String bukaValue = payload.substring(bukaPos + 5, bukaPos + 6);
Serial.print("Nilai 'buka': ");
Serial.println(bukaValue);
} else {
Serial.println("Tidak ditemukan 'buka=' dalam respons.");
}
sendConfirData(qr);
} else {
Serial.print("Error ");
Serial.println(httpResponCode);
}
http.end();
}
// Pin untuk mengontrol access control board
// const int opRPin = 2; // Ganti dengan pin yang sesuai
// const int opLPin = 3; // Ganti dengan pin yang sesuai
// const int comPin = 4; // Ganti dengan pin yang sesuai
// const int gndPin = 5; // Ganti dengan pin yang sesuai
// const int accZroPin = 6; // Ganti dengan pin yang sesuai
// Fungsi untuk membuka gate (menggerakkan turnstile gate)
// void bukaGate() {
// Serial.println("Membuka gate...");
// // Aktifkan pin OP-R (putar ke kanan)
// digitalWrite(opRPin, HIGH);
// // Tunggu beberapa detik sesuai dengan kebutuhan gate Anda
// delay(2000);
// // Nonaktifkan pin OP-R
// digitalWrite(opRPin, LOW);
// }
// Fungsi untuk mengaktifkan atau menonaktifkan mesin scanner QR code
void kontrolMesinScanner(bool aktif) {
digitalWrite(scannerPin, aktif ? HIGH : LOW);
}
// Fungsi untuk melakukan pemindaian QR code
// void scanQRCode() {
// Serial.println("Mengaktifkan pemindaian QR code...");
// // Tunggu sebentar untuk memastikan mesin scanner aktif
// delay(500);
// // Baca data dari sensor magnetometer
// sensors_event_t event;
// mag.getEvent(&event);
// // Ambil data sudut arah
// float heading = atan2(event.magnetic.y, event.magnetic.x);
// if (heading < 0) {
// heading += 2 * PI;
// }
// // Konversi sudut arah menjadi derajat
// heading = heading * 180 / PI;
// // Jika terdeteksi QR code, kirim data ke server
// if (heading >= 45 && heading <= 135) { // Contoh sudut untuk deteksi QR code
// String qrCode = "123456"; // Gantilah dengan nilai QR code yang sebenarnya
// kirimDataKeServer(qrCode);
// }
// // Matikan mesin scanner setelah pemindaian selesai
// kontrolMesinScanner(false);
// Serial.println("Pemindaian QR code selesai.");
// }
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Koneksi WiFi...");
}
Serial.println("Koneksi WiFi berhasil");
ip = String(WiFi.localIP());
Serial.println("IP ADD: " + ip);
// Inisialisasi sensor magnetometer
// if (!mag.begin()) {
// Serial.println("Gagal menginisialisasi sensor magnetometer");
// while (1);
// }
// // Konfigurasi pin untuk mengontrol access control board
// pinMode(opRPin, OUTPUT);
// pinMode(opLPin, OUTPUT);
// pinMode(comPin, OUTPUT);
// pinMode(gndPin, OUTPUT);
// pinMode(accZroPin, OUTPUT);
// // Pastikan pin GND dan ACC ZRO terhubung ke GND pada access control board
// digitalWrite(gndPin, LOW);
// digitalWrite(accZroPin, LOW);
// // Pastikan pin COM pada access control board terhubung ke GND pada ESP32
// digitalWrite(comPin, LOW);
// Konfigurasi pin sensor inframerah dan mesin scanner
pinMode(infraredPin, INPUT);
pinMode(scannerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(relayPin, OUTPUT);
}
void loop() {
// Sensor inframerah mendeteksi gerakan
//just for testing
val = digitalRead(infraredPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (infraredPinState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
infraredPinState = HIGH;
// kode untuk memulai scanner ketika terdeteksi gerakan dari sensor PIR
// if (myserial.available() > 0) {
// kode = myserial.readString();
// Serial.println(kode);
// sendData();
// }
sendData("90000000016");
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (infraredPinState == HIGH) {
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
infraredPinState = LOW;
digitalWrite(relayPin, LOW);
}
}
// Default Code Base
// if (digitalRead(infraredPin) == HIGH) {
// // Nyalakan mesin scanner
// digitalWrite(scannerPin, HIGH);
// // Baca data dari sensor magnetometer
// sensors_event_t event;
// mag.getEvent(&event);
// // Ambil data sudut arah
// float heading = atan2(event.magnetic.y, event.magnetic.x);
// if (heading < 0) {
// heading += 2 * PI;
// }
// // Konversi sudut arah menjadi derajat
// heading = heading * 180 / PI;
// // Jika terdeteksi QR code, kirim data ke server
// if (heading >= 45 && heading <= 135) { // Contoh sudut untuk deteksi QR code
// String qrCode = "123456"; // Gantilah dengan nilai QR code yang sebenarnya
// kirimDataKeServer(qrCode);
// delay(5000); // Tunggu beberapa detik sebelum melakukan pemindaian lagi
// }
// // Matikan mesin scanner setelah proses selesai
// digitalWrite(scannerPin, LOW);
// }
delay(100);
}