#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Alamat I2C LCD dan saiznya
LiquidCrystal_I2C lcd(0x27, 16, 2); // Gantikan 0x27 jika alamat I2C LCD anda berbeza
// Pin analog untuk ACS712 dan ZMPT101B
const int currentPin = 34; // Pin ADC untuk ACS712
const int voltagePin = 35; // Pin ADC untuk ZMPT101B
void setup() {
Serial.begin(115200); // Mulakan Serial Monitor untuk debugging
Wire.begin(); // Mulakan komunikasi I2C
lcd.begin(16, 2); // Inisialisasi LCD dengan bilangan lajur dan baris
lcd.backlight(); // Hidupkan lampu latar LCD
lcd.setCursor(0, 0);
lcd.print("Menunggu Data...");
delay(2000); // Tunggu 2 saat sebelum memulakan bacaan
}
void loop() {
// Bacaan dari ACS712
int currentValue = analogRead(currentPin);
float currentVoltage = (currentValue / 4095.0) * 3.3; // Tukar nilai ADC kepada voltan
float current = (currentVoltage - 2.5) / 0.185; // Tukar voltan kepada arus (contoh untuk ACS712)
// Bacaan dari ZMPT101B
int voltageValue = analogRead(voltagePin);
float voltageZMPT = (voltageValue / 4095.0) * 3.3; // Tukar nilai ADC kepada voltan
// Paparkan bacaan pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Arus: ");
lcd.setCursor(0, 1);
lcd.print(current, 2); // Paparkan arus dengan 2 tempat perpuluhan
lcd.print(" A");
lcd.setCursor(8, 0);
lcd.print("Voltan: ");
lcd.setCursor(8, 1);
lcd.print(voltageZMPT, 2); // Paparkan voltan dengan 2 tempat perpuluhan
lcd.print(" V");
// Debugging (jika diperlukan)
Serial.print("Arus ACS712: ");
Serial.print(current);
Serial.println(" A");
Serial.print("Voltan ZMPT101B: ");
Serial.print(voltageZMPT);
Serial.println(" V");
delay(3000); // Tunggu 3 saat sebelum bacaan seterusnya
}