FakirMaker
Profesyonel Üye
- Katılım
- 5 May 2009
- Mesajlar
- 1,132
- Puanları
- 281
Yani bu kadar basit bir iş ancak bu kadar karmaşıklaştırılabilir. Neden sürekli sensöreden bilgi okuyorsan niye birden fazla zaman sabiti var anlamıyorum. Niye ana döngüyü bırakıp için a() diye bir fonksiyon açıyorsun....?
Bence senin önce c++ dili üzerine basit örneklerle çalışman lazım, olayın mantığından uzaksın şevkin kırılmasın zor değil kolay öğrenilir. Senin kodu düzenlemek sanırım birkaç ayımı alır benim içinde kayboldum gittim. Örnek bi kod yazdım kitaplıklar olmadığı için derlemedim çalıştırmadım yazım yanlışları da olabilir ama mantığı anlarsın en azından.
Hataları yazarsın birlikte debug yaparız hem öğrenmiş olursun hem de senden sonra arayanlar için bir örnek olur.
Bence senin önce c++ dili üzerine basit örneklerle çalışman lazım, olayın mantığından uzaksın şevkin kırılmasın zor değil kolay öğrenilir. Senin kodu düzenlemek sanırım birkaç ayımı alır benim içinde kayboldum gittim. Örnek bi kod yazdım kitaplıklar olmadığı için derlemedim çalıştırmadım yazım yanlışları da olabilir ama mantığı anlarsın en azından.
Kod:
#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
const int sensorPin = 11;
const int kirmiziLed = 8;
const int yesilLed = 9;
const int maviLed = 10;
const int fanPin = 2;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
int period = 1000;
unsigned long time_now = 0;
float sicakSinir = 27.0;
float sogukSinir = 25.0;
String sicaklikDizisi;
void setup() {
pinMode(sensorPin, OUTPUT); // sensorden veri okunmuyor hatası ışığı
pinMode(kirmiziLed, OUTPUT); // kırmızı led çıkış//hava cok sicak gostergesi
pinMode(yesilLed, OUTPUT); // yesil led cıkıs//hava normal gosterge
pinMode(maviLed, OUTPUT); // mavi led cıkıs//hava soguk gosterge
pinMode(fanPin, OUTPUT); // fan çıkışı
Wire.begin();
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay(); // ekranı temizler
display.display();
}
void loop() {
if (millis() >= time_now + period) {
time_now += period;
float sicaklik = dht.readTemperature();
if (isnan(sicaklik)) {
digitalWrite(fanPin, LOW);
digitalWrite(kirmiziLed, HIGH);
digitalWrite(yesilLed, LOW);
digitalWrite(maviLed, LOW);
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();
} else {
if (sicaklik >= sicakSinir) {
digitalWrite(fanPin, HIGH);
digitalWrite(kirmiziLed, LOW);
digitalWrite(yesilLed, LOW);
digitalWrite(maviLed, LOW);
} else if (sicaklik < sicakSinir && sicaklik >= sogukSinir) {
digitalWrite(fanPin, LOW);
digitalWrite(kirmiziLed, LOW);
digitalWrite(yesilLed, HIGH);
digitalWrite(maviLed, LOW);
} else if (sicaklik < sogukSinir) {
digitalWrite(fanPin, LOW);
digitalWrite(kirmiziLed, LOW);
digitalWrite(yesilLed, LOW);
digitalWrite(maviLed, HIGH);
}
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(sicaklik);
display.println(" C");
display.drawLine(0, 16, 128, 16, WHITE);
display.drawLine(0, 63, 128, 63, WHITE);
if (sicaklikDizisi.length() > 126)
sicaklikDizisi.remove(0, 1);
int sicaklikInt = (int)(sicaklik * 100);
sicaklikInt = map(sicaklikInt, 1500, 3800, 60, 20);
sicaklikDizisi += sicaklikInt;
display.fillRect(0,20,127,40,0);
for (int i = 0; i < sicaklikDizisi.length(); i++)
display.drawPixel(i, sicaklikDizisi[i]-48, WHITE);
}
}
}
Hataları yazarsın birlikte debug yaparız hem öğrenmiş olursun hem de senden sonra arayanlar için bir örnek olur.
Son düzenleme: