Arduino uzmanlarına Kesme(interrupt) ile ilgili bir soru?

Kodla Büyü

hastasıyız dede

Hiperaktif Üye
Hiperaktif
Mesajlar
2,785
Scratch tada oluyordu, bir tuş bsınca arka arkaya tetikleme gerçekleşiyordu bunu engellemek için tuşa bastıktan sonra 0.5 sn bekle komutu kullanıyordum bu problem kesme(interrupt) kullanınca da oluyor ama kesme de 1 sn bekle komutu işe yaramıyor yine ark arkaya tetikleniyor bunun çaresi var mı?
not: RISING, FALLİNG ikisini de denedim ikisindede hata oluyor.
 
pull down direnci var hocam. o olmazsa devre kararsız çalışır zaten, benim sorunum o değil, butona basılınca bazen 1 bazen 2 bazen 3 tetikleme gerçekleşiyor, bunu yazılımda butona basılınca 0.3 sn bekle diyerek engelliyordum ama kesme de işe yaramadı. örneğin butona basınca a yı 1 arttır dediğimde a 1 ise bazen 2 bazen 3 bazen 4 oluyor kodlar düzgün çalışmıyor.
aslında problemin kaynağı tek sürekli kullanabilmemiz delay kullanınca bekleme süresinde butona bastığımızda algılamıyor. kesme kullanayım dedim o sorunu çözdüm ama 2-3 kere tetiklediği için o da ayrı bir problem çıkardı.
 
PROBLEM ÇÖZÜLDÜ

int a=1;
void setup() {
pinMode(2, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println(a);
}
void loop() {
attachInterrupt(0, degistir, FALLING);
detachInterrupt(0);
if(a==1){
digitalWrite(13, 1);
delay(100);
digitalWrite(13, 0);
delay(100);
}
if(a==2){
digitalWrite(13, 1);
delay(1000);
digitalWrite(13, 0);
delay(1000);
}
}
void degistir(){
a=a+1;
if (a==3){
a=1;
}
Serial.println(a);
}
 
Hocam milis ile yapabilirsin. Gerçek zaman ile basıldıktan sonraki süre arasındaki farklı alarak çoklu basmaların önüne geçebilirsiniz. Delay kullanmadan led yakma söndürme örneği
Umarım faydalı olur
Kod:
int ledDurumu = LOW; 
long oncekiZamanDegeri = 0; 
long yanmaAraligi = 500; 

void setup() {
  pinMode(RED_LED, OUTPUT);     
}

void loop()
{
  unsigned long zamanDegeri = millis();

  if(zamanDegeri - oncekiZamanDegeri > yanmaAraligi) {
   
    oncekiZamanDegeri = zamanDegeri;   
   ledDurumu=~ledDurumu;
    digitalWrite(RED_LED, ledDurumu);
  }
}
 
hocam rica etsem butonu da işin içine katarak yazabilir misiniz?

yada yazdığınız örnek buton lu ise biraz açıklayabilir misiniz?
 
kaynak ingilizce hocam karışık geldi anlayamadım. neyse harici kesme ile sorun çözüldü zaten ilginize teşekkürler.
 
Hocam bu kesme ile sayı arttırmada atlama olayını nasıl çözdünüz acaba? Ayni sorunu bende yaşıyorum da.
 
Geri
Üst