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?

C++:
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?
 
Röle yönetim:
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.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,039
Mesajlar
103,006
Üyeler
2,534
Son üye
mortadaalsonni211

Son kaynaklar

Son profil mesajları

deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
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.
Back
Top