#include <DHT.h>
#include "Karu_SevSeg.h"
#define DHTPIN A0
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const byte l[] = {2, 3};
const byte b[] = {A2, A1, A3, A4};
const byte s[] = {4, 5, 6, 7, 8, 9, 10};
const byte d[] = {13, 12, 11};
const byte ns = sizeof(s) / sizeof(s[0]);
const byte nd = sizeof(d) / sizeof(d[0]);
Karu_SevSeg seg(s, ns, d, nd);
byte angka = 0;
byte dv = 1;
bool mulai = false;
String perintah = "";
float suhu_a = 0;
void setup() {
Serial.begin(9600);
dht.begin();
seg.begin();
for (byte i = 1; i <= 3; i++) {
seg.on(i);
for (byte j = 0; j < 10; j++) {
seg.print(j);
delay(500);
}
}
delay(5000);
pinMode(l[0], OUTPUT);
pinMode(l[1], OUTPUT);
for (byte i : b) pinMode(i, OUTPUT);
bersihkan();
Serial.println("Nama : La Ode Muh. Adam Safitra");
Serial.println("NIM : 21650122");
delay(2000);
}
void loop() {
/*if (Serial.available() > 0) {
mulai = true;
}*/
/*while (Serial.available() > 0) {
char sr = Serial.read();
if (sr != '\n') {
perintah += sr;
continue;
}
if (perintah == "mulai") mulai = true;
else if (perintah == "berhenti") {
mulai = false;
bersihkan();
matikanSemua();
Serial.println("Program dihentikan");
}
perintah = "";
}*/
// if (!mulai) return;
// Membaca suhu dan kelembaban dari sensor DHT11
float humidity = dht.readHumidity();
float suhu = dht.readTemperature();
// nyalaKe(dv++);
seg.nyalaKe(dv++);
if (dv-1 == nd) dv = 1;
// tampilAngka(angka);
seg.print(angka);
angka = (angka + 1) % 10;
delay(100);
// Menampilkan suhu dan kelembaban di Serial monitor
cetakSuhu(suhu, humidity);
// Menghidupkan LED biru dan buzzer 1 jika suhu di bawah 10°C
if (suhu < 10) {
digitalWrite(l[1], LOW);
digitalWrite(l[0], HIGH);
tone(b[0], 1000);
delay(250);
noTone(b[0]);
}
// Menghidupkan LED merah dan buzzer 4 jika suhu di atas 25°C
if (suhu > 25) {
digitalWrite(l[0], LOW);
delay(200);
digitalWrite(l[1], HIGH);
tone(b[3], 294);
delay(250);
noTone(b[3]);
} else {
noTone(b[3]);
}
// Menghidupkan buzzer 2 jika kelembaban di atas 70%
if (humidity > 70) {
tone(b[1], 1200);
} else {
noTone(b[1]);
}
// Menghidupkan buzzer 3 dan 4 secara bergantian
// jika suhu di atas 30°C dan kelembaban di bawah 50%
if (suhu > 30 && humidity < 50) {
while (
(suhu = dht.readTemperature()) > 30 &&
(humidity = dht.readHumidity()) < 50
) {
cetakSuhu(suhu, humidity);
tone(b[2], 1000);
delay(300);
noTone(b[2]);
delay(100);
tone(b[3], 500);
delay(300);
noTone(b[3]);
delay(100);
}
} else {
noTone(b[2]);
noTone(b[3]);
}
delay(300);
}
void cetakSuhu(float suhu, float humidity) {
if (suhu != suhu_a) {
suhu_a = suhu;
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C , Kelembaban udara: ");
Serial.print(humidity);
Serial.println("%");
}
}
void bersihkan() {
for (int i = 0; i < 10; i++)
Serial.println();
}
void matikanSemua() {
matikan();
digitalWrite(l[0], LOW);
digitalWrite(l[1], LOW);
for (byte i : d) digitalWrite(i, LOW);
for (byte i : b) noTone(i);
angka = 0;
dv = 1;
}
void tampilAngka(byte num) {
switch (num) {
case 1: nyalakan("bc"); break;
case 2: nyalakan("abdeg"); break;
case 3: nyalakan("abcdg"); break;
case 4: nyalakan("bcfg"); break;
case 5: nyalakan("acdfg"); break;
case 6: nyalakan("acdefg"); break;
case 7: nyalakan("abc"); break;
case 8: nyalakan("abcdefg"); break;
case 9: nyalakan("abcdfg"); break;
default: nyalakan("abcdef"); break;
}
}
void nyalakan(String l) {
matikan();
for (char c : l)
digitalWrite(s[convertToNumber(c)], LOW);
}
void matikan() {
for (byte e : s)
digitalWrite(e, HIGH);
}
int convertToNumber(char input) {
switch (input) {
case 'a': return 0;
case 'b': return 1;
case 'c': return 2;
case 'd': return 3;
case 'e': return 4;
case 'f': return 5;
case 'g': return 6;
}
}
void nyalaKe(byte a) {
for (byte e : d) {
digitalWrite(e, LOW);
}
// delay(250);
digitalWrite(d[a-1], HIGH);
}