#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 5 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
#define led 2
#define knifeTrig 4
#define powerTrig 15
#define outControl 12
int mDetik;
int detik;
int menit;
long jam;
int target = 5;
volatile int interruptCounter;
int totalInterruptCounter;
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer() {
portENTER_CRITICAL_ISR(&timerMux);
interruptCounter++;
portEXIT_CRITICAL_ISR(&timerMux);
}
int kon0 = 0;
int kon1;
int kon2;
int pon1 = 0;
int pon2;
int kmDetik,kDetik,kMenit,kJam;
void setup() {
Serial.begin(115200);
Serial.println(F("DHT22 test!"));
dht.begin();
lcd.init();
timer = timerBegin(0,80, true);//80
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 100000, true); //1000000 = 1 detik
timerAlarmEnable(timer);
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("-BROTHERSINDO-");
pinMode(led,OUTPUT);
pinMode(knifeTrig,INPUT_PULLUP);
pinMode(powerTrig,INPUT_PULLUP);
pinMode(outControl,OUTPUT);
pinMode(26,INPUT_PULLUP);
pinMode(27,INPUT_PULLUP);
delay(1000);
lcd.clear();
//intro gak penting
// lcd.setCursor(0,0);
// lcd.print(F(" monitor suhu"));
// lcd.setCursor(0,1);
// lcd.print(F(" & kelembapan"));
// delay(1000);
}
void loop() {
timeint();
if(mDetik >= 9) {}
if(jam >= target && kon0 == 0)
{
kon0=1;
digitalWrite(outControl,HIGH);
kDetik = 0;
}
if(digitalRead(26) == 0){
kon1=1;
}
if(kon0 == 1 && kon1 == 1)//&& kode 3 jam
{
digitalWrite(outControl,LOW);
if(kDetik >= 2) //60
{
kDetik = 0;
kMenit++;
}
if(kMenit >= 2) // 60
{
kDetik = 0;
kMenit=0;
kJam++;
}
if(kJam>=3)
{
kon0=0;
digitalWrite(outControl,HIGH);
kon1 = 0;
kDetik = 0;
kMenit = 0;
kJam = 0;
}
}
////////////////////////////////////
if(digitalRead(27) == 0)
{
digitalWrite(outControl,LOW);
kon2 = 1;
}
if(kon2 == 1)
{
target = jam+5;
kon0=0;
delay(300);
kon2=0;
}
float suhu = dht.readTemperature();
float lembap = dht.readHumidity();
// Check if any reads failed and exit early (to try again).
if (isnan(suhu) || isnan(lembap)) {
Serial.println(F("Failed to read from DHT sensor!"));
lcd.setCursor(0,0); lcd.print(F(" Tidak terbaca"));
return;
}
Serial.print(F("Temp: "));
Serial.println(suhu);
Serial.print(F("Humi: "));
Serial.println(lembap);
//Display data ke LCD =>tampung di data string
String print_suhu = "Temp: " + String(suhu) + " C";
String print_humd = "Humi: " + String(lembap) + " %";
lcd.setCursor(0,0); lcd.print(print_suhu);
lcd.setCursor(0,1); lcd.print(print_humd);
}
void timeint()
{
if (interruptCounter > 0)
{
portENTER_CRITICAL(&timerMux);
interruptCounter--;
portEXIT_CRITICAL(&timerMux);
mDetik++;
kmDetik++;
if(kmDetik >=20)
{
kmDetik = 0;
}
if(mDetik >=10)
{
mDetik = 0;
detik++;
kDetik++;
}
if(detik >= 60) //60
{
detik = 0;
menit++;
}
if(menit >= 60) // 60
{
detik = 0;
menit=0;
jam++;
lcd.setCursor(10,1);
lcd.print("Jam:");
lcd.print(jam);
}
// lcd.setCursor(0,0);
// lcd.print(jam);
// lcd.print(":");
// lcd.print(menit);
// lcd.print(":");
// lcd.print(detik);
// lcd.print(":");
// lcd.print(mDetik);
Serial.print(target);
Serial.print(" --- ");
Serial.print(jam);
Serial.print(":");
Serial.print(menit);
Serial.print(":");
Serial.print(detik);
Serial.print(":");
Serial.println(mDetik);
}
}
void tampil_lcd()
{
}