#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <ESP32Servo.h>
#include <OneWire.h>
#include "DHTesp.h"
#include <DallasTemperature.h>
#define SCREEN_WIDTH 128 // Lebar layar OLED, dalam piksel
#define SCREEN_HEIGHT 64 // Tinggi layar OLED, dalam piksel
#define RELAY_PIN 18
// Deklarasi untuk layar SSD1306 yang terhubung melalui I2C (pin SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// #define ONE_WIRE_BUS 13 // Ganti dengan pin GPIO yang Anda gunakan untuk DS18B20
// OneWire oneWire(ONE_WIRE_BUS);
// DallasTemperature sensors(&oneWire);
#define DHT_Pin 13
DHTesp dht;
float lastTemperatureC = 0; // Suhu terakhir yang ditampilkan
const int potPin = 12; // Ubah pin sesuai dengan yang Anda gunakan
const int relayPin = 18;
// int ledPin = 12;
int servoPin = 15;
int angle = 0;
Servo myservo;
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(18, LOW);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Gagal mengalokasikan SSD1306"));
for (;;);
}
delay(1000);
display.clearDisplay();
display.setTextColor(WHITE);
// Inisialisasi sensor suhu
// sensors.begin();
dht.setup(DHT_Pin, DHTesp::DHT22);
// Atur pin potensiometer sebagai input
pinMode(potPin, INPUT);
pinMode(relayPin, OUTPUT);
myservo.attach(servoPin);
// pinMode(ledPin, OUTPUT);
}
void loop() {
// Baca nilai analog dari potensiometer
int potValue = analogRead(potPin);
// // Konversi nilai analog ke persentase (0-100%)
// float percentage = (potValue / 4095.0) * 100;
float angle = (potValue / 4095.0) * 180;
float percentage = (angle / 180) * 100;
myservo.write(angle);
// int brightness = map(potValue, 0, 4095, 0, 255);
int brightness = (potValue / 4095.0) * 255;
// analogWrite(ledPin, brightness);
// Tampilkan nilai potensiometer dalam bentuk persentase di LCD
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Potensiometer:");
// lcd.setCursor(0, 1);
// lcd.print(potValue);
// lcd.print("Angle: ");
// lcd.print(angle);
// lcd.setCursor(0, 1);
// lcd.print("Persentase: ");
// lcd.print(percentage, 1); // Menampilkan persentase dengan 1 digit desimal
// // Tampilkan juga nilai persentase di Serial Monitor
Serial.print("Nilai Potensiometer: ");
Serial.println(potValue);
// Serial.print("Angle: ");
// Serial.println(angle);
Serial.print("Persentase: ");
Serial.println(percentage, 1); // Menampilkan persentase dengan 1 digit desimal
// if(percentage > 60){
// digitalWrite(relayPin, HIGH);
// }
// else{
// digitalWrite(relayPin, LOW);
// }
// sensors.requestTemperatures();
// float temperatureC = sensors.getTempCByIndex(0);
TempAndHumidity data = dht.getTempAndHumidity();
float temp = data.temperature;
float Hum = data.humidity;
//Periksa apakah suhu berubah sebelum memperbarui tampilan
// if (temperatureC != lastTemperatureC) {
// lastTemperatureC = temperatureC;
// if (temp != lastTemperatureC) {
// lastTemperatureC = temp;
if(temp > 50){
digitalWrite(18, HIGH);
}
else{
digitalWrite(18, LOW);
}
// Serial.println("Suhu: " + String(temp, 2) + "C");
// Tampilkan suhu pada OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Suhu: ");
display.setTextSize(2);
display.setCursor(0, 10);
// display.print(temperatureC);
display.print(temp);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
}
// }Loading
ssd1306
ssd1306
Loading
ds18b20
ds18b20