ds18b20 ısı sensör sıcaklığına göre led yakma

merhaba ben ds18b20 ısı sensörüyle belli aralıklarda led yakmak istiyorum // Arduinoturkiye.com DS18B20 Dijital Sıcaklık Sensörü Kullanımı #include <onewire.h> // OneWire kütüphanesini ekliyoruz.

// Sıcaklık sensörünü bağladığımız dijital pini 2 olarak belirliyoruz.
int DS18S20_Pin = 2;
int led1=8;
int led2=9;
int led3=10;
int led4=11;
int led5=12;
int led6=13;

// Sıcaklık Sensörü Giriş-Çıkışı
OneWire ds(DS18S20_Pin); // 2. Dijital pinde.

void setup(void) {
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
}

void loop(void) {

// temperature değişkenini sıcaklık değerini alma fonksiyonuna bağlıyoruz.
float temperature = getTemp();
// Sensörden gelen sıcaklık değerini Serial monitörde yazdırıyoruz.
Serial.print("Sicaklik: ");
Serial.println(temperature);
// 1 saniye bekliyoruz. Monitörde saniyede 1 sıcaklık değeri yazmaya devam edecek.
delay(1000);

if((temperature >=0) && ( temperature < 20)){
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);} else
if((temperature >=20) && ( temperature < 40)){
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,HIGH);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW); } else
if((temperature >=40) && (temperature < 60)){
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,HIGH);
digitalWrite(led5,HIGH);
digitalWrite(led6,HIGH); }

else

digitalWrite(led1,HIGH);
digitalWrite(led6,HIGH);
}

// Aşağıdaki fonksiyon DS18B20 sıcaklık sensörümüzden gelen verileri
// Celcius cinsinden sıcaklık değerlerine çevirmek için kullanılıyor.
// Herhangi bir değişiklik yapmamız gerekmiyor.

float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println(“CRC is not valid!”);
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print(“Device is not recognized”);
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float tempRead = ((MSB << 8) | LSB); //using two’s compliment
float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

programın bi kısmını internetten buldum bazı kısımlarını ben ekledim program hata vermiyor ama 0-20 arası ilk iki led yanmıyor sadece 5.led yanıyor acaba sorun nerede?</onewire.h>

ledleri yazdığınınz rutini tek başına kontrol edin ayrı bir yerde yazın 0 dan 100 e kadar bir sayaç yapın ledler beklediğiniz gibi çalışıyormu ona bakın. temparature değişkeni float tanımlanmış onu integere çevirip kontrol edin. floatta 22.01 gibi veya 22.00 gibi değer geliyordur ama 22.00 bile gelse onun 22 olarak algılamaz.

teşekkür ederim bitirdim sunumunu yaptıktan sonra paylaşırım başkalarına da lazım olur belki