#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const int relayHijauPin = 2;
const int relayBiruPin = 3;
const int tombolPin = 4;
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001"; // Alamat untuk komunikasi nRF24L01
bool tombolDitekan = false;
bool statusLampu = false; // false = standby (biru menyala), true = aktif (hijau menyala)
bool pesananDikerjakan = false; // Flag untuk menandai jika pesanan telah diterima dan dikerjakan
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 2004
unsigned long waktuMulai = 0;
const unsigned long durasiStandby = 600000; // 10 menit dalam milidetik
bool waitingForConfirmation = false;
void setup() {
pinMode(relayHijauPin, OUTPUT);
pinMode(relayBiruPin, OUTPUT);
pinMode(tombolPin, INPUT_PULLUP); // Tombol menggunakan pull-up internal
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
// Setup LCD
lcd.init();
lcd.backlight();
lcd.setCursor(2, 1);
lcd.print("ES PUTER ROSE 91");
// Keadaan standby, hanya relay biru yang menyala
digitalWrite(relayHijauPin, LOW);
digitalWrite(relayBiruPin, HIGH);
}
void loop() {
if (!waitingForConfirmation && digitalRead(tombolPin) == LOW) {
// Tunggu hingga tombol dilepas untuk menghindari multiple toggles
delay(50); // Debounce delay
if (digitalRead(tombolPin) == LOW) {
tombolDitekan = !tombolDitekan;
statusLampu = tombolDitekan;
waitingForConfirmation = true; // Menunggu konfirmasi dari Arduino B
radio.stopListening();
radio.write(&tombolDitekan, sizeof(tombolDitekan));
radio.startListening();
// Update relay lokal
updateRelays();
// Update LCD lokal
updateLCD();
// Reset timer
waktuMulai = millis();
// Tunggu hingga tombol dilepas sebelum melanjutkan
while (digitalRead(tombolPin) == LOW) {}
delay(50); // Debounce delay
}
}
// Periksa apakah waktu standby telah tercapai
if (millis() - waktuMulai >= durasiStandby && statusLampu && pesananDikerjakan) {
// Kembali ke mode standby setelah 10 menit jika tidak ada pesanan
statusLampu = false;
waitingForConfirmation = true; // Menunggu konfirmasi dari Arduino B
radio.stopListening();
radio.write(&statusLampu, sizeof(statusLampu));
radio.startListening();
// Update relay lokal
updateRelays();
// Update LCD lokal
updateLCD();
// Reset timer
waktuMulai = millis();
}
// Periksa konfirmasi dari Arduino B
if (waitingForConfirmation && radio.available()) {
bool confirmation;
radio.read(&confirmation, sizeof(confirmation));
if (confirmation) {
waitingForConfirmation = false; // Konfirmasi diterima, tombol dapat ditekan lagi
if (!statusLampu) {
// Jika kembali ke mode standby setelah 10 menit, update pesananDikerjakan
pesananDikerjakan = false;
lcd.clear();
lcd.setCursor(1, 2);
lcd.print("ES PUTER ROSE 91");
}
}
}
delay(100); // Delay untuk mengurangi beban pada loop
}
void updateRelays() {
if (statusLampu) {
// Keadaan aktif
digitalWrite(relayHijauPin, HIGH);
digitalWrite(relayBiruPin, LOW);
} else {
// Keadaan standby
digitalWrite(relayHijauPin, LOW);
digitalWrite(relayBiruPin, HIGH);
}
}
void updateLCD() {
lcd.clear();
if (statusLampu) {
lcd.setCursor(0, 0);
if (pesananDikerjakan) {
lcd.print("Pesanan Diterima");
} else {
lcd.print("Pesanan Terkirim !!!");
}
} else {
lcd.setCursor(0, 0);
lcd.print("ES PUTER ROSE 91");
}
}