/* =================================================================================
Pemrogram : Kelompok EK-3B/4
1. 05-Arga Dipta Lanomi NIM:3.32.20.1.05
2. 18-Muhammad Rayhan NIM:3.32.20.1.18
Tgl.Praktikum : Rabu, 28 September 2022
====================================================================================
Proyek_Mikro
B40110a-SmartPowerDistrbutor.ino
program Kendali peragkat audio dengan proteksi tegangan lebih dengan LCD16X2
------------------------------------------------------------------------------------
Komponen:
- Push button
- PZEM004Tv30
- LCD16X2
==================================================================================*/
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h> // Libarary LiquidCrystal_12C
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial pzemSWSerial(12, 13);
PZEM004Tv30 pzem(pzemSWSerial);
const int pinsaklarKanan = A0,
pinsaklarKiri = A2,
pinsaklarMenu = A3;
int max = 3,
menu = 0,
Status = 0,
addres = 1,
i,
s=0,
batasTegangan =220,
saklarKanan = 0,
saklarKiri = 0,
saklarMenu = 0,
Channel[4]={3,4,5};
unsigned int tunda,
tunda1 = 0;
const bool ditekan = 0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(pinsaklarKanan,INPUT_PULLUP);
pinMode(pinsaklarKiri,INPUT_PULLUP);
pinMode(pinsaklarMenu,INPUT_PULLUP);
lcd.setCursor(0,0);
lcd.print(" Smart Power ");
lcd.setCursor(0,1);
lcd.print(" Distributor ");
for(i=0; i<=3; i++){
pinMode(Channel[i],OUTPUT);
}
for(i=0; i<=3; i++){
digitalWrite(Channel[i],HIGH);
}
delay(3000);
}
void loop() {
int voltage = pzem.voltage();
float current = pzem.current();
int power = pzem.power();
float energy = pzem.energy();
int frequency = pzem.frequency();
float pf = pzem.pf();
if (voltage > batasTegangan){
for(i=3; i>=0; i--){
digitalWrite(Channel[i],HIGH);
s=0;
}
}
saklarMenu = digitalRead(pinsaklarMenu);
saklarKanan = digitalRead(pinsaklarKanan);
saklarKiri = digitalRead(pinsaklarKiri);
if (saklarMenu == ditekan){
if (menu <= max){
menu +=1;
}
if (menu >= max){
menu = 0 ;
}
delay(200);
}
switch (menu) {
case 0:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Power:");
lcd.setCursor(0,1);
lcd.print("<On");
lcd.setCursor(12,1);
lcd.print("Off>");
if (s==0){
lcd.setCursor(9,0);
lcd.print("Off");
}
else if(s==1){
lcd.setCursor(9,0);
lcd.print("On");
}
if(saklarKiri==ditekan && menu==0 && s==0 && voltage <= batasTegangan){
s=1;
for(i=0; i<=3; i++){
digitalWrite(Channel[i],LOW);
delay(tunda1);
}
}
else if(saklarKanan==ditekan && menu==0 && s==1){
s=0;
for(i=3; i>=0; i--){
digitalWrite(Channel[i],HIGH);
delay(tunda1);
}
}
break;
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(voltage),lcd.print(" V");
lcd.setCursor(0,1);
lcd.print(frequency),lcd.print(" Hz");
lcd.setCursor(10,0);
lcd.print(current),lcd.print(" A");
lcd.setCursor(10,1);
lcd.print(power),lcd.print(" W");
break;
case 2:
lcd.clear();
tunda = EEPROM.read(addres);
tunda1 = tunda * 500 ;
lcd.setCursor(0,0);
lcd.print("Waktu tunda:"),
lcd.setCursor(0,1);
lcd.print(tunda1),lcd.print(" ms");
if (saklarKanan == ditekan && menu==2){
delay(200);
tunda++ ;
if(tunda>=11){
tunda = 0;
}
tunda1=tunda*500;
EEPROM.update(addres,tunda);}
if (saklarKiri== ditekan && menu==2){
delay(200);
tunda--;
if(tunda>=11){
tunda = 0;
}
tunda1=tunda*500;
EEPROM.update(addres,tunda);}
break;
}
delay(200);
}
Komentar
Posting Komentar