Proje kodu hk.

breeze17

Yeni Üye
Katılım
3 Temmuz 2023
Mesajlar
9
Merhabalar benim küçük yapmam gereken bir projem var kodu chatgpt de ve biraz bilgim ile yazdırdım fakat bir hata var onu çözemiyorum yardımcı olabilir misiniz

Proje şu şekilde olacak: 128x32 ekrana saat ve dakikayı yazdırıyorum DS1307 den gelen veri ile ve 2 butonumuz var 1.butona basarak Başlangıç saat ayarlama Başlangıç dakika ayarlama var bunları 2.buton ile yapıyorum ardından Bitiş saat ayarlama ve bitiş dakika ayarlama kısmında 2.buton ile yapıyorum ve Ayarladığım başlangıç saati ve dakikası DS1307 den gelen veri ile eşit olunca röle çalışacak Bitiş saati eşit olunca röle kapanacak

Sorun: Saatleri buton ile ayarlamasını yapıyorum ama başlangıç saati gelince röle çalışmıyor yardımcı olabilir misiniz

KOD:
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

int genislik = 128;
int yukseklik = 32;
int adres = 0x3C;
Adafruit_SSD1306 ekran(genislik, yukseklik, &Wire);

RTC_DS1307 rtc;

const int buton1Pin = 2; // 1. buton (Menüye girme ve ayarlamayı onaylama için)
const int buton2Pin = 3; // 2. buton (Saat ve dakika ayarlamak için)
const int rolePin = 7;   // Röle pini

enum Mod { Bekleme, BaslangicSaatAyar, BaslangicDakikaAyar, BitisSaatAyar, BitisDakikaAyar };
Mod mod = Bekleme;

int ayarlananBaslangicSaat = 0;
int ayarlananBaslangicDakika = 0;
int ayarlananBitisSaat = 0;
int ayarlananBitisDakika = 0;

unsigned long butonSonBasmaZamani = 0;
unsigned long debounceSuresi = 200; // Debouncing süresi (milisaniye cinsinden)
bool buton1BirKereBasildi = false;
bool buton2BirKereBasildi = false;

bool roleDurumu = false; // Röle durumu

void setup() {
  ekran.begin(SSD1306_SWITCHCAPVCC, adres);
  ekran.clearDisplay();
  ekran.display();

  rtc.begin();
  //rtc.adjust(DateTime(__DATE__, __TIME__));

  pinMode(buton1Pin, INPUT_PULLUP);
  pinMode(buton2Pin, INPUT_PULLUP);
  pinMode(rolePin, OUTPUT);

  // Başlangıçta röleyi kapalı yapın
  digitalWrite(rolePin, LOW);
}

void loop() {
  ekran.clearDisplay();
  ekran.setTextSize(2);
  ekran.setTextColor(SSD1306_WHITE);

  unsigned long suankiZaman = millis();

  // Röle kontrolü
  if (mod == Bekleme) {
    DateTime now = rtc.now();
    if (now.hour() == ayarlananBaslangicSaat && now.minute() == ayarlananBaslangicDakika) {
      // Başlangıç saati geldi, röle aç
      roleDurumu = true;
      digitalWrite(rolePin, HIGH);
    } else if (now.hour() == ayarlananBitisSaat && now.minute() == ayarlananBitisDakika) {
      // Bitiş saati geldi, röle kapat
      roleDurumu = false;
      digitalWrite(rolePin, LOW);
    }
  }

  // Ekranı güncelle
  ekran.setCursor(0, 0);

  if (mod == Bekleme) {
    DateTime now = rtc.now();
    ekran.print("Saat: ");
    ekran.print(now.hour(), DEC);
    ekran.print(":");
    ekran.print(now.minute(), DEC);
  } else if (mod == BaslangicSaatAyar) {
    ekran.print("Baslangic Saat Ayarla: ");
    ekran.print(ayarlananBaslangicSaat);
  } else if (mod == BaslangicDakikaAyar) {
    ekran.print("Baslangic Dakika Ayarla: ");
    ekran.print(ayarlananBaslangicDakika);
  } else if (mod == BitisSaatAyar) {
    ekran.print("Bitis Saat Ayarla: ");
    ekran.print(ayarlananBitisSaat);
  } else if (mod == BitisDakikaAyar) {
    ekran.print("Bitis Dakika Ayarla: ");
    ekran.print(ayarlananBitisDakika);
  }

  ekran.display();

  // Buton kontrolü
  if (digitalRead(buton1Pin) == LOW && !buton2BirKereBasildi) {
    if (!buton1BirKereBasildi && suankiZaman - butonSonBasmaZamani > debounceSuresi) {
      butonSonBasmaZamani = suankiZaman;
      buton1BirKereBasildi = true;

      if (mod == Bekleme) {
        mod = BaslangicSaatAyar;
      } else if (mod == BaslangicSaatAyar) {
        mod = BaslangicDakikaAyar;
      } else if (mod == BaslangicDakikaAyar) {
        // Başlangıç saat ve dakika ayarı tamamlandı
        ayarlananBaslangicSaat = rtc.now().hour();
        ayarlananBaslangicDakika = rtc.now().minute();
        mod = BitisSaatAyar;
      } else if (mod == BitisSaatAyar) {
        mod = BitisDakikaAyar;
      } else if (mod == BitisDakikaAyar) {
        // Bitiş saat ve dakika ayarı tamamlandı
        ayarlananBitisSaat = rtc.now().hour();
        ayarlananBitisDakika = rtc.now().minute();
        mod = Bekleme;
      }
    }
  } else {
    buton1BirKereBasildi = false;
  }

  if (digitalRead(buton2Pin) == LOW && !buton1BirKereBasildi) {
    if (!buton2BirKereBasildi && suankiZaman - butonSonBasmaZamani > debounceSuresi) {
      butonSonBasmaZamani = suankiZaman;
      buton2BirKereBasildi = true;

      if (mod == BaslangicSaatAyar) {
        ayarlananBaslangicSaat++;
        if (ayarlananBaslangicSaat > 23) {
          ayarlananBaslangicSaat = 0;
        }
      } else if (mod == BaslangicDakikaAyar) {
        ayarlananBaslangicDakika++;
        if (ayarlananBaslangicDakika > 59) {
          ayarlananBaslangicDakika = 0;
        }
      } else if (mod == BitisSaatAyar) {
        ayarlananBitisSaat++;
        if (ayarlananBitisSaat > 23) {
          ayarlananBitisSaat = 0;
        }
      } else if (mod == BitisDakikaAyar) {
        ayarlananBitisDakika++;
        if (ayarlananBitisDakika > 59) {
          ayarlananBitisDakika = 0;
        }
      }
    }
  } else {
    buton2BirKereBasildi = false;
  }
}
 
Last edited by a moderator:
roleDurumu değişkenini bool tanımlayıp hiç bir yerde kullanmamışsın.

Serial.print ile başlangıç saatini serial monitöre yazdır. Bak bakalım doğru geliyormu?

Rölenin çekmemesinin iki sebebi olabilir.
1 arduinonun gücü yetmiyordur.
2 void loop altındaki if bloklarının içine girecek koşullar sağlanmıyordur.
 
roleDurumu değişkenini bool tanımlayıp hiç bir yerde kullanmamışsın.

Serial.print ile başlangıç saatini serial monitöre yazdır. Bak bakalım doğru geliyormu?

Rölenin çekmemesinin iki sebebi olabilir.
1 arduinonun gücü yetmiyordur.
2 void loop altındaki if bloklarının içine girecek koşullar sağlanmıyordur.
roleDurumu değişkenini kullandım röle kontrol kısmı var orada

KOD:
// Röle kontrolü
  if (mod == Bekleme) {
    DateTime now = rtc.now();
    if (now.hour() == ayarlananBaslangicSaat && now.minute() == ayarlananBaslangicDakika) {
      // Başlangıç saati geldi, röle aç
      roleDurumu = true;
      digitalWrite(rolePin, HIGH);
    } else if (now.hour() == ayarlananBitisSaat && now.minute() == ayarlananBitisDakika) {
      // Bitiş saati geldi, röle kapat
      roleDurumu = false;
      digitalWrite(rolePin, LOW);
    }
  }
 
roleDurumu değişkenini bool tanımlayıp hiç bir yerde kullanmamışsın.

Serial.print ile başlangıç saatini serial monitöre yazdır. Bak bakalım doğru geliyormu?

Rölenin çekmemesinin iki sebebi olabilir.
1 arduinonun gücü yetmiyordur.
2 void loop altındaki if bloklarının içine girecek koşullar sağlanmıyordur.
arduino gücü yetiyor röleleri ayrı olarak denedim çalışıyor
 
Burada kullandığın "roleDurumu" değişkenleri hiç bir anlam ifade etmiyor.
Sadece röleye true yada false değer atamışsın. Bu değeri herhangi bir karşılaştırmada kullanmamışsın.
Yani "roleDurumu = trure" diye bir atama yapıyorsan, en basit anlamıyla bir if bloğu için de röle durumu "true" mu "false" mu diye sorgulama yapman lazım. "true" ise şunu yap, "false" ise bunu yap gibi bir koşul oluşturmalısın.

C++:
// Röle kontrolü
  if (mod == Bekleme) {
    DateTime now = rtc.now();
    if (now.hour() == ayarlananBaslangicSaat && now.minute() == ayarlananBaslangicDakika) {
      // Başlangıç saati geldi, röle aç
      roleDurumu = true;
      digitalWrite(rolePin, HIGH);
    } else if (now.hour() == ayarlananBitisSaat && now.minute() == ayarlananBitisDakika) {
      // Bitiş saati geldi, röle kapat
      roleDurumu = false;
      digitalWrite(rolePin, LOW);
    }
  }
 
Burada kullandığın "roleDurumu" değişkenleri hiç bir anlam ifade etmiyor.
Sadece röleye true yada false değer atamışsın. Bu değeri herhangi bir karşılaştırmada kullanmamışsın.
Yani "roleDurumu = trure" diye bir atama yapıyorsan, en basit anlamıyla bir if bloğu için de röle durumu "true" mu "false" mu diye sorgulama yapman lazım. "true" ise şunu yap, "false" ise bunu yap gibi bir koşul oluşturmalısın.

C++:
// Röle kontrolü
  if (mod == Bekleme) {
    DateTime now = rtc.now();
    if (now.hour() == ayarlananBaslangicSaat && now.minute() == ayarlananBaslangicDakika) {
      // Başlangıç saati geldi, röle aç
      roleDurumu = true;
      digitalWrite(rolePin, HIGH);
    } else if (now.hour() == ayarlananBitisSaat && now.minute() == ayarlananBitisDakika) {
      // Bitiş saati geldi, röle kapat
      roleDurumu = false;
      digitalWrite(rolePin, LOW);
    }
  }
anladım çok teşekkürler deniyeyim bi
 
anladım çok teşekkürler deniyeyim bi
değişkenlere yazdırdığın her şeyi adım adım Serial.print ile Serial monitöre yazdır.
Hangi değişkene, ne atamışsın?, Atanan değer doğru geliyor mu? bunları adım adım gözlemle.
Ben ileri derecede kod analiz etmeyi bilmiyorum ama genel hatlarıyla baktığımda bir den fazla hata var gibi duruyor.
ChatGPT yarım yamalak bir kod da vermiş olabilir. Tek çare adım adım her şeyi kontrol etmek.
 
değişkenlere yazdırdığın her şeyi adım adım Serial.print ile Serial monitöre yazdır.
Hangi değişkene, ne atamışsın?, Atanan değer doğru geliyor mu? bunları adım adım gözlemle.
Ben ileri derecede kod analiz etmeyi bilmiyorum ama genel hatlarıyla baktığımda bir den fazla hata var gibi duruyor.
ChatGPT yarım yamalak bir kod da vermiş olabilir. Tek çare adım adım her şeyi kontrol etmek.
daha kötü durumdaydı bende çok tecrübeli değilim biraz bilgim ile düzelttim fakat daha bilgim yetmiyor şuan :)
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,880
Mesajlar
100,232
Üyeler
2,491
Son üye
djkop

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top