#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
Servo servo;
bool motionDetected = true;
int bOK = 2;
int bDN = 3;
int led = 4;
int ldr = A0;
int pir = 5;
int ser = 6;
bool ditekan = LOW;
int bounce = 50;
int statusbutton = HIGH;
int bacabutton1;
byte lastButtonState;
unsigned long lastTimeButtonState = millis();
unsigned long lastDebounceTime;
unsigned long debounce = 50;
unsigned long debounceDelay = 200;
int derajat = 0;
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
servo.attach(ser);
Serial.begin(9600);
pinMode(bOK, INPUT_PULLUP);
pinMode(bDN, INPUT_PULLUP);
pinMode(ldr, INPUT);
pinMode(led, OUTPUT);
lastButtonState = digitalRead(bDN);
// lcd.setCursor(0, 0);
// lcd.print("KOMPOR UPI!!!");
// delay(1000);
// lcd.setCursor(0, 1);
// lcd.print("KREATIF!");
// delay(1000);
// lcd.setCursor(0, 1);
// lcd.print(" ");
// delay(200);
// lcd.setCursor(0, 1);
// lcd.print("INOVATIF!");
// delay(1000);
// lcd.setCursor(0, 1);
// lcd.print(" ");
// delay(200);
// lcd.setCursor(0, 1);
// lcd.print("PRODUKTIF!");
// delay(2000);
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 1);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("Ridho Ismail N");
// lcd.setCursor(0, 1);
// lcd.print("AMK.004.24.17");
// delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("TGS 6 PEMATERI 2 ");
lcd.setCursor(0,1);
lcd.print("Press [OK] >>>");
}
void loop() {
// put your main code here, to run repeatedly:
if(millis() - lastTimeButtonState >= debounce){
bacabutton1 = digitalRead(bOK);
if(bacabutton1 != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = bacabutton1;
if(bacabutton1 == ditekan){
lcd.clear();
menusetting();
}
}
}
}
void menusetting(){
setMenu1 :
if(millis() - lastTimeButtonState >= debounce){
byte bacabuttonOK = digitalRead(bOK);
if(bacabuttonOK != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = bacabuttonOK;
if(bacabuttonOK == ditekan){
lcd.clear();
goto tampil_data;
}
}
}
if(millis() - lastTimeButtonState >= debounce){
byte buttonState = digitalRead(bDN);
if(buttonState != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = buttonState;
if(buttonState == ditekan){
lcd.clear();
goto setMenu2;
}
}
}
lcd.setCursor(0,0);
lcd.print("->LDR + LED");
lcd.setCursor(0,1);
lcd.print(" PIR + SERVO");
goto setMenu1;
// -------------------------------------------------------------------
setMenu2 :
if(millis() - lastTimeButtonState >= debounce){
byte bacabuttonOK2 = digitalRead(bOK);
if(bacabuttonOK2 != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = bacabuttonOK2;
if(bacabuttonOK2 == ditekan){
lcd.clear();
goto kirim_data;
}
}
}
if(millis() - lastTimeButtonState >= debounce){
byte buttonState = digitalRead(bDN);
if(buttonState != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = buttonState;
if(buttonState == ditekan){
lcd.clear();
goto setMenu1;
}
}
}
lcd.setCursor(0,0);
lcd.print(" LDR + LED");
lcd.setCursor(0,1);
lcd.print("->PIR + SERVO");
goto setMenu2;
tampil_data:
if(millis() - lastTimeButtonState >= debounce){
byte buttonState = digitalRead(bDN);
if(buttonState != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = buttonState;
if(buttonState == ditekan){
lcd.clear();
goto setMenu1;
}
}
}
int baca_ldr = analogRead(ldr);
int batas = map(baca_ldr, 0,1023, 0,255);
lcd.setCursor(0,0);
lcd.print("Nilai LDR :");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(batas);
analogWrite(led, batas);
delay(100);
goto tampil_data;
kirim_data :
if(millis() - lastTimeButtonState >= debounce){
byte buttonState = digitalRead(bDN);
if(buttonState != lastButtonState){
lastTimeButtonState = millis();
lastButtonState = buttonState;
if(buttonState == ditekan){
lcd.clear();
goto setMenu1;
}
}
}
lcd.setCursor(0, 0);
lcd.print("PIR: ");
// if(baca_pir == 1){
// derajat = (derajat + 1) % 180;
// servo.write(derajat);
// lcd.setCursor(5,0);
// lcd.print(derajat);
// lcd.setCursor(0,1);
// lcd.print(" ");
// lcd.print("Ada gerakan");
// delay(10);
// } else{
// lcd.setCursor(0,1);
// lcd.print(" ");
// lcd.setCursor(0,1);
// lcd.print("gaada gerakan");
// }
// Serial.println(baca_pir);
byte baca_pir = digitalRead(pir);
if (baca_pir == HIGH) {
if (millis() - lastDebounceTime > debounceDelay) {
lastDebounceTime = millis();
Serial.println("Motion detected!");
if (derajat < 180) {
derajat += 1;
} else if (derajat == 180){
derajat = 0;
}
servo.write(derajat);
lcd.setCursor(5,0);
lcd.print(derajat);
lcd.setCursor(0,1);
lcd.print("Motion detected!");
delay(15);
}
} else {
Serial.println("No motion detected");
lcd.setCursor(0,1);
lcd.print("No motion detect");
delay(20);
}
goto kirim_data;
}