#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Pin definisi
#define ONE_WIRE_BUS1 15 // Pin untuk sensor DS18B20 pertama
#define ONE_WIRE_BUS2 4 // Pin untuk sensor DS18B20 kedua
#define POT_PIN1 34 // Pin untuk potensiometer pertama (ADC)
#define POT_PIN2 35 // Pin untuk potensiometer kedua (ADC)
// Inisialisasi library OneWire dan DallasTemperature
OneWire oneWire1(ONE_WIRE_BUS1);
OneWire oneWire2(ONE_WIRE_BUS2);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti alamat jika diperlukan
// Variabel untuk menyimpan nilai potensiometer dan suhu
int volumeLevel1 = 0;
int volumeLevel2 = 0;
float temperature1 = 0;
float temperature2 = 0;
// Variabel waktu untuk non-blocking
unsigned long previousMillisPot = 0;
unsigned long previousMillisTemp = 0;
unsigned long previousMillisLCD = 0;
const unsigned long intervalPot = 100; // Interval pembaruan potensiometer (ms)
const unsigned long intervalTemp = 1000; // Interval pembaruan suhu (ms)
const unsigned long intervalLCD = 500; // Interval pembaruan LCD (ms)
void setup() {
Serial.begin(115200);
Serial.println("Program dimulai...");
// Inisialisasi sensor suhu
sensors1.begin();
sensors2.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" DIGITAL AUDIO ");
lcd.setCursor(0, 1);
lcd.print(" MULTI CONTROL ");
delay(3000);
lcd.setCursor(0, 0);
lcd.print(" SELAMAT DATANG ");
lcd.setCursor(0, 1);
lcd.print(" WARUNG BAGUS ");
delay(3000);
lcd.clear();
}
void loop() {
unsigned long currentMillis = millis();
// Membaca potensiometer setiap intervalPot
if (currentMillis - previousMillisPot >= intervalPot) {
previousMillisPot = currentMillis;
updateVolume();
}
// Membaca suhu setiap intervalTemp
if (currentMillis - previousMillisTemp >= intervalTemp) {
previousMillisTemp = currentMillis;
updateTemperature();
}
// Memperbarui tampilan LCD setiap intervalLCD
if (currentMillis - previousMillisLCD >= intervalLCD) {
previousMillisLCD = currentMillis;
updateLCD();
}
}
// Fungsi untuk membaca potensiometer
void updateVolume() {
int potValue1 = analogRead(POT_PIN1);
int potValue2 = analogRead(POT_PIN2);
volumeLevel1 = map(potValue1, 0, 4095, 0, 100);
volumeLevel2 = map(potValue2, 0, 4095, 0, 100);
// Debugging
Serial.print("Potensiometer 1: ");
Serial.print(volumeLevel1);
Serial.print("%, Potensiometer 2: ");
Serial.println(volumeLevel2);
}
// Fungsi untuk membaca suhu
void updateTemperature() {
sensors1.requestTemperatures();
sensors2.requestTemperatures();
temperature1 = sensors1.getTempCByIndex(0);
temperature2 = sensors2.getTempCByIndex(0);
// Debugging
Serial.print("Suhu 1: ");
Serial.print(temperature1);
Serial.print("C, Suhu 2: ");
Serial.println(temperature2);
}
// Fungsi untuk memperbarui tampilan LCD
void updateLCD() {
lcd.setCursor(0, 0);
lcd.print("CH A:");
lcd.print(volumeLevel1);
lcd.print("%");
lcd.setCursor(10, 0);
lcd.print(temperature1, 1);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("CH B:");
lcd.print(volumeLevel2);
lcd.print("%");
lcd.setCursor(10, 1);
lcd.print(temperature2, 1);
lcd.print("C ");
}