Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: Andromeda - 21 Mart 2021, 22:30:32

Başlık: IF ile çalışan döngü, dış kesme ile sağlıklı çalışmıyor?
Gönderen: Andromeda - 21 Mart 2021, 22:30:32
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);

  }
Başlık: Ynt: IF ile çalışan döngü, dış kesme ile sağlıklı çalışmıyor?
Gönderen: volkanunal - 21 Mart 2021, 22:34:43
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.