Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması
“Cihazın Algılaması” Dediğimiz Şey


Hatırlarsanız

// Sürekli çalışan fonksiyonumuz.

diye bir şeyden bahsetmiştik.

Bir nevi cihazda elektrik olduğu süre zarfında daima çalışan ana fonksiyondu. Ve alışageldiğimiz, program sonlarına adeta “bitmesin bu güzel hikaye” der gibi, her defasında başa alarak, sürekli dönmesini sağlıyordu.

Ve yine hatırlarsanız, bir önceki yazıda

‘ten bahsetmiştik.

Hatta bunun programcılığın iki harflik özeti olabileceğinden ve Algılama/Tetiklenme dediğimiz şeyin özündeki sihirli algoritma olabileceği mealinde şeyler söylemiştik.

Bu yüzden, “Gün ağardığında Sokak lambaları sönsün” şeklindeki amacımız doğrultusunda şöyle bir kurgu yapmıştık..

Yani,

x bir tam sayı olsun, (2 byte)
A0 pini Giriş modunda olsun
ve
X eşittir = A0 pinine bağlı ışık Sensöründen okuduğumuz değerler olsun.

Şayet ışık-x, 200’den fazla ise
3 nolu pin kapansın.. ki bu pine bağlı röle kapansın.. ki sokak lambaları sönsün..


Her şey güzel..

Ama!
Bu kodları çalıştırdığınızda, şaşıracaksınız.. Zira lamba bir kere söndükten sonra geri yanmayacak.
Hatta faklı kurguda hazırlanmış akış içerisinde, beklentinizin aksine bağladığınız cihazın hiç sönmediğini de görebilirsiniz.

Neler oluyor? Neden çalışmıyor?

Çalışıyor.
Hem de tam olarak cihaza söylediğimiz şekilde çalışıyor.
// aksi durumlar için bkz: makinaların ayaklanması 🙂

Yazının başına dönelim..

loop() fonksiyonumuz, elektrik olduğu sürece kendini çalışmaya adamış sonsuz romantik bir arkadaşımızdı. Ve kodlar bittiğinde her seferinde filmi başa sarıp yeniden oynatıyordu..

Arduino ve benzer cihazlar kodlarken, ilk başlarda karşımıza çıkabilecek Error’suz Mantık hatası bu olsa gerek.

Sürekli bir döngünün içinde olduğumuzu daima akılda tutmak gerekiyor.

Yani aslında cihazın içinde gerçekleşen olay şu;
tanımlar
setup: tek seferlik ayarlar { .. }
loop: sonsuza kadar yapılacaklar { .. }

ve biz şöyle yazmıştık

görüleceği üzere sonsuza kadar dönecek olacak olan loop içinde;
Işık sensöründen gelen değeri okuyoruz,
bu değer 200’den büyükse
3 nolu pini kapatmasını söylüyoruz

cihazda bunu yapıyor.

Sonra ne oluyor?

Sonra başa dönüyor. Yeniden değeri okuyor. 200’den büyükse 3. pini kapatıyor..
sonra yeniden başa dönüyor.. ..

Cihaz hatasız çalışıyor ama sistemimiz hatalı: Yeniden yanmasına fırsat vermiyoruz 🙂


Görsel: shutterstock