tuşa basınca kod çalışıyor fakat tekrar basınca durmuyor

kaandagci

Yeni Üye
Katılım
14 Haziran 2023
Mesajlar
8
merhaba,

Bu kodda millis kullanamadığım için delay kullandım fakat delay kullandığım içinde kod doğru çalışmıyor. Millis kodunu anlayamadım biri düzeltip verebilir mi?

Kod:
int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;

int stopButton = 8;
int startButton = 9;

bool isRunning = false;  // Başlangıçta çalışmıyoruz

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

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

void loop() {
  // Start düğmesine basıldığında röleleri çalıştır
  if (digitalRead(startButton) == LOW) {
    isRunning = true;
    Serial.println("Röleler çalıştırılıyor...");
  }
 
 
  // Stop düğmesine basıldığında röleleri durdur
  if (digitalRead(stopButton) == LOW) {
    if (isRunning) {
      isRunning = false;
      digitalWrite(relay1Pin, HIGH);
      digitalWrite(relay2Pin, HIGH);
      digitalWrite(relay3Pin, HIGH);
      digitalWrite(relay4Pin, HIGH);
      Serial.println("Röleler durduruldu.");
    }
  }
 
 
  // Röleleri çalıştırma durumunda
  if (isRunning) {
    digitalWrite(relay1Pin, LOW);
    digitalWrite(relay2Pin, LOW);
    delay(10000);
    digitalWrite(relay1Pin, HIGH);
    digitalWrite(relay2Pin, HIGH);
    delay(5000);

    digitalWrite(relay3Pin, LOW);
    digitalWrite(relay4Pin, LOW);
    delay(10000);

    digitalWrite(relay3Pin, HIGH);
    digitalWrite(relay4Pin, HIGH);
    delay(5000);
  }
}
 
Program kodu ekleyeceğin zaman bu "kod" düğmesini kullanarak yaparsan kod daha iyi okunur ve anlaşılır

1686772855156.png


Bu programın çalışmadığını söylüyorsun. Doğru çalıştığını düşünmen için nasıl bir davranış göstermesi gerekiyordu?
 
Kod:
int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;

int stopButton = 8;
int startButton = 9;

bool isRunning = false;  // Başlangıçta çalışmıyoruz

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

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

void loop() {
  // Start düğmesine basıldığında röleleri çalıştır
  if (digitalRead(startButton) == LOW) {
    isRunning = true;
    Serial.println("Röleler çalıştırılıyor...");
  }
 
 
  // Stop düğmesine basıldığında röleleri durdur
  if (digitalRead(stopButton) == LOW) {
    if (isRunning) {
      isRunning = false;
      digitalWrite(relay1Pin, HIGH);
      digitalWrite(relay2Pin, HIGH);
      digitalWrite(relay3Pin, HIGH);
      digitalWrite(relay4Pin, HIGH);
      Serial.println("Röleler durduruldu.");
    }
  }
 
 
  // Röleleri çalıştırma durumunda
  if (isRunning) {
    digitalWrite(relay1Pin, LOW);
    digitalWrite(relay2Pin, LOW);
    delay(10000);
    digitalWrite(relay1Pin, HIGH);
    digitalWrite(relay2Pin, HIGH);
    delay(5000);

    digitalWrite(relay3Pin, LOW);
    digitalWrite(relay4Pin, LOW);
    delay(10000);

    digitalWrite(relay3Pin, HIGH);
    digitalWrite(relay4Pin, HIGH);
    delay(5000);
  }
}
 
Tekrar bastığımda olur, farklı butona bastığımda olur yeter ki dursun. Kusura bakmayın yanlış ifade etmişim kendimi.
 
if (isRunning) { dediğinde, isRunnig true ise "if" içindeki koşul çalışır. Sen onu false yapmadığın sürece de çalışmaya devam eder. Yani kodda gördüğüm kadarıyla true yapmışsın ama false yok.
 
Sen kodda delay kullandığın için program, 48. satırdan başlayan blok içerisinde 30 saniye boyunca kalıyor. Bu 30 saniye içerisinde hangi butona basarsan bas, hiçbir tepki vermez. millis ile programı anlamadım demişsin, o programı anlaman için yardımcı olalım :) Bu iş ancak millis ile olur çünkü onu kullanırsan kod hiçbir yerde bloke olmaz, sürekli butonların durumuna vakıf olur.
 

Forum istatistikleri

Konular
7,446
Mesajlar
125,456
Üyeler
3,026
Son üye
hsng

Son kaynaklar

Son profil mesajları

Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
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ı
Back
Top