Interrupt İşleminde Delay() veya Millis() Komutları Çalışmıyor

yusufhaystra

Yeni Üye
22 Tem 2019
6
0
0
Türkiye - İstanbul
Cinsiyet
Erkek
Merhaba,
AttachInterrupt ile çalışan void (Boş dönüt) fonksiyonun içerisinde herhangi bir yerde delay(); veya millis(); komutlarını kullandığımda çalışmıyor. Eğer bu komutlar olmazsa, sorunsuz bir şekilde çalışıyor. Ancak içerisinde bulunan işlemlerden dolayı bir süre beklemesi gerek. Bu konuda araştırma yaptım ancak sadece birisinin "delay() kullanma" yazısından başka bir şey göremedim. Kullandığım fonksiyon önemli değil, benim için önemli olan şey kodun bir süre ilerlememesi. Bu fonksiyonda kullanabileceğim, bir süre beklemesini sağlayan bir komut var mı veya bu sorunu nasıl düzeltebiliriz ?
Kod:
#define sinyalverport0 18
void setup
{
  digitalWrite(sinyalverport0, LOW);
  attachInterrupt(3, deneme, LOW);
}
void loop
{
// kodlarım
}
void deneme()
{
// kodlarım
delay(500); // bu komutu koyduğumda, deneme fonksiyonu hiç çalışmıyor.

int saniye = millis();
while (millis() - saniye < 2000);
// yukarıdaki 2 satırlı kodu koyduğumda da deneme fonksiyonu hiç çalışmıyor.
}
Aklıma şu da gelmişti tabii;
Kod:
short sayi = 0;

while (sayi < 1000)
    sayi++; // her bir sorgu 1 ms veya altında olduğunu varsayarsak tahminen 1 saniye sonra döngüden çıkacak olur diyebilirdik ama öyle değil çünkü 1 milisaniyenin çok çok altında sürelerde çalışıyor. Bu da bu kontrolü yapamayacağım anlamına geliyor.
 

amenofis

Yeni Üye
18 Tem 2019
41
9
0
Bursa
Cinsiyet
Erkek
Arduino Reference

Burada açıkça yazıyor delay ve millis kesme içinde çalışmaz diye. delay'a alternatif olarak _delay_ms() kullanabilirsin ama kesme içinde beklemek diğer kesmeleri bloklar. Mesela programın başka bir yerinde delay() kullanmış isen o delay süresi uzar. Kesmeler çok kısa işlemler için kullanılmalıdır.
 
  • Beğen
Tepkiler: yusufhaystra

alio1984

Üye
9 Ağu 2019
51
1
0
istanbul
Cinsiyet
Erkek
int saniye = millis(); Bu veri tipi hatalı. unsigned long saniye= millis(); olarak ilk değişikliğimizi yapalım. Muhtemelen calisacaktir. Calısmaz ise ayrıntılı bakmaya calisiriz.

Tesekkurler,
Ali
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?