Soru & Cevap

kodlarım düzgün çalışmıyo ...

02.09.2018 - 03:53

Bi proje yapmaya çalışmaya çalışıyom ama kodlar çalışması gerektiği gibi çalışmıyolar. Yardım eder misiniz?

Önce projeyi anlatayım:

bi kuluçka makinası. sıcaklığın 37-38 derece arasında olması lazım

ama sorun şu (sensör olarak dht11 var) sıcaklık yükselince röle kartına bağlı olan ısıtıcı lambayı kapatmıyo. tahminimce if kodunun koşulundaki dht11den aldığımız sıcaklık bilgisini öğrendiğimiz kod [(float)DHT11_sensor.temperature, 2] if koduyla uyumlu değil gibi yani demek isyediğim if kodunda şu var:

if ((float)DHT11_sensor.temperature, 2<=37)

sanırım burdaki 37 ile onun okuduğu kod uyuşmuyo. yani arada virgül mü olmalı? 0.37 gibi bi değer mi yazmalıyım?

Kodlar:

#include <dht11.h>
int DHT11_pin = 9;
dht11 DHT11_sensor;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 8, 7, 6, 5);
void setup()
{
  int lamba = 6;
  int led = 13;
  int buzzer = 7;
  byte o[8] =
  {
    0b01010,
    0b00000,
    0b01110,
    0b10001,
    0b10001,
    0b10001,
    0b01110,
    0b00000
  };
  byte i[8] =
  {
    0b00000,
    0b00000,
    0b00100,
    0b00100,
    0b00100,
    0b00100,
    0b00100,
    0b00000
  };
  byte c[8] =
  {
    0b01111,
    0b10000,
    0b10000,
    0b10000,
    0b10000,
    0b01111,
    0b00000,
    0b00110
  };
  byte derece[8] =
  {
    0b00110,
    0b01001,
    0b01001,
    0b00110,
    0b00000,
    0b00000,
    0b00000,
    0b00000
  };
  byte yuzde[8] = {
    0b00000,
    0b00000,
    0b10001,
    0b00010,
    0b00100,
    0b01000,
    0b10001,
    0b00000
  };
  byte civciv[8] =
  {
    0b00000,
    0b0100,
    0b01110,
    0b11101,
    0b11011,
    0b10111,
    0b01110,
    0b00000
  };

  pinMode(lamba, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.blink();
  lcd.home();
  lcd.print("CivCivMaker 4.0");
  lcd.noBlink();
  delay(2000);
  lcd.blink();
  lcd.setCursor(6, 1);
  lcd.print("SMG");
  lcd.noBlink();
  lcd.setCursor(12, 1);
  lcd.write(6);
  delay(3000);
  digitalWrite(led, HIGH);
  digitalWrite(buzzer, HIGH);
  digitalWrite(lamba, LOW);
  delay(1500);
  digitalWrite(led, LOW);
  digitalWrite(buzzer, LOW);
  digitalWrite(lamba, HIGH);
  delay(1000);
  lcd.createChar(1, o);
  lcd.createChar(2, i);
  lcd.createChar(3, c);
  lcd.createChar(4, derece);
  lcd.createChar(5, yuzde);
  lcd.createChar(6, civciv);
}
void loop()
{
  int chk = DHT11_sensor.read(DHT11_pin);

  if (((float)DHT11_sensor.temperature, 2) >= 39) {// else'den bu if koduna geçiş yapmıyo
    int chk = DHT11_sensor.read(DHT11_pin);
    digitalWrite(6, HIGH);// röle kartı ters çalıştığı için hıgh olunca lamba kapanıyo
    lcd.clear();///////////////////////////////
    lcd.setCursor(4,0);///////////////////////
    lcd.print("S cakl k:");
    lcd.setCursor(5, 0);
    lcd.write(2);
    lcd.setCursor(10, 0);
    lcd.write(2);///                lcd kodlarında sorun yok
    lcd.setCursor(10, 1);
    lcd.write(4);
    lcd.setCursor(11, 1);
    lcd.write("C");
    lcd.setCursor(5, 1);////////////////////////
    lcd.print(((float)DHT11_sensor.temperature, 2));
    delay(3000);
    lcd.clear();
    lcd.setCursor(6,0);
    lcd.print("Nem:");
    lcd.setCursor(5, 1);
    lcd.write(5);
    lcd.setCursor(6, 1);
    lcd.print((float)DHT11_sensor.humidity, 2);
    delay(3000);    
  }
  else {
    int chk = DHT11_sensor.read(DHT11_pin);
    digitalWrite(6, LOW);///// ısıtıcı lamba açık
    lcd.clear();
    lcd.setCursor(4,0);
    lcd.print("S cakl k:");
    lcd.setCursor(5, 0);
    lcd.write(2);
    lcd.setCursor(10, 0);
    lcd.write(2);
    lcd.setCursor(5, 1);
    lcd.print(((float)DHT11_sensor.temperature, 2));
    lcd.setCursor(10, 1);
    lcd.write(4);
    lcd.setCursor(11, 1);
    lcd.write("C");
    delay(3000);
    lcd.clear();
    lcd.setCursor(6,0);
    lcd.print("Nem:");
    lcd.setCursor(5, 1);
    lcd.write(5);
    lcd.setCursor(6, 1);
    lcd.print((float)DHT11_sensor.humidity, 2);
    delay(3000);  
  }
}

 

32 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-87289-1569234090.png
yakupgovler
28.09.2019 - 12:37

>= 39

ifadesini

>= 39.0 olarak değiştirip, dener misiniz?

picture-158072-1530701953.jpg
TGUNEYSU
03.09.2018 - 12:05

Derece için bir float değişken yapın:

float t;

Sensörü okuyun ve değeri buna atayın:

t = DHT11_sensor.temperature;

Sonra karşılaştırın:

if ( t > 37.0) {   // 37 integer demektir, yanlış yapar. 37.0 float karşılaştırma yapar - doğru sonuç

}

Yazmak için:

Serial.print ( "Sıcaklık: ");

Serial.println ( t );  // float' lar 2 onda pozisyonu ile yazılır