#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LDR_PIN A0
#define R_FIXED 10000
// 8x8 pixel piktogrammalar bitmap shaklida
const unsigned char tempIcon [] PROGMEM = {
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00111100,
0b01111110,
0b01111110,
0b00111100
};
const unsigned char humIcon [] PROGMEM = {
0b00010000,
0b00111000,
0b01111100,
0b11111110,
0b11111110,
0b01111100,
0b00111000,
0b00010000
};
const unsigned char lightIcon [] PROGMEM = {
0b00100100,
0b01001010,
0b01001010,
0b00100100,
0b11111111,
0b00100100,
0b01001010,
0b00000000
};
void setup() {
Serial.begin(9600);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED topilmadi!");
while(1);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// Piktogrammalarni bir martalik ekranga joylash
display.drawBitmap(0,0, tempIcon, 8,8, SSD1306_WHITE);
display.setCursor(12,0);
display.print("Temp (C)");
display.drawBitmap(0,20, humIcon, 8,8, SSD1306_WHITE);
display.setCursor(12,20);
display.print("Humidity (%)");
display.drawBitmap(0,40, lightIcon, 8,8, SSD1306_WHITE);
display.setCursor(12,40);
display.print("Light (lx)");
display.display();
}
float calculateLux(int adcValue) {
float rLDR = R_FIXED * (1023.0 - adcValue) / adcValue;
float lux = 500.0 / pow(rLDR / 1000.0, 1.4);
return lux;
}
void loop() {
int ldrADC = analogRead(LDR_PIN);
float lux = calculateLux(ldrADC);
float temp = dht.readTemperature();
float hum = dht.readHumidity();
Serial.print("Temp: "); Serial.print(temp); Serial.print("C, ");
Serial.print("Hum: "); Serial.print(hum); Serial.print("%, ");
Serial.print("Light: "); Serial.print(lux); Serial.println(" lx");
// OLED da qiymatlarni yangilash (piktogrammalar harakat qilmaydi)
display.fillRect(80,0,48,8, SSD1306_BLACK); // Temp joyi
display.setCursor(80,0);
display.print(temp,1);
display.fillRect(80,20,48,8, SSD1306_BLACK); // Hum joyi
display.setCursor(80,20);
display.print(hum,0);
display.fillRect(80,40,48,8, SSD1306_BLACK); // Light joyi
display.setCursor(80,40);
display.print(lux,1);
display.display();
delay(2000);
}