#include <TFT_eSPI.h> // Pustaka TFT untuk ESP32
// Definisikan pin-pin TFT
#define TFT_CS 5 // Pin CS
#define TFT_RST -1 // Gunakan pin reset default
#define TFT_DC 33 // Pin DC
#define TFT_MOSI 23 // Pin MOSI
#define TFT_SCK 18 // Pin SCK
#define TFT_LED 255 // Backlight kontrol, 255 berarti tidak dikendalikan (VIN)
// Inisialisasi TFT LCD dengan pin yang sesuai
TFT_eSPI tft = TFT_eSPI(); // Inisialisasi TFT
// Pin analog untuk membaca data dari sensor arus dan tegangan
const int currentPin = 2; // Pin untuk membaca data dari sensor arus pada ESP32 (Pastikan ini adalah pin ADC yang valid)
const int voltagePin = 4; // Pin untuk membaca data dari sensor tegangan pada ESP32 (Pastikan ini adalah pin ADC yang valid)
// Kalibrasi sensor arus
const float referenceVoltage = 3.3; // Tegangan referensi ADC pada ESP32
const int adcMaxValue = 4095; // Nilai maksimum ADC pada ESP32 (12-bit)
const float sensorSensitivity = 0.185; // Sensitivitas sensor dalam V/A, misalnya ACS712-5A (0.185V/A)
const float sensorOffset = 2.5; // Offset sensor dalam Volt, misalnya ACS712-5A (2.5V untuk 0A)
// Kalibrasi sensor tegangan (misalnya potensiometer)
const float voltageDivider = 1.0; // Kalibrasi jika menggunakan pembagi tegangan (ubah jika perlu)
void setup() {
// Inisialisasi TFT LCD
tft.init();
tft.setRotation(3); // Sesuaikan orientasi TFT jika perlu
tft.fillScreen(TFT_BLACK); // Bersihkan layar dengan warna hitam
tft.setTextSize(2); // Set ukuran teks
tft.setTextColor(TFT_WHITE); // Set warna teks
tft.setCursor(0, 0); // Set cursor ke posisi awal
tft.print("Mengukur Arus");
delay(2000); // Tampilkan pesan awal selama 2 detik
}
void loop() {
// Baca nilai dari sensor arus
int currentValue = analogRead(currentPin);
// Konversi nilai ADC menjadi tegangan
float currentVoltage = (currentValue / float(adcMaxValue)) * referenceVoltage;
// Hitung arus (dalam Ampere)
float current = (currentVoltage - sensorOffset) / sensorSensitivity;
// Baca nilai dari sensor tegangan
int voltageValue = analogRead(voltagePin);
// Konversi nilai ADC menjadi tegangan
float voltage = (voltageValue / float(adcMaxValue)) * referenceVoltage / voltageDivider; // Kalibrasi divider jika ada
// Tampilkan hasil pada TFT LCD
tft.fillScreen(TFT_BLACK); // Bersihkan layar dengan warna hitam
tft.setCursor(0, 0); // Set cursor ke baris pertama
tft.print("Arus: ");
tft.print(current, 2); // Tampilkan nilai arus dengan 2 digit desimal
tft.print(" A");
tft.setCursor(0, 30); // Set cursor ke baris kedua
tft.print("Tegangan: ");
tft.print(voltage, 2); // Tampilkan nilai tegangan dengan 2 digit desimal
tft.print(" V");
delay(1000); // Jeda 1 detik sebelum pembacaan berikutnya
}