#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Definisikan lebar layar OLED
#define SCREEN_HEIGHT 64 // Definisikan tinggi layar OLED
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int phPin = A0; // Pin analog untuk sensor pH
const int buzzerPin = 8; // Pin digital untuk buzzer
const int greenLedPin = 10; // Pin digital untuk LED hijau
const int redLedPin = 11; // Pin digital untuk LED merah
const int numReadings = 10; // Jumlah pembacaan untuk averaging
int readings[numReadings]; // Array untuk menyimpan pembacaan
int index = 0; // Indeks pembacaan saat ini
int total = 0; // Total pembacaan
float safePhLow = 6.5; // Nilai pH terlalu asam
float safePhHigh = 9.0; // Nilai pH terlalu basa
void setup() {
// Inisialisasi display OLED dengan alamat I2C 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display(); // Tampilkan splash screen (default: logo Adafruit)
delay(2000); // Tunda 2 detik
// Bersihkan display
display.clearDisplay();
display.display();
// Inisialisasi pembacaan sensor pH
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
readings[thisReading] = 0;
}
// Inisialisasi pin buzzer
pinMode(buzzerPin, OUTPUT);
// Inisialisasi pin LED hijau dan merah
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
}
void loop() {
total = total - readings[index]; // Kurangi nilai pembacaan yang akan di-overwrite
readings[index] = analogRead(phPin); // Baca nilai sensor pH
total = total + readings[index]; // Tambahkan nilai baru ke total
index = (index + 1) % numReadings; // Pindah ke indeks berikutnya, dengan pembulatan jika mencapai batas
int average = total / numReadings; // Hitung rata-rata pembacaan
float phValue = map(average, 0, 1023, 0, 14); // Konversi nilai sensor pH ke nilai pH sebenarnya
// Tampilkan informasi pH pada OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(" pH METER ");
display.setCursor(0, 12);
display.print(" MONITORING pH AIR ");
display.setCursor(0, 28);
display.print("Nilai pH: ");
display.print(phValue);
// Peringatkan jika nilai pH melewati batas aman
if (phValue < safePhLow) {
display.setCursor(0, 38);
display.print("Status: Terlalu Asam");
display.setCursor(0, 48);
display.print("Berbahaya Untuk Tubuh");
// Bunyikan buzzer
tone(buzzerPin, 1000); // Bunyikan buzzer dengan frekuensi 1000 Hz
// Nyalakan LED merah dan matikan LED hijau
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
} else if (phValue >= safePhLow && phValue <= safePhHigh) {
noTone(buzzerPin); // Matikan bunyi jika nilai pH dalam kisaran aman
// Nyalakan LED hijau dan matikan LED merah
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
// Tampilkan status aman
display.setCursor(0, 38);
display.print("Status: Aman");
} else {
display.setCursor(0, 38);
display.print("Status: Terlalu Basa");
display.setCursor(0, 48);
display.print("Berbahaya Untuk Tubuh");
// Bunyikan buzzer
tone(buzzerPin, 1000); // Bunyikan buzzer dengan frekuensi 1000 Hz
// Nyalakan LED merah dan matikan LED hijau
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
}
display.display(); // Tampilkan tampilan yang telah diperbarui
delay(100); // Delay untuk stabilitas tampilan
}