Merhaba, Yapmaya çalıştığım iş için kesme kullanmam gerekiyor. Kullanmak istediğim ilk kesme sorunsuz çalışıyor (2 nolu pindeki dur isimli kesme) Ancak Acildur isimli kesme olmasını istediğim zamanda devreye girmiyor. Yapmak istediğim şey tam olarak 18 nolu pine bağlı düğmeye basılı tuttuğum müddetçe yapılmasını istediğim işler yapılsın, görevi bitince dursun. Bu esnada elimi 18 nolu pindeki düğmeden çekersem o an itibariyle bütün işler dursun ve Acildur isimli kesme görevini yapsın. Aynı kesme için 2. isteğim ise kesme bittikten sonra, Program kesme oluşmadan önce kaldığı yerden devam etmesin. Void loop bölümü baştan başlasın.
byte BaslaLED1 = 13; byte BaslaLED2 = 14; byte AcildurLED = 15; byte BaslaButon1 = 17; byte BaslaButon2 = 18; byte val = 0; int durum = 3; void setup() { pinMode(BaslaLED1, OUTPUT);//13 nolu pindeki 1. Led pinMode(BaslaLED2, OUTPUT);//14 nolu pindeki 2. Led pinMode(AcildurLED, OUTPUT);//15 nolu pindeki Acil durdurma ledi pinMode(BaslaButon1, INPUT_PULLUP);//1. Led yanip sonecek (17.pindeki buton) pinMode(BaslaButon2, INPUT_PULLUP);//2. Led yanip sonecek (18.pindeki buton) attachInterrupt(0,dur,RISING); //2.pin kesme attachInterrupt(5,Acildur,RISING); //18.pin LOW dan HIGH konumuna geçtiğinde Acildur adlı kesme başlasın }
digitalWrite(BaslaLED1, LOW); digitalWrite(BaslaLED2, LOW); delay(200); digitalWrite(AcildurLED, HIGH); delay(200); digitalWrite(AcildurLED, LOW); delay(200); digitalWrite(AcildurLED, HIGH); delay(200); digitalWrite(AcildurLED, LOW); delay(200); digitalWrite(AcildurLED, HIGH); durum=3; //Bu noktadan itibaren program, kesme olmadan önce kaldığı yere geri dönmemeli //Program ilk defa çalışıyormuş gibi en baştan, void loop() bölümünden başlamalı }
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Yapmaya çalıştığım iş için kesme kullanmam gerekiyor.
Kullanmak istediğim ilk kesme sorunsuz çalışıyor (2 nolu pindeki dur isimli kesme)
Ancak Acildur isimli kesme olmasını istediğim zamanda devreye girmiyor.
Yapmak istediğim şey tam olarak 18 nolu pine bağlı düğmeye basılı tuttuğum müddetçe yapılmasını istediğim işler yapılsın, görevi bitince dursun. Bu esnada elimi 18 nolu pindeki düğmeden çekersem o an itibariyle bütün işler dursun ve Acildur isimli kesme görevini yapsın.
Aynı kesme için 2. isteğim ise kesme bittikten sonra, Program kesme oluşmadan önce kaldığı yerden devam etmesin. Void loop bölümü baştan başlasın.
byte BaslaLED1 = 13;
byte BaslaLED2 = 14;
byte AcildurLED = 15;
byte BaslaButon1 = 17;
byte BaslaButon2 = 18;
byte val = 0;
int durum = 3;
void setup() {
pinMode(BaslaLED1, OUTPUT);//13 nolu pindeki 1. Led
pinMode(BaslaLED2, OUTPUT);//14 nolu pindeki 2. Led
pinMode(AcildurLED, OUTPUT);//15 nolu pindeki Acil durdurma ledi
pinMode(BaslaButon1, INPUT_PULLUP);//1. Led yanip sonecek (17.pindeki buton)
pinMode(BaslaButon2, INPUT_PULLUP);//2. Led yanip sonecek (18.pindeki buton)
attachInterrupt(0,dur,RISING); //2.pin kesme
attachInterrupt(5,Acildur,RISING); //18.pin LOW dan HIGH konumuna geçtiğinde Acildur adlı kesme başlasın
}
void loop()
{
if (durum == 1){kesme();}
if (digitalRead(BaslaButon1) == LOW) {
digitalWrite(BaslaLED2, LOW);
digitalWrite(AcildurLED, LOW);
digitalWrite(BaslaLED1, HIGH);
delay(1000);
digitalWrite(BaslaLED1, LOW);
delay(1000);
digitalWrite(BaslaLED1, HIGH);
delay(1000);
digitalWrite(BaslaLED1, LOW);
delay(1000);
digitalWrite(BaslaLED1, HIGH);
}
else if (digitalRead(BaslaButon2) == LOW) {
digitalWrite(BaslaLED1, LOW);
digitalWrite(AcildurLED, LOW);
digitalWrite(BaslaLED2, HIGH);
delay(1000);
digitalWrite(BaslaLED2, LOW);
delay(1000);
digitalWrite(BaslaLED2, HIGH);
delay(1000);
digitalWrite(BaslaLED2, LOW);
delay(1000);
digitalWrite(BaslaLED2, HIGH);
}
}
void dur()
{
digitalWrite(BaslaLED1, LOW);
digitalWrite(BaslaLED2, LOW);
digitalWrite(AcildurLED, HIGH);
}
void Acildur()
{
durum=1;
}
void kesme()
{
digitalWrite(BaslaLED1, LOW);
digitalWrite(BaslaLED2, LOW);
delay(200);
digitalWrite(AcildurLED, HIGH);
delay(200);
digitalWrite(AcildurLED, LOW);
delay(200);
digitalWrite(AcildurLED, HIGH);
delay(200);
digitalWrite(AcildurLED, LOW);
delay(200);
digitalWrite(AcildurLED, HIGH);
durum=3;
//Bu noktadan itibaren program, kesme olmadan önce kaldığı yere geri dönmemeli
//Program ilk defa çalışıyormuş gibi en baştan, void loop() bölümünden başlamalı
}
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi ekantarci -- 8 Nisan 2015; 23:46:22 >