#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET, 4, 5);
const int potentiometerPin1 = A0; // Potensiometer pertama untuk mengontrol suhu
const int potentiometerPin2 = A1; // Potensiometer kedua untuk mengontrol interval
const int ledPin = 8; // Nomor pin LED pada Arduino (sesuaikan dengan kebutuhan Anda)
float temperature = 0.0;
float voltage = 0.0;
int ledState = LOW; // State awal LED
unsigned long previousMillis = 0;
long interval = 100; // Interval LED berkedip (1 detik)
void setup() {
Wire.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.display();
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // Inisialisasi pin LED sebagai OUTPUT
}
void loop() {
int potValue1 = analogRead(potentiometerPin1); // Baca nilai potensiometer pertama
temperature = map(potValue1, 0, 1023, 0, 1000); // Hitung nilai suhu
int potValue2 = analogRead(potentiometerPin2); // Baca nilai potensiometer kedua
interval = map(potValue2, 0, 1023, 100, 2000); // Hitung interval berkedip
int potValue3 = analogRead(A2); // Baca nilai potensiometer ketiga (opsional) untuk mengontrol voltase
voltage = map(potValue3, 0, 1023, 0, 24); // Hitung voltase
// Debug info
Serial.print(F("Suhu:"));
Serial.print(temperature);
Serial.println(F("`C"));
Serial.print(F("Tegangan: "));
Serial.print(voltage, 2); // Tampilkan 2 desimal untuk voltase
Serial.println(F(" V"));
Serial.print(F("Interval: "));
Serial.print(interval);
Serial.println(F(" ms"));
// Kontrol LED untuk berkedip sesuai dengan interval yang diatur
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
voltage = map(potValue3, 0, 1023, 0, 24); // Menetapkan voltase sesuai dengan potensiometer
} else {
ledState = LOW;
voltage = 0; // Menetapkan voltase ke 0 saat LED mati
}
}
digitalWrite(ledPin, ledState);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
char temperatureStr[5];
dtostrf(temperature, 4, 0, temperatureStr);
display.print("Suhu:");
display.print(temperatureStr);
display.print("`C");
display.setTextSize(2);
display.setCursor(0, 30);
char voltageStr[6];
dtostrf(voltage, 4, 2, voltageStr); // Tampilkan 2 desimal untuk voltase
display.print(F("Teg: "));
display.print(voltageStr);
display.print(F(" V"));
display.setTextSize(2);
display.setCursor(0, 60);
char intervalStr[6];
dtostrf(interval, 4, 0, intervalStr);
display.display();
}