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.
 

Forum istatistikleri

Konular
7,234
Mesajlar
122,413
Üyeler
2,923
Son üye
birisim

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top