#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Pin untuk sensor DS18B20
#define ONE_WIRE_BUS 2
// Inisialisasi OneWire dan DallasTemperature
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Pin untuk push button
#define BUTTON1_PIN 6
#define BUTTON2_PIN 7
#define BUTTON3_PIN 8
#define BUTTON4_PIN 9
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel global
float temperatureData[100]; // Array untuk menyimpan nilai pengukuran
int dataCount = 0; // Jumlah data yang tercatat
float averageTemp = 0.0; // Rata-rata suhu
float massaJenis = 0.0; // Nilai massa jenis
bool showMassaJenis = false; // Flag untuk menampilkan massa jenis
bool startMeasurement = false; // Flag untuk memulai pengukuran
int button1=0;
int button2=0;
int button3=0;
int button4=0;
void setup() {
// Inisialisasi pin button
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(BUTTON3_PIN, INPUT_PULLUP);
pinMode(BUTTON4_PIN, INPUT_PULLUP);
// Inisialisasi Serial dan LCD
Serial.begin(9600);
lcd.begin(16, 2); // Menyediakan jumlah kolom dan baris LCD
lcd.backlight();
// Inisialisasi sensor suhu
sensors.begin();
// Pesan selamat datang
lcd.setCursor(0, 0);
lcd.print("Silahkan tekan");
lcd.setCursor(0, 1);
lcd.print("tombol 1");
}
void loop() {
// Tunggu hingga tombol 1 ditekan untuk memulai pengukuran
if (!startMeasurement) {
if (digitalRead(BUTTON1_PIN) == LOW) {
startMeasurement = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pengukuran mulai");
delay(1000);
lcd.clear();
}
}
// Tampilkan massa jenis jika flag showMassaJenis aktif
if (showMassaJenis) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Massa Jenis: ");
lcd.setCursor(0, 1); // Pindah ke baris kedua
lcd.print(massaJenis, 2); // Menampilkan massa jenis dengan 2 digit di belakang koma
delay(1000);
showMassaJenis = false; // Reset flag setelah menampilkan massa jenis
return; // Tidak kembali ke loop utama
}
// Baca suhu dari sensor DS18B20
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// Periksa apakah Button 1 ditekan
if (digitalRead(BUTTON1_PIN) == LOW) {
button1=1;
button2=0;
button3=0;
button4=0;
dataCount = 0; // Reset jumlah data1
showMassaJenis = false; // Reset flag
startMeasurement = false; // Kembali ke mode awal
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pengukuran reset");
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Silahkan tekan");
lcd.setCursor(0, 1);
lcd.print("tombol 1");
}
// Periksa apakah Button 2 ditekan
if (digitalRead(BUTTON2_PIN) == LOW) {
button1=0;
button2=1;
button3=0;
button4=0;
if (dataCount < 100) {
temperatureData[dataCount] = tempC;
dataCount++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Data disimpan");
lcd.setCursor(0, 1);
lcd.print("Total: ");
lcd.print(dataCount);
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Data penuh");
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
}
}
// Periksa apakah Button 3 ditekan
if (digitalRead(BUTTON3_PIN) == LOW) {
button1=0;
button2=0;
button3=1;
button4=0;
if (dataCount > 0) {
float sumTemp = 0.0;
for (int i = 0; i < dataCount; i++) {
sumTemp += temperatureData[i];
}
averageTemp = sumTemp / dataCount;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("rata-rata suhu: ");
lcd.setCursor(0, 1);
lcd.print(averageTemp, 2); // Menampilkan suhu rata-rata dengan 2 digit di belakang koma
lcd.print((char)223);
lcd.print("C");
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
return; // Tidak kembali ke loop utama
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak ada data");
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
}
}
// Periksa apakah Button 4 ditekan
if (digitalRead(BUTTON4_PIN) == LOW) {
button1=0;
button2=0;
button3=0;
button4=1;
if (dataCount > 0) {
// Hitung massa jenis menggunakan persamaan yang diberikan
massaJenis = 999.8395639 +
(0.06798299989 * averageTemp) -
(0.009106025564 * pow(averageTemp, 2)) +
(0.0001005272999 * pow(averageTemp, 3)) -
(0.000001126713526 * pow(averageTemp, 4)) +
(0.000000006591795606 * pow(averageTemp, 5));
showMassaJenis = true; // Set flag untuk menampilkan massa jenis
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Massa Jenis: ");
lcd.setCursor(0, 1); // Pindah ke baris kedua
lcd.print(massaJenis, 4); // Menampilkan massa jenis dengan 4 digit di belakang koma
lcd.print(" kg/m^3");
delay(100000); // Tunggu sebentar sebelum kembali ke loop utama
return; // Tidak kembali ke loop utama
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak ada data");
delay(1000); // Tunggu sebentar sebelum kembali ke loop utama
}
}
if (button3==0 || button4==0) {
if(button1==1){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(tempC, 2); // Menampilkan suhu saat ini dengan 2 digit di belakang koma
lcd.print((char)223);
lcd.print("C");
delay(500); // Pembaruan setiap setengah detik
}
else if (button2==1){
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(tempC, 2); // Menampilkan suhu saat ini dengan 2 digit di belakang koma
lcd.print((char)223);
lcd.print("C");
delay(500); // Pembaruan setiap setengah detik
}
// Tampilkan suhu saat ini di LCD
return;
}
}