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ı }
< Bu mesaj bu kişi tarafından değiştirildi ekantarci -- 8 Nisan 2015; 23:46:22 >
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ı }
< Bu mesaj bu kişi tarafından değiştirildi LiLPlayya -- 19 Ocak 2016; 16:55:50 >
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ı
}
< Bu mesaj bu kişi tarafından değiştirildi ekantarci -- 8 Nisan 2015; 23:46:22 >