SD Kart Modülü İle LCD Ekran Çakışması

enDestan

Üye
Katılım
2 Haz 2018
Mesajlar
12
Puanları
1
Yaş
25
Merhaba ben bir akıllı ev sistemi yapmayı düşünüyorum ve bunun için kolları sıvadım. Şu ana kadar yazdığım kodlara birde sd kartı dahil edip data logger yapmak istedim ancak data logger yazdırdığım kod dahil olduktan sonra ekrana da sd karta yazılan veri yazılıyor ancak benim ekrana yazdırdığım veri farlı. Ben cs pininin ne işe yaradığını bilmediğimden rastgele taktım acaba sorun buradan kaynaklanıyor olabilir mi? Yardım ederseniz sevinirim.
Kod:
#include <LiquidCrystal.h>
#include <dht11.h>
#include <SPI.h>
#include <SD.h>

#define CSpin 24
#define DHT11PIN 22

File dosya;
dht11 DHT11;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

String sicaklikMenu;
String sicaklik;
String nem;

unsigned long gazBaslangic;
unsigned long gazBitis;
int gazOkuma;
int esikGaz;
String gazMenu;
String hareketMenu;
int btn , btn2;

unsigned long isikBaslangic;
unsigned long isikBitis;
int isikOkuma;
int esikIsik = 200;
int pirDurum = 0;
String isikMenu;

int count = 1;
#define button 13
#define button2 10

unsigned long eski_zaman;
const long yazma_suresi = 60000;

int isik(int sure, int cikisPin, int girisPin, int pir){
  unsigned long zaman = millis();

  isikOkuma = analogRead(girisPin);
  pirDurum = digitalRead(pir);
  delay(10);
  Serial.print("Okuma: ");Serial.println(isikOkuma);
  if(isikOkuma < esikIsik){
    if (pirDurum == HIGH){
    isikBaslangic = zaman;
    isikBitis = zaman + sure;
    }
  }
  /*Serial.print("Isik Baslangic: ");Serial.println(isikBaslangic);
  Serial.print("Isik Bitis: ");Serial.println(isikBitis);*/

  if (isikBitis > zaman){
  digitalWrite(cikisPin, LOW);
  delay(1);
  //Serial.println("ROLE");
  }
  if (isikBitis < zaman)
  digitalWrite(cikisPin, HIGH);

  //delay(500);
 /* lcd.setCursor(0, 1);lcd.print("EsikIsik");
  lcd.setCursor(9, 1);lcd.print(esikIsik);
  lcd.setCursor(13, 1);lcd.print(isikOkuma);*/
  isikMenu = ("EsikIsik " + String(esikIsik) + " " + String(isikOkuma));
  hareketMenu = ("Hareket: " + String(pirDurum));
  //return isikOkuma;
 
}


int gaz (int sure , int cikisPin , int girisPin , int buton){
  int btnDurum;
   btnDurum = digitalRead(buton);
   if (btnDurum == HIGH)
   {
    esikGaz +=10;
    if (btnDurum == HIGH)
    {   
      while(1)
      {
        btnDurum = digitalRead(buton);
        if (btnDurum == LOW)
          break;
      }
    }
   }
  
  unsigned long zaman = millis();

 

  //Serial.print("Esik Gaz: ");Serial.println(esikGaz);
  gazOkuma = analogRead(girisPin);//gaz sensöründen değerleri alıp "gazOkuma" değişkenine atıyoruz
  if (gazOkuma > esikGaz)//eğer "gazOkuma" "esikGaz" dan büyük ise
  {
    gazBaslangic = zaman;//"gazBaslangic" değişkenine şuanki zamanı kaydediyoruz
    gazBitis = zaman + sure;//"gazBitis" değişkenine şuanki zaman + ne kadar süre ledi yakmak istiyorsak bunu milisaniye cinsinden yazıyoruz
    //+1000 demek 1 saniye led yakmak için 1000 değerinin siz kendinize göre belirleyebilirsiniz
    /*Serial.print("Gaz baslangic: ");
    Serial.println(gazBaslangic);
    Serial.print("Gaz bitis: ");
    Serial.println(gazBitis);*/
    //Serial.print("Gaz değeri");
    //Serial.println(gazOkuma);
    
  }

  if (gazBitis > zaman)//eğer "gazBitis" "zaman" dan büyük ise
    digitalWrite(cikisPin, HIGH);//led2 yi yak
  if (gazBitis < zaman)//eğer "gazBitis" "zaman" dan küçük ise
    digitalWrite(cikisPin, LOW);//led2 yi söndür

    //Serial.println(sayac);
   /* Serial.print("esikgaz: ");Serial.println(esikGaz);
  Serial.print("Okunan değer: ");Serial.println(gazOkuma);
  lcd.home();lcd.print("EsikGaz");
  lcd.setCursor(8, 0);lcd.print(esikGaz);
  lcd.setCursor(12, 0);lcd.print(gazOkuma);
  //delay(250);*/
  gazMenu = ("EsikGaz " + String(esikGaz) + " " + String(gazOkuma));
  //return gazOkuma;
}

void setup() {
  pinMode(10, INPUT);
  pinMode(13, INPUT);
  lcd.begin(16, 2);
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
  pinMode(6, INPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);
  if (!SD.begin(CSpin)){
    Serial.println("SD Kart yok yada baglanti basarisiz.");
    return;
  }
  Serial.println("SD Kart baglandi");
 
  gazOkuma = analogRead(A0);
  delay(1000);
  int gazOkuma2 = analogRead(A0);
  while(gazOkuma2-gazOkuma >=2 || gazOkuma2-gazOkuma <=-2){
    gazOkuma = analogRead(A0);
    delay(1000);
    //Serial.println(gazOkuma);
    gazOkuma2 = analogRead(A0);
    //Serial.print(gazOkuma);Serial.print("----");Serial.println(gazOkuma2);
  }
  esikGaz = gazOkuma + 10;
  digitalWrite(9, OUTPUT);
  delay(250);
  digitalWrite(9, LOW);
 
}

void loop() {
 
  unsigned long simdiki_zaman = millis();
  gaz(2000 , 9 , A0, 6);//bekleme süresi, çıkış pini, giriş pini, buton pini
  isik(10000, 7, A1, 8);//bekleme süresi, çıkış pini, ldr giriş pini, pır giriş pini
  int chk = DHT11.read(DHT11PIN);
  dosya = (SD.open("Log.txt", FILE_WRITE));
  if (SD.exists("Log.txt")){
    if(simdiki_zaman - eski_zaman >= yazma_suresi){
      eski_zaman = simdiki_zaman;
      int isikDegeri = analogRead(A1);
      int gazDegeri = analogRead(A0);
      //dosya.print("Işık: ");dosya.println(isik(10000, 7, A1, 8));
      dosya.print("Işık: ");dosya.println(isikDegeri);
      dosya.print("Gaz: ");dosya.println(gazDegeri);
      //dosya.print("Gaz: ");dosya.println(gaz(2000, 9, A0, 6));
      dosya.print("Sicaklik: ");dosya.println(DHT11.temperature);
      dosya.println("--------------------");
      dosya.close();
    }
  }
  if (count == 1){
    btn = digitalRead(button);
    btn2 = digitalRead(button2);
    lcd.clear();
    lcd.home();
    lcd.print(gazMenu);
    lcd.setCursor(0,1);
    lcd.print(isikMenu);
    if (btn == HIGH){
      count = 2;
      if (btn == HIGH)
    {   
      while(1)
      {
        btn = digitalRead(button);
        if (btn == LOW)
          break;
      }
    }
    }
  }
    if(count == 2){
      btn = digitalRead(button);
      btn2 = digitalRead(button2);
      lcd.clear();
      lcd.home();
      lcd.print(isikMenu);
      lcd.setCursor(0,1);
      lcd.print(hareketMenu);
      if (btn == HIGH){
        count = 3;
        if (btn == HIGH){
          while(1){
            btn = digitalRead(button);
            if(btn == LOW)
            break;
          }
        }
      }
      if (btn2 == HIGH){
      count = 1;
      if (btn2 == HIGH)
    {   
      while(1)
      {
        btn2 = digitalRead(button2);
        if (btn2 == LOW)
          break;
      }
    }
    }
    }
    if (count == 3){
      //sicaklik = ((String)DHT11.temperature);
      //nem = ((String)DHT11.humidity);
      //sicaklikMenu = ("ScklkNem " + (String)DHT11.temperature);
      btn = digitalRead(button);
      btn2 = digitalRead(button2);
      lcd.clear();
      lcd.home();
      lcd.print(hareketMenu);
      lcd.setCursor(0,1);
      lcd.print(DHT11.temperature);
            if (btn2 == HIGH){
      count = 2;
      if (btn2 == HIGH)
    {   
      while(1)
      {
        btn2 = digitalRead(button2);
        if (btn2 == LOW)
          break;
      }
    }
    }
    }
}
 
Eyvallah ustam Allah razı olsun çok işimi gördü. Konu anlaşılmıştır kilitleyebilirsiniz. Linke girmek istemeyenler için buradan yazayım;
Cs pini hangi slave moddaki cihaza veri aktarabileceğimizi belirleyen bir pinmiş. Hangisine veri aktaracaksak onun cs pinin bağlı olduğu pini "HIGH" veriyoruz ve aktardığımız bilgi o cihaza gidiyor ve özel bir pini yokmuş.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,831
Kullanıcılar
449,595
Son üye
Ferden1011

Yeni konular

Geri
Üst