Şimdi Ara

Arduino Kesme kullanımı

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
1.885
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba,
    Yapmaya çalıştığım 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 >







  • Bu konu hakkında fikri olan var mı?
  • Biraz geç olacak ama muhtemelen sende çözmüşsündür. Uno da 2 adet dış kesme pini kullanabilirsin. Bunlar 2. ve 3. pınlerdir.

     

    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(1,Acildur,RISING); //3. PIN KESME
    }

    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 LiLPlayya -- 19 Ocak 2016; 16:55:50 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.