Tuşa bastığımda röle açılmıyor

kaandagci

Yeni Üye
Katılım
14 Haziran 2023
Mesajlar
8
Merhaba, aşağıda gördüğünüz kod var fakat startbutton'a tıkladığımda sicaklik_role açılmıyor. Normalde LOW duruma geldiğinde rölenin aktif hale gelmesi gerekiyor fakat startbutton'a tıkladığımda rölenin çalıştığına dair ışığı yanıyor fakat röleden gelen "çık" sesi gelmiyor rölenin ışığı da kısık yanıyor. Bağlantımda herhangi bir problem yok. Yardım edebilir misiniz?
Kod:
#include "max6675.h"

int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;
int sicaklik_role = 6;
int thermoDO = 7;
int thermoCS = 8;
int thermoCLK = 9;

const int isiticiac = 50;
const int isiticikapat = 40;

int stopButton = 10;
int startButton = 11;

bool isRunning = false;  // Başlangıçta çalışmıyoruz
bool isStartButtonPressed = false;  // Start düğmesine basılı tutulup tutulmadığını tutacak değişken
//state machine var
byte runState = 0;
//millis timer for states..
unsigned long lastChange = 0;
unsigned int intervalChange = 10000;
//millis timer for button debouncing..
unsigned long lastDebounce = 0;
int intervalDebounce = 50;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
  pinMode(stopButton, INPUT_PULLUP);
  pinMode(startButton, INPUT_PULLUP);
  pinMode(relay1Pin, OUTPUT);
  pinMode(relay2Pin, OUTPUT);
  pinMode(relay3Pin, OUTPUT);
  pinMode(relay4Pin, OUTPUT);
  pinMode(sicaklik_role, OUTPUT);
  digitalWrite(sicaklik_role, HIGH);
  digitalWrite(relay1Pin, HIGH);
  digitalWrite(relay2Pin, HIGH);
  digitalWrite(relay3Pin, HIGH);
  digitalWrite(relay4Pin, HIGH);

  Serial.begin(9600);  // Seri portu başlat
}

void loop() {
  double temperature = thermocouple.readCelsius();

  if (digitalRead(startButton) == LOW) {
    // Start düğmesine basıldığında sicaklik_role LOW durumunda
    digitalWrite(sicaklik_role, LOW);
    isStartButtonPressed = true;
  } else if (digitalRead(startButton) == HIGH && isStartButtonPressed) {
    // Start düğmesi bırakıldığında da sicaklik_role LOW durumunda kalır
    digitalWrite(sicaklik_role, LOW);
  }

  if (isStartButtonPressed && temperature >= isiticiac) {
    if (millis() - lastDebounce >= intervalDebounce) {
      lastDebounce = millis();
      if (!isRunning) {
        isRunning = true;
        //reset state machine
        runState = 0;
        Serial.println("Röleler çalıştırılıyor...");
      }
    }
  } else if (temperature <= isiticikapat) {
    digitalWrite(sicaklik_role, HIGH);
  }



  // Start düğmesine basıldığında röleleri çalıştır
  if (isRunning) {
    switch (runState) {
      case 0:
        digitalWrite(relay1Pin, LOW);
        digitalWrite(relay2Pin, LOW);
        runState = 1;
        // Diğer durumları devam ettir...
        break;
      // Diğer durumları kontrol et...
    }
  }
}
 
55 numaralı satırdaki if içerisinde isStartButtonPressed değişkeninin false yapılması lazım, sorun bu olabilir.
 
Algoritmada da hata var gibi. 60. satırdan itibaren bir if var. Start butonuna basıldı ise ve sicaklık da alt limitten büyükse ancak LOW yapacak. Eğer bu iki şart doğru değilse senin daha önce LOW yaptığını 71. satır tekrar HIGH yapacak.

Adım adım algoritmayı takip et. Bunu da şöyle yapabilirsin. loop() un en başına 500 ms lik bir delay koy. Sonra da her if içine ve her else içine bir serial.print koy. Sonra programı çalıştır ve butona basınca neresi çalışıyor butonu bırakınca neresi çalışıyor analiz et.
 
Algoritmada da var gibi. 60. satırdan itibaren bir if var. Start butonuna basıldı ise ve sicaklık da alt limitten büyükse ancak LOW yapacak. Eğer bu iki şart doğru değilse senin daha önce LOW yaptığını 71. satır tekrar HIGH yapacak.

Adım adım algoritmayı takip et. Bunu da şöyle yapabilirsin. loop() un en başına 500 ms lik bir delay koy. Sonra da her if içine ve her else içine bir serial.print koy. Sonra programı çalıştır ve butona basınca neresi çalışıyor butonu bırakınca neresi çalışıyor analiz et.
Harika bir yol teşekkür ederim. Denedim ve kod şurada takılıyor. 55. satıra bir serial.print koydum ve oraya şunu yazdım. Serial.println("Butondan çekince röle çalışmaya devam ediyor"); bunu yazdım seri port ekranında bu yazı aşağıya doğru sürekli tekarlıyor.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,844
Mesajlar
99,712
Üyeler
2,481
Son üye
rfdog12

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