#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_ADDRESS);
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int ldrPin = A0;
const int trigPin = 11;
const int echoPin = 12;
bool scrollingDone = false;
void drawDHT(float h, float t) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Temp & Humidity");
display.setCursor(0, 10);
display.print("Temp: "); display.print(t, 1); display.print(" *C");
display.setCursor(0, 20);
display.print("Humidity: "); display.print(h, 1); display.print(" %");
display.display();
}
void drawLDR(float voltage) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("LDR Voltage");
display.setCursor(0, 10);
display.print(voltage, 2); display.print(" V");
display.display();
}
void drawUltrasonic(float distance_cm, float distance_in) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Ultrasonic Sensor");
display.setCursor(0, 10);
display.print("Distance: ");
display.print(distance_cm, 1); display.print(" cm");
display.setCursor(0, 20);
display.print(distance_in, 1); display.print(" in");
display.display();
}
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Scrolling message at the beginning
unsigned long startTime = millis();
while (millis() - startTime < 3000) {
for (int i = -128; i < SCREEN_WIDTH; i++) {
display.clearDisplay();
display.setCursor(i, 0);
display.print("Sensor Kelompok B4:");
display.display();
delay(30);
}
}
scrollingDone = true; // Set the flag to indicate scrolling is done
dht.begin();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
float h, t, voltage, distance_cm, distance_in, temperatureC;
int lm35Value;
if (scrollingDone) {
// Sensor 1: Temperature and Humidity using DHT22
h = dht.readHumidity();
t = dht.readTemperature();
drawDHT(h, t);
delay(2000);
// Sensor 2: LDR Voltage
int sensorValue = analogRead(ldrPin);
voltage = sensorValue * (5.0 / 1023.0);
drawLDR(voltage);
delay(2000);
// Sensor 3: Ultrasonic Distance Sensor
float duration;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance_cm = (duration / 5) / 30 * 2;
distance_in = (duration / 5) / 73.914 * 2;
drawUltrasonic(distance_cm, distance_in);
delay(2000);
}
}