#include "libary.h"
#include "variabel_global.h"
void setup() {
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
LCD.clear();
}
void loop() {
if (!digitalRead(downButton)) {
randomNum = generateRandomNumber();
Serial.print("Nomor Acak Baru: ");
Serial.println(randomNum);
Serial.println("DOWN");
Serial.println(blynk_token);
menu++;
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)) {
randomNum = generateRandomNumber();
Serial.print("Nomor Acak Baru: ");
Serial.println(randomNum);
Serial.println("UP");
Serial.println(blynk_token);
menu--;
updateMenu();
delay(100);
while (!digitalRead(upButton));
}
if (!digitalRead(selectButton)) {
randomNum = generateRandomNumber();
Serial.print("Nomor Acak Baru: ");
Serial.println(randomNum);
Serial.println("OK");
Serial.println(blynk_token);
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
}
//////////////// case menu
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
LCD.clear();
LCD.print(">CEK CPU");
LCD.setCursor(0, 1);
LCD.print(" HOTSPOT AKTIF");
break;
case 2:
LCD.clear();
LCD.print(" CEK CPU");
LCD.setCursor(0, 1);
LCD.print(">HOTSPOT AKTIF");
break;
case 3:
LCD.clear();
LCD.print(">LICENSI");
LCD.setCursor(0, 1);
LCD.print(" REBOOT");
break;
case 4:
LCD.clear();
LCD.print(" LICENSI");
LCD.setCursor(0, 1);
LCD.print(">REBOOT");
break;
case 5:
menu = 4;
break;
}
}
//////////////// case menu
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action1();
break;
case 3:
action1();
break;
case 4:
action1();
break;
}
}
//////////////// action1
void action1() {
delay(500);
LCD.clear();
// Membuat URL
String url = server;
// Membuat parameter untuk POST
String postParams = "api_key=" + String(blynk_token) + "&action=" + action;
// Melakukan permintaan HTTP POST
String responseData = performHttpPost(url, postParams);
// Proses dan tampilkan respon JSON
processJsonResponse(responseData);
while (digitalRead(selectButton)) {
delay(1000);
}
}
//////////////// action1
//////////////// Proses Get POST API cek saldo
String performHttpPost(String url, String postParams) {
HTTPClient http;
http.begin(url);
// Atur tipe konten untuk POST
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Melakukan permintaan HTTP POST
int httpCode = http.POST(postParams);
String response = "";
Serial.printf("[HTTP] POST... code: %d\n", httpCode);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
response = http.getString();
Serial.println("Response Data:");
Serial.println(response);
}
} else {
Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
LCD.setCursor(0, 0);
LCD.print(" GAGAL KONEKSI");
LCD.scrollDisplayLeft();
delay (100);
}
http.end();
return response;
}
void processJsonResponse(String jsonData) {
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, jsonData);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
} else {
bool status = doc["status"];
LCD.setCursor(0, 0);
LCD.print(status);
if (status) {
// Respon sukses
String nama_pengguna = doc["data"]["nama_pengguna"];
String sisa_saldo_top_up = doc["data"]["sisa_saldo_top_up"];
String id = doc["data"]["id"];
Serial.println("Respon Sukses:");
Serial.print("Nama Pengguna: ");
Serial.println(nama_pengguna);
Serial.print("Sisa Saldo : ");
Serial.println(formatRupiah(sisa_saldo_top_up));
// Menampilkan informasi ke LCD
LCD.setCursor(0, 0);
LCD.print(nama_pengguna);
LCD.setCursor(0, 1);
LCD.print(formatRupiah(sisa_saldo_top_up));
} else {
// Respon gagal
String pesan = doc["data"]["pesan"];
Serial.println("Respon Gagal:");
Serial.print("Pesan: ");
Serial.println(pesan);
// Menampilkan pesan ke LCD
LCD.setCursor(0, 0);
LCD.print(pesan);
}
}
}
//////////////// Proses Get POST API cek saldo
String formatRupiah(String value) {
// Menambahkan titik sebagai pemisah ribuan
int length = value.length();
for (int i = length - 3; i > 0; i -= 3) {
value = value.substring(0, i) + "." + value.substring(i);
}
return "Rp " + value;
}