Bugünkü dersimizde arduino bir programý yürütürken yürümekte olan programý duraklatýp araya baþka bir program sýkýþtýrmasýný öðreneceðiz. Araya sýkýþtýrdýðýmýz program komutlarý yerine getirildiðinde ana program kaldýðý yerden devam edecektir.
ANA PROGRAM AKIÞ DÝYAGRAMI











| Bir arduino programý pic ve plc programlarý gibi alt alta yazýlan komutlardan oluþur. Arduino çalýþmaya baþladýðýnda ilk komuttan itibaren tüm komutlar yukarýdan aþaðýya doðru sýrayla çalýþtýrýlýr. Arduinoya baðlý sensör, buton, röle kontaklarý gibi çevresel birimlerden gelen verilersürekli kontrol edildiðinden program son komuta geldiðinde tekrar baþa döner ve bir döngü halinde sürekli çalýþýr.
Örneðin bir yürüyen ýþýk için yandaki gibi bir akýþ diyagramý söz konusudur. Yandaki akýþ diyagramýnda görüldüðü gibi program tüm komutlarý yukarýdan aþaðýya sýrayla çalýþtýrmak ve en alttaki komutu uyguladýktan sonra tekrar baþa dönüp bu iþlemi sonsuz bir döngü haline getirmekten ibarettir.
Akýþ diyagramýna ait arduino kodlarýmýz:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 1;
int ikinci_led = 2;
int ucuncu_led = 3;
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELÝRTÝLMESÝ BURADA BAÞLADI
void setup()
{
pinMode(birinci_led, OUTPUT); // DÝJÝTAL 1 PÝNÝNE 1. LED BAÐLANACAK
pinMode(ikinci_led, OUTPUT); // DÝJÝTAL 2 PÝNÝNE 2. LED BAÐLANACAK
pinMode(ucuncu_led, OUTPUT); // DÝJÝTAL 3 PÝNÝNE 3. LED BAÐLANACAK
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELÝRTÝLMESÝ BURADA BITTI
// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DÝJÝTAL 1 PÝNÝNDEKÝ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DÝJÝTAL 1 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DÝJÝTAL 2 PÝNÝNDEKÝ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DÝJÝTAL 2 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DÝJÝTAL 3 PÝNÝNDEKÝ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DÝJÝTAL 3 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI
|
Ana programa ait montajý yapýlmýþ devre
Ana programa ait fritzing çizimi
Ana programa ait isis çizimi
Ana programa ait çalýþma videosu:Ana programa ait isis simülasyonu videosu:Arduinonun belli bir pinine gelen sinyalle belli bir fonksiyonun ya da önceden belirlenmiþ bir alt programýn çalýþtýrýlmasýný saðlamak için
attachInterrupt komutu kullanýlýr.
Kullandýðýmýz arduinonun sürümüne göre dijital pinlerden bazýlarý attachInterrupt pini olarak da iþlev görür. Aþaðýdaki tabloda farklý arduino modellerine göre kullanýlabilir attachInterrupt pinleri listelenmiþtir.
| KART |
INTO |
INT1 |
INT2 |
INT3 |
INT4 |
INT5 |
| Uno, Nano, Mini |
PIN2 |
PIN3 |
|
|
|
|
| Mega, Mega2560, MegaADK |
PIN2 |
PIN3 |
PIN18 |
PIN19 |
PIN20 |
PIN21 |
| Micro, Leonardo |
PIN0 |
PIN1 |
PIN2 |
PIN3 |
PIN7 |
|
| Zero |
DÝJÝTAL 4 PÝNÝ HARÝÇ TÜM DÝJÝTAL PÝNLER |
| Due |
TÜM DÝJÝTAL PÝNLER |
Þimdi program çalýþýrken programýn her hangi bir aþamasýnda dijital 2. pine baðlý olan butona basýldýðýnda 4., 5. ve 6. ledlerin yanmasýný, dijital 3. pine baðlý olan butona basýldýðýnda 4., 5. ve 6. ledlerin sönmesini isteyelim. Burada yapacaðýmýz iþleme interrupt (kesinti) denir.
Arduino unonun dijital2 ve dijital3 pinleri (INT0 ve INT1) kesme komutu pinleridir. Yukarýdaki programda bu pinlere led baðlamýþtýk. Bu pinleri kullanabilmemiz için aþaðýdaki þemada görüldüðü gibi 1., 2., ve 3. pinlerdeki ledleri 4., 5. ve 6. pinlere taþýyoruz. 7., 8. ve 9. pinlere de sýrasýyla 4., 5. ve 6. ledleri baðlayacaðýz. INT0 ve INT1 giriþlerine de birer adet buton baðlayýp programýmýzý hazýrladýðýmýz devre þemasýna uygun olarak düzenleyeceðiz.
Ana programa ek program eklenmiþ devreye ait isis çizimi
Ana programa ek program eklenmiþ devreye ait fritzing çizimi
Bitmiþ devreye ait video:Bitmiþ devreye ait isis simülasyonu:Bitmiþ devreye ait program:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 4;
int ikinci_led = 5;
int ucuncu_led = 6;
int dorduncu_led = 7;
int besinci_led = 8;
int altinci_led = 9;
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELÝRTÝLMESÝ BURADA BAÞLADI
void setup()
{
pinMode(birinci_led, OUTPUT); // DÝJÝTAL 4 PÝNÝNE 1. LED BAÐLANACAK
pinMode(ikinci_led, OUTPUT); // DÝJÝTAL 5 PÝNÝNE 2. LED BAÐLANACAK
pinMode(ucuncu_led, OUTPUT); // DÝJÝTAL 6 PÝNÝNE 3. LED BAÐLANACAK
pinMode(dorduncu_led, OUTPUT); // DÝJÝTAL 7 PÝNÝNE 4. LED BAÐLANACAK
pinMode(besinci_led, OUTPUT); // DÝJÝTAL 8 PÝNÝNE 5. LED BAÐLANACAK
pinMode(altinci_led, OUTPUT); // DÝJÝTAL 9 PÝNÝNE 6. LED BAÐLANACAK
pinMode(2, INPUT); // DÝJÝTAL 4 PÝNÝNE 1. LED BAÐLANACAK
pinMode(3, INPUT); // DÝJÝTAL 5 PÝNÝNE 2. LED BAÐLANACAK
attachInterrupt(0, kesme, RISING); // INT0 pini (dijital2 pini) 1 yapýlýrsa program kesme isimli fonksiyonu yürütür.
attachInterrupt(1, kesme2, RISING); // INT1 pini (dijital3 pini) 1 yapýlýrsa program kesme2 isimli fonksiyonu yürütür.
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELÝRTÝLMESÝ BURADA BITTI
// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DÝJÝTAL 4 PÝNÝNDEKÝ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DÝJÝTAL 4 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DÝJÝTAL 5 PÝNÝNDEKÝ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DÝJÝTAL 5 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DÝJÝTAL 6 PÝNÝNDEKÝ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DÝJÝTAL 6 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI
void kesme()
{
digitalWrite(dorduncu_led, HIGH); // DÝJÝTAL 4 PÝNÝNDEKÝ LED YAKILDI
digitalWrite(besinci_led, HIGH); // DÝJÝTAL 5 PÝNÝNDEKÝ LED YAKILDI
digitalWrite(altinci_led, HIGH); // DÝJÝTAL 6 PÝNÝNDEKÝ LED YAKILDI
}
void kesme2()
{
digitalWrite(dorduncu_led, LOW); // DÝJÝTAL 4 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(besinci_led, LOW); // DÝJÝTAL 5 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
digitalWrite(altinci_led, LOW); // DÝJÝTAL 6 PÝNÝNDEKÝ LED SÖNDÜRÜLDÜ
}
Böylece bir program yürütülürken araya baþka bir programý sýkýþtýrýp her iki programý da yürütmüþ olduk.