#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define NIM 21650095
#define LED 13
#define DHTPIN A0
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte btn[] = {12, A3, A2, A1}; // Pin buttton
const byte buz[] = {11, 10, 5}; // Pin buzzer
const byte seg[] = {2, 9, 6, 7, 8, 3, 4}; // Pin seven segment
byte ledStates = 0;
bool b = false;
bool ukur = false;
void tombol1(), tombol2(), tombol3(), tombol4();
unsigned long lst1, lst2, lst3, lst4 = 0;
const int cinr1, cinr2, cinr3, cinr4 = 1000;
const uint8_t angka[][8] = {
/*0*/{B01110, B10001, B10011, B10101, B11001, B10001, B01110, B00000},
/*1*/{B00100, B01100, B00100, B00100, B00100, B00100, B01110, B00000},
/*2*/{B01110, B10001, B00001, B00010, B00100, B01000, B11111, B00000},
/*3*/{B11111, B00010, B00100, B00010, B00001, B10001, B01110, B00000},
/*4*/{B00010, B00110, B01010, B10010, B11111, B00010, B00010, B00000},
/*5*/{B11111, B10000, B11110, B00001, B00001, B10001, B01110, B00000},
/*6*/{B00110, B01000, B10000, B11110, B10001, B10001, B01110, B00000},
/*7*/{B11111, B10001, B00001, B00010, B00100, B00100, B00100, B00000},
/*8*/{B01110, B10001, B10001, B01110, B10001, B10001, B01110, B00000},
/*9*/{B01110, B10001, B10001, B01111, B00001, B00010, B01100, B00000},
};
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(LED, OUTPUT);
for (byte e : btn) pinMode(e, INPUT_PULLUP);
for (byte e : buz) pinMode(e, OUTPUT);
for (byte e : seg) {
pinMode(e, OUTPUT);
digitalWrite(e, HIGH);
}
cetakNamaNim();
}
void loop() {
unsigned long curr = millis();
if (curr - lst1 >= cinr1) {
lst1 = curr;
tombol1();
}
if (curr - lst2 >= cinr2) {
lst2 = curr;
tombol2();
}
if (curr - lst3 >= cinr3) {
lst3 = curr;
tombol3();
}
if (curr - lst4 >= cinr4) {
lst4 = curr;
tombol4();
}
}
void tombol1() {
bool b1 = !digitalRead(btn[0]);
// Periksa Button 1
if (b1) {
delay(250);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Widya");
lcd.setCursor(2, 1);
lcd.print("Mustikawati");
ukur = false;
}
}
void tombol2() {
bool b2 = !digitalRead(btn[1]);
if (b2) {
delay(250);
byte n = 0;
while ((n == 0) || (n % 10 != 0)) {
tampilAngka(n++);
tone(buz[0], 243);
delay(500);
noTone(buz[0]);
delay(200);
}
matikan();
ukur = false;
}
}
void tombol3() {
bool b3 = !digitalRead(btn[2]);
// Periksa Button 3
if (b3) {
delay(250);
digitalWrite(LED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
ukur = true;
}
if (!ukur) return;
float temperature = dht.readTemperature();
byte humidity = dht.readHumidity();
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(10, 1);
lcd.print(humidity);
lcd.print("% ");
if (b = !b) {
tone(buz[1], 700);
noTone(buz[0]);
} else {
tone(buz[0], 800);
noTone(buz[1]);
}
if (temperature > 30) {
digitalWrite(LED, HIGH);
tone(buz[0], 200);
} else {
digitalWrite(LED, LOW);
noTone(buz[0]);
}
delay(1000);
}
void tombol4() {
bool b4 = !digitalRead(btn[3]);
if (!b4) return;
int moonlightSonata[] = { 262, 294, 330, 262, 262, 294, 330, 262, 330, 349, 392, 330, 349, 392, 330, 294, 262, 330, 294, 262, 262, 330, 262, 196, 262, 262, 330, 262, 262, 294, 330, 262, 262, 294, 330, 262, 330, 349, 392, 330, 349, 392, 330, 294, 262, 330, 294, 262, 262, 330, 262, 196, 262};
for (int i = 0; i < sizeof(moonlightSonata)/sizeof(moonlightSonata[0]); i++) {
tone(buz[2], moonlightSonata[i]); // Memainkan nada Moonlight Sonata
delay(200); // Memberi jeda selama 0.2 detik
noTone(buz[2]); // Menghentikan nada
delay(50); // Memberi jeda selama 0.05 detik
}
}
void cetakNamaNim() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nama: Widya");
String n_ = String(NIM);
byte nim[8];
for (byte i = 0; i < 8; i++)
nim[i] = n_.charAt(i) - '0';
for (byte i = 0; i < 8; i++)
lcd.createChar(i+1, nullptr);
lcd.setCursor(0, 1);
lcd.print("NIM: \x01\x02\x03\x04\x05\x06\x07\x08");
delay(200);
uint8_t nim_2[8][8] = {{0}};
for (byte i = 0; i < 8; i++) {
for (byte j = 0; j < 8; j++) {
nim_2[j][i] = angka[nim[j]][i];
lcd.createChar(j+1, nim_2[j]);
}
delay(10);
}
}
void tampilAngka(byte num) {
switch (num) {
case 0: nyalakan("ABCDEF"); break;
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;
}
}
void nyalakan(String l) {
for (byte e : seg) digitalWrite(e, HIGH);
for (char c : l)
digitalWrite(seg[convertToNumber(c)], LOW);
}
void matikan() {
for (byte e : seg) 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;
}
}