Merhaba, DHT22 sıcaklık sensörüyle hava sıcaklığını 1 saate bir alıp ona gerekli işlemleri yapmak istiyorum, yani Sıcaklık değerini saate 1 ölçecek, 1 gün için 24 tane aldığı değerin ortalamasını alıcak. Bunun için saate bir verdiği değeri değişkene bağlıyım hesaplama yaptırmalıyım? Bu değişkeni nasıl sağlayabilirim? for veya while döngüsü ile bunu yapabilir miyim? Yardımcı olabilirseniz mutlu olurum, iyi forumlar..
kullanıdığım DHT22 nin örnek kodu: http://pastebin.com/MuHWbT0X
kanki bunu yapmak çok basit ya:) Sıcaklık okuyabildiğini varsayıyorum. Sıcaklık okuma fonksiyonunda “Sicaklikoku();” olarak varsayıyorum. int sicaklikdizi[50]; long suankizaman,oncekizaman=0; int dakikasayac=0,dizisayac=0; int toplam,ortalama; setup() { //gerekli islemleri yap; } loop() { //gerekli islemlerini yap suankizaman =millis(); if(suankizaman - oncekizaman >= 60000) //1 dakikada bir sayac degiskeni artacak { oncekizaman = suankizaman ; sayac++; } if(sayac == 60) //60 dakika = 1 saat { sayac = 0; sicaklikdizi[i] = Sicaklikoku(); //1 saat oldu ve daha onceden olusturdugun bir dizinin ilk elemanına bu sıcaklık degerini atadın. i++; if(i==24) //dizi elemanı 24 oldu yani 24 tane veri okudun(24 saat = 1gün) { i=0; for(int j=0;j<24;j++) //dizi içerisindeki 24 farklı sıcaklık degerını topla { toplam = toplam + sicaklikdizi[j]; } ortalama = toplam /24; //topladıgın 24 degerı 24 e bolup ortalamasını bulmus oluyoruz memset(sicaklikdizi,0x00,24); //ortalmayı alınca dizi elemanlarını sıfırla birsonraki okumaya hazırla } } }
eyvallah süper anlatmışsın, “int sayac,i” eklersek kod sorunsuz gibi görünüyor. deneme atıp sonucu paylaşacağım.
Değerler hassas sıcaklık olduğu için küsaratlı onun için “double sicaklikdizi[50],toplam,ortalama” düzeltmesini yaptım. memset komutundan sonra Serial.printIn(ortalama); yapıp izliyorum, değerler 23, 45, 67 diye üzerine eklene eklene gidiyor sanırım memset sıfırlama yapmıyor. Birde sicaklikdizi[50] derken neden 50 biraz anlasana :ss
@ekmekci
memset sıfırlama yapıyor fakat orada bir eksiklik var. İşlemler bittikten sonra toplam adındaki degiskeni sıfırlamayı unutmuşuz.memsetin hemen altına toplam = 0; ekle düzelir. 50 demek bana hafızandan 50 bytlık bir alan ayır demek. 50 fazla tabiki özellikle seçilmiş bir değer değil. 24 den fazla olan aklıma gelen ilk sayıyı yazdım. fakat tavsiye lazım olan byte +5 koymakta fayda var.