IF ile çalışan döngü, dış kesme ile sağlıklı çalışmıyor?

Başlatan Andromeda, 21 Mart 2021, 22:30:32

Andromeda

Arkadaşlar aşağıda iki kod(Arduino UNO) ekledim..iki kodda da ışığı kaç kere kestiğimi sayıyorum..
birinci kodda her değişiklikte displayde 2 şer atlama oluyor ve sağlıklı çalışmıyordu..delay gecikmesi ekleyerek çözdüm..sensörün ışığını her kestiğimde sayı bir artıyor ve istediğim oluyor.
ama dış kesme ile yaptığım ikinci kodda sensörün ışığını kestiğimde ve açtığımda 2 şer sefer artma oluyor..
bunu bir türlü çözemedim..delay gecikmeside işe yaramadı..bunu halledebilirsem dış kesme ile yaptığıma millis fonksiyonu ekleyerek iki kesme süresini ekrana yazdıracağım..
#include <TM1637.h>

#define clk 6
#define dio 7
int  inputpin= 2;

TM1637 tm(clk,dio);
int x=0;
int a;
int b;
int c;
int d;
void setup(){
pinMode(2,INPUT);
  tm.init();
  tm.set();
  }

void loop(){

basla:
delay(50);
if (digitalRead(inputpin)==0)
   goto basla;
   x++;
  a=x/1000;
  b=(x/100)%10;
  c=(x/10)%10;
  d=x%10;
  tm.display(0,a);
  tm.display(1,b);
  tm.display(2,c);
  tm.display(3,d);
  delay(50);
//...........
  kontrol:
  if (digitalRead(inputpin)==0)
  goto basla;
  goto kontrol;
    }
// dış kesme ile yapılmış
#include <TM1637.h>

#define clk 6
#define dio 7
int  inputpin= 2;



TM1637 tm(clk,dio);
int x=0;
int a;
int b;
int c;
int d;
void setup(){
pinMode(2,INPUT);
  tm.init();
  tm.set();
   attachInterrupt(0, sayma, RISING);
  }

void loop(){


    }
// kesme gelince sayma döngüsü
  void sayma(){
  delay(1000);
   x++;
  a=x/1000;
  b=(x/100)%10;
  c=(x/10)%10;
  d=x%10;
  tm.display(0,a);
  tm.display(1,b);
  tm.display(2,c);
  tm.display(3,d);

  }
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

volkanunal

Kesme içerisinde delay kullanmak doğru bir yaklaşım değil hocam ayrıca sayacınızı volatile tanımlamanız faydalı olacaktır.