void loop() {for (int i = 0; i < 30; i++){ digitalWrite(led, HIGH);delay(1000);digitalWrite(led, LOW)delay(1000);}if(digitalRead(buton)==HIGH){digitalWrite(buzzer,HIGH);}else{digitalWrite(buzzer,LOW);}}
Kodlarımızı incelersek;
döngü başladığında led 30 defa yanıp sönecek, butona basılırsa buzzer ses verecek, butondan el çekildiğinde buzzer susacak.
Fakat gerçekte böyle çalışmayacaktır
Siz butona ledin yanıp söndüğü for döngüsü süresi içerisinde basarsanız buton algılamayacaktır, çünkü kodun sırası gelmemiştir.
Butona basma anınız ledlerin yanıp sönme işlemi bittiği( for döngüsünün sonlandığı) ana denk gelmek zorundadır.
Küçük projelerde basit çözümler üretilebilir,
buton kontrolü for döngüsü içine taşınır, döngü içerisinde de sürekli buton kontrol edilmesi gibi.
Fakat bu durumun en ideal çözümü interrupt kesme özelliğinin kullanılmasıdır.
Arduino da intterupt(kesme) özelliği olan pinler mevcuttur.
Bu pinlere sinyal geldiğinde program kesmeye uğrar, döndüden çıkar, istenen görev uygulanır, sonra kaldığı yerden devam eder.
Yukarıdaki programda butonun herhangi bir anda arduino tarafından algılanabilmesi için interrupt pinlerinden birine bağlanması ve interrupt komutlarının kullanılması gerekir.
ARDUINO
KARTI |
INTERRUPT(KESME) ÖZELLİKLİ PİNLER |
Uno, Nano, Mini, other 328-based |
2, 3 |
Uno WiFi Rev.2, Nano Every |
tüm dijital pinler |
Mega, Mega2560, MegaADK |
2, 3, 18, 19, 20, 21 |
Micro, Leonardo, other 32u4-based |
0, 1, 2, 3, 7 |
Zero |
all digital pins, except 4 |
MKR Family boards |
0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
Nano 33 IoT |
2, 3, 9, 10, 11, 13, 15, A5, A7 |
Nano 33 BLE, Nano 33 BLE Sense |
tüm pinler |
Due |
tüm dijital pinler |
0 Yorumlar