#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <HX711.h>
// OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// HX711
#define HX711_DOUT 2
#define HX711_SCK 14
HX711 scale;
// LDR
// Documentation: https://docs.wokwi.com/parts/wokwi-photoresistor-sensor#pin-names$0
#define LDR_ANALOG 18
#define LDR_DIGITAL 19
void setup() {
Serial.begin(115200);
dht.begin();
scale.begin(HX711_DOUT, HX711_SCK);
pinMode(LDR_DIGITAL, INPUT);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("ERROR"));
for (;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("System Ready");
display.display();
delay(1000);
}
void loop() {
// Read sensors
float temp = dht.readTemperature();
float hum = dht.readHumidity();
long weight = 0;
if (scale.is_ready()) {
weight = scale.get_units(5);
}
int ldrValue = analogRead(LDR_ANALOG);
int ldrDigital = digitalRead(LDR_DIGITAL);
// Serial Output
Serial.print("Temp : "); Serial.print(temp); Serial.print(" C | ");
Serial.print("Hum : "); Serial.print(hum); Serial.print(" % | ");
Serial.print("Weight : "); Serial.print(weight); Serial.print(" g | ");
Serial.print("Light : "); Serial.println(ldrValue);
// OLED Output
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.println("ENVIRONMENT:");
display.printf("Temp : %.1f C\n", temp);
display.printf("Hum : %.1f %%\n", hum);
display.println("\nLIGHT:");
display.printf("LDR : %d\n", ldrValue);
display.println("\nWEIGHT :");
display.setTextSize(2);
display.printf("%ld g", weight);
display.display();
delay(2000);
}