Soru & Cevap

buton basılı kalsa bile led bir kere yanıp sönsün

14.04.2020 - 07:27

Merhaba arkadaşlar...

arduino da aşağıdaki kodu uyguladım butona basıp bıraktığımda led yanıp sönüyor fakat basılı tuttuğumda led yaıp sönmeye devam ediyor.

istediğim buton basılı durursa led bir kere yanıp sönsün.

int buton = 4;
int led = 5;
int butondeger = 0;
int durum = 0;
void setup() {
  Serial.begin(9600);
  pinMode(buton, INPUT);
  pinMode(led, OUTPUT);
}
void loop() {
  butondeger = digitalRead(buton);
  if (butondeger == HIGH && durum == 0)
  {
    digitalWrite(led, HIGH);
    delay(250);
    digitalWrite(led, LOW);
    delay(250);
    durum = 1;
    delay(250);
  }
  else if (butondeger == HIGH && durum == 1)
  {
    digitalWrite(led, LOW);
    durum = 0;
    delay(250);
  }
}

Yardımlarınız için şimdiden teşekkürler.

945 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-158072-1530701953.jpg
TGUNEYSU
16.04.2020 - 01:51

Buton basılı olunca ne oluyor tam anlamadım. Galiba bu işinize yarar:

const int led = 13;
const byte interruptPin = 2;

volatile boolean ilkdefa = false;
volatile boolean surekli = false;

void setup() {
  Serial.begin(9600);
  pinMode(interruptPin, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  digitalWrite(interruptPin,HIGH);
  attachInterrupt(digitalPinToInterrupt(interruptPin), IntRtn, LOW);
}

void IntRtn() {
  detachInterrupt(digitalPinToInterrupt(interruptPin));
  if (digitalRead(interruptPin)) {
    surekli = true;
    ilkdefa = false;
  } else {
    surekli = false;
    ilkdefa = true;
  }
  attachInterrupt(digitalPinToInterrupt(interruptPin), IntRtn, CHANGE);
}

void loop() {
  if (surekli) {
    digitalWrite(led, HIGH);
    delay(50);
    digitalWrite(led, LOW);
    delay(50);
  }
  blink1x();  
}

void blink1x(){
  if (ilkdefa){
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
    ilkdefa = false;
  }
}

picture-40423-1478544775.jpg
VolkanSahin45
15.04.2020 - 01:55

durum değerini 0'a çekmeyi başka bir if blogunda yaparsan çalışır gibi duruyor. Arduiono tecrübem pek yok sadece algoritmik olarak işe yarayacağını düşünüyorum. 

if (butondeger == LOW)
{
   durum = 0
}
else if (butondeger == HIGH && durum == 0)
  {
    digitalWrite(led, HIGH);
    delay(250);
    digitalWrite(led, LOW);
    delay(250);
    durum = 1;
    delay(250);
  }
  else if (butondeger == HIGH && durum == 1)
  {
    digitalWrite(led, LOW);
    delay(250);
  }