enDestan
Üye
- Katılım
- 2 Haz 2018
- Mesajlar
- 12
- Puanları
- 1
- Yaş
- 26
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;
}
}
}
}
}