#include <DHT.h>
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 4 // Pin data sensor DHT22 terhubung ke GPIO 4
#define DHTTYPE DHT22 // Tipe sensor DHT 22
DHT dht(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;
// Inisialisasi LCD
int kolom = 20;
int baris = 4;
LiquidCrystal_I2C lcd(0x27, kolom, baris);
// Teks yang ingin ditampilkan sebagai running text
// String line1 = "Raddyaarizaldy";
// String line2 = "IOT";
// String line3 = "BLK SURABAYA";
// String line4 = "2024";
// //nilai panjang pesan
// int linel1;
// int linel2;
// int linel3;
// int linel4;
String nama = "Raddyaarizaldy";
String jurusan = "IOT";
String blk = "BLK SURABAYA";
String gelombang = "2024";
void setup() {
Serial.begin(115200);
// Inisialisasi sensor DHT dan RTC
dht.begin();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// linel1 = line1.length();
// linel2 = line2.length();
// linel3 = line3.length();
// linel4 = line4.length();
}
void loop() {
// Membaca suhu dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
} else {
// Tampilkan suhu dan kelembaban di Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print("°C, Kelembaban: ");
Serial.print(humidity);
Serial.println("%");
}
// Baca waktu dari RTC dan tampilkan di Serial Monitor
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print("/");
Serial.print(now.month(), DEC);
Serial.print("/");
Serial.print(now.day(), DEC);
Serial.println(".");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println(".");
// Perbarui tampilan running text di LCD
// for (int i = 0; i < linel1 + 16; i++) {
// lcd.setCursor(0, 0);
// lcd.print(line1.substring(i, i + 16)); // Tampilkan potongan pesan sepanjang 16 karakter
// delay(300); // Tunggu 300 milidetik sebelum menggeser teks
// }
TulisanBergerak(0, nama, 200, kolom);
TulisanBergerak(1, jurusan, 200, kolom);
TulisanBergerak(2, blk, 200, kolom);
TulisanBergerak(3, gelombang, 200, kolom);
delay(1000); // Delay 1 detik sebelum membaca sensor lagi
}
void TulisanBergerak(int row, String message,int delayTime, int kolom) {
for (int i=0; i < kolom; i++) {
message = " " + message; //start awal untuk text lewat dari kanan ke kiri
}
message = message + " "; // end untuk menentukan akhir msg
for (int pos = 0; pos < message.length(); pos++) {
lcd.setCursor(0, row);
lcd.print(message.substring(pos, pos + kolom));//menampilkan text yg diperoleh dari substring
delay(delayTime);
//penjelasan substring :
// pos awal merupakan index pertama untuk memanggil data text dari msg
// dan pos + kolom merupakan index ke dua untuk menentukan berapa panjang text yg di ambil
// dan di tampilkan ke lcd
// kurang lebih e ngunu rek :v
}
}