// Library WiFi dan Firebase
#include <WiFi.h>
#include <FirebaseESP32.h>
// WiFi
const char *ssid = "CIHUY";
const char *password = "123456789";
// Firebase
#define FIREBASE_HOST "https://project-starterheadlight-jujun-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "AIzaSyCmmhEhuM1Gggn6EtSYjOo3sEAoOagSFic"
// Objek Firebase
FirebaseData firebaseData;
FirebaseAuth firebaseAuth;
FirebaseConfig firebaseConfig;
// Variabel data Firebase
String lampudekatdatafb, lampujauhdatafb;
int lampudekatvaluefb = 0, lampujauhvaluefb = 0;
String lampudekatdatafbSpeech, lampujauhdatafbSpeech;
int lampudekatvaluefbSpeech = 0, lampujauhvaluefbSpeech = 0;
String mesinnyaladatafbSpeech, mesinmatidatafbSpeech;
int mesinnyalavaluefbSpeech = 0, mesinmativaluefbSpeech = 0;
String BukaPintudatafbSpeech, TutupPintudatafbSpeech;
int BukaPintuvaluefbSpeech = 0, TutupPintuvaluefbSpeech = 0;
// Definisi pin
const int tomboldekat = 34;
const int tomboljauh = 35;
const int lampudekat = 16;
const int lampujauh = 17;
const int relayACC = 27;
const int relayON = 26;
const int relayST = 25;
const int relayDL = 18;
const int relayUL = 19;
int nilaitomboldekat = 0;
int nilaitomboljauh = 0;
int statusmesin = 0;
int statusdoor = 0;
void setup() {
Serial.begin(115200);
Serial.println("Project Lampu Dekat dan Jauh");
Serial.println("Starter Headlight");
Serial.println("DOOR LOCK ");
Serial.println("BY CIHUY");
// Koneksi WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected.");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Firebase config
firebaseConfig.host = FIREBASE_HOST;
firebaseConfig.signer.tokens.legacy_token = FIREBASE_AUTH;
Firebase.begin(&firebaseConfig, &firebaseAuth);
// Inisialisasi pin
pinMode(tomboldekat, INPUT);
pinMode(tomboljauh, INPUT);
pinMode(lampudekat, OUTPUT);
pinMode(lampujauh, OUTPUT);
pinMode(relayACC, OUTPUT);
pinMode(relayON, OUTPUT);
pinMode(relayST, OUTPUT);
pinMode(relayDL, OUTPUT);
pinMode(relayUL, OUTPUT);
// default relay HIGH (mati karena aktif LOW)
digitalWrite(lampudekat, HIGH);
digitalWrite(lampujauh, HIGH);
digitalWrite(relayACC, HIGH);
digitalWrite(relayON, HIGH);
digitalWrite(relayST, HIGH);
digitalWrite(relayLock, HIGH);
digitalWrite(relayUnlock, HIGH);
}
void bacaDataFirebase(String path, String &data, int &value) {
if (Firebase.getString(firebaseData, path)) {
if (firebaseData.dataType() == "string") {
data = firebaseData.stringData();
value = data.toInt();
}
}
}
void loop() {
// Baca tombol fisik
nilaitomboldekat = digitalRead(tomboldekat);
nilaitomboljauh = digitalRead(tomboljauh);
// Baca data Firebase
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/StateLampuJauh", lampujauhdatafb, lampujauhvaluefb);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/StateLampuDekat", lampudekatdatafb, lampudekatvaluefb);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechLampuJauh", lampujauhdatafbSpeech, lampujauhvaluefbSpeech);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechLampuDekat", lampudekatdatafbSpeech, lampudekatvaluefbSpeech);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechEngineStart", mesinnyaladatafbSpeech, mesinnyalavaluefbSpeech);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechEngineStop", mesinmatidatafbSpeech, mesinmativaluefbSpeech);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechBukaPintu", BukaPintudatafbSpeech, BukaPintuvaluefbSpeech);
bacaDataFirebase("/PROJECT_STARTERHEADLIGHT_JUJUN/SpeechTutupPintu", TutupPintudatafbSpeech, TutupPintuvaluefbSpeech);
// Logika lampu dekat
if (nilaitomboldekat == 1 || lampudekatvaluefb == 1 || lampudekatvaluefbSpeech == 1) {
digitalWrite(lampudekat, LOW);
} else {
digitalWrite(lampudekat, HIGH);
}
// Logika lampu jauh
if (nilaitomboljauh == 1 || lampujauhvaluefb == 1 || lampujauhvaluefbSpeech == 1) {
digitalWrite(lampujauh, LOW);
} else {
digitalWrite(lampujauh, HIGH);
}
// Logika menyalakan mesin
if (mesinnyalavaluefbSpeech == 1 && statusmesin == 0) {
digitalWrite(relayACC, LOW);
delay(1000);
digitalWrite(relayON, LOW);
delay(1000);
digitalWrite(relayST, LOW);
digitalWrite(relayACC, HIGH);
delay(1000);
digitalWrite(relayACC, LOW);
digitalWrite(relayON, LOW);
digitalWrite(relayST, HIGH);
statusdoor = 1;
statusmesin = 1;
}
// Mematikan mesin
if (mesinmativaluefbSpeech == 1) {
digitalWrite(relayACC, HIGH);
digitalWrite(relayON, HIGH);
digitalWrite(relayST, HIGH);
statusmesin = 0;
}
// Kontrol pintu
// Logika door lock/unlock (independen)
if (BukaPintuvaluefbSpeech == 1 && statusdoor == 0 ) {
digitalWrite(relayDL, LOW); // aktif LOW
delay(1000);
digitalWrite(relayDL, HIGH);
statusdoor = 1;
}else {
digitalWrite(relayDL, HIGH);
}
if (TutupPintuvaluefbSpeech == 1 && statusdoor == 1) {
digitalWrite(relayUL, LOW); // aktif LOW
delay(1000);
digitalWrite(relayUL, HIGH);
statusdoor = 0;
} else {
digitalWrite(relayUL, HIGH);
}
}