#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define SCREEN_WIDTH 128 // OLED display width
#define SCREEN_HEIGHT 64 // OLED display height
#define DHTPIN 6
#define DHTTYPE DHT11
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
unsigned long oncekizmn3 = 0;
const long bekle3 = 2000;
unsigned long oncekizmn = 0; // millis sensor yenilenmesi için
const long bekle = 2000; // millis sensor yenilenmesi için
unsigned long oncekizmn2 = 0; // hata ledi için
const long bekle2 = 1000;
int ledState = LOW;
const int ledPin = 11;
DHT dht(DHTPIN, DHTTYPE);
void setup(){
pinMode( 11, OUTPUT); // sensorden veri okunmuyor hatası ışığı
pinMode( 8, OUTPUT); // kırmızı led çıkış//hava cok sicak gostergesi
pinMode( 9, OUTPUT); // yesil led cıkıs//hava normal gosterge
pinMode( 10, OUTPUT); // mavi led cıkıs//hava soguk gosterge
pinMode( 2, OUTPUT); // fan çıkışı
Wire.begin();
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay(); // ekranı temizler
display.display();
}
void loop(){
a();
}
void a(){
float t = dht.readTemperature(); // sıcaklık Celcius
int sicaklik = dht.readTemperature(); // if yapısındaki koşul için
if( sicaklik >= 27) { // 27 ve ustu deger için fan calişsın
if(sicaklik >25) { // 25 İN ALTINA DUSENE KADAR CALİŞCAK
digitalWrite(2, HIGH);
} else { digitalWrite(2, LOW); }
} else if(sicaklik<=25) { // 25 İN ALTINA İNİNCE DURSUN
digitalWrite ( 2, LOW);
}
int derecee = dht.readTemperature();
if( derecee >= 27) {
digitalWrite(8, HIGH); // hava sıcaksa kırmızı led yanar
} else {
digitalWrite(8, LOW);
}
if( 25 < derecee && derecee < 27) {
digitalWrite(9, HIGH); // normalse hava yesil led
} else {
digitalWrite(9, LOW);
}
if( derecee <= 25 ) {
digitalWrite(10, HIGH); // hava soguksa mavi
} else {
digitalWrite(10, LOW);
}
if ( isnan(t)) {
unsigned long simdikizmn2 = millis(); // hata ledi yanıp soner
if(simdikizmn2 - oncekizmn2 >= bekle2) {
oncekizmn2 = simdikizmn2;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
// sensorden veri alınmaz ise EKRANA uyarı verir;
display.clearDisplay(); // ekranı temizler
display.setTextSize(1); // yazı tipi boyutu
display.setCursor(22,20); // yazının matematiksel konumu
display.print(" Sensorden");
display.setCursor(34,35); // yazının matematiksel konumu
display.print(" Veri");
display.setCursor(5,50);
display.print(" Okunamiyor!");
display.display();
return;
} else {
digitalWrite(11, LOW); //sensor hatası yoksa hata ledi yanmasın
}
//// *** ekrana sıcaklıgı ve grafik cercevesini yazdıran kısım ***
display.clearDisplay(); // ekranı temizler
display.setTextColor(WHITE); // Yazının rengi.
display.setTextSize(1); // yazı tipi boyutu
display.setCursor(0,3);
display.print(" SICAKLIK: ");
display.print(t);
display.println(" C");
display.drawLine(0,16,128,16,WHITE);
display.drawLine(0,63,128,63,WHITE);
//////////// **** ekrandaki grafik çerçevesinin içine grafik yazdıran kısım ****
for( int i=0; i<128; i) {
unsigned long simdikizmn3 = millis();
if(simdikizmn3 - oncekizmn3 >= bekle3) {
int sicaklik = dht.readTemperature();
sicaklik = map(sicaklik,15,38,60,20);
display.drawLine(i+1,sicaklik,i+10,sicaklik,WHITE); //çizgi çizme
display.display();
i = i+10;
oncekizmn3 = simdikizmn3;}
}
unsigned long simdikizmn = millis(); // millis sensor yenilenmesi için
if(simdikizmn - oncekizmn >= bekle) { // millis sensor yenilenmesi için
oncekizmn = simdikizmn;} // Veri yenileme suresi // millis sensor yenilenmesi için
//sensor yavaş bir sensor oldugu için sureyi 2sn tuttuk // millis sensor yenilenmesi için
}