Tamam Sabah Söndü ama Akşam Olunca da Yansın

Ö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
Evdeki Hesap Döngüye Uymazsa


Yukarıda linki verilen önceki bölümlerde, kısaca “Gün ağardığında sokak lambalarının otomatik sönmesi” şeklindeki amacımızdan, değişken atama ve bit/byte kavramlarından, arduino özelinde loop() fonksiyonundan, sensörlerden çevresel veri okumak için analogRead() fonksiyonundan bahsetmiştik.

Ardından daha çok algoritma tarafının konusu olan IF/Şayet deyiminden/operatöründen bahsetmiştik.

Sonrasında, yazdığımız kod ilk seferinde çalışmış, ancak devamında Lambalar sönük kalmıştı.

Ve bunun sebebi cihazda mekanik, kodlarda yazım hatası olması değildi. Aksine hata vermeden ne söylediysek yapıyordu. Ancak bir robota “Bir bardak su getirmesini” söylediyseniz ve robot da bunu getirdiyse “iyi de bu neden soğuk değil” veya “Su dediysem meyve suyu anlasana işte..” diyemezsiniz.

Zira o, sizin söylediğiniz şeyi yaptı, söylemediğiniz bir şeyi yapmadı.

Bizim yaptığımız şeyde de buna benzer bir Cümleyi eksik/yanlış kurma durumu var:

Loop döngüsü var.. sonsuza kadar dönecek..
içinde LDR/ışık/x için bir sına var: 200’den büyükse, lambalara giden hattı kesecek..

Ok. Sorun da yok gibi..

mi? acaba?

Gün ağardı.. lambalar söndü.. tamam.

Peki akşam olunca?

Koda bakalım.. akşam için bir şey söylemiş miyiz? Hayır. 
“`
Işık çoksa, sön
Işık çoksa, sön
Işık çoksa, sön
..
..
“`

Tek söylediğimiz bu. Akşam yanması için herhangi bir şey söylemedik.

Şimdi yapmasını istediğimiz şey aslında yine bir Algılama.

Cihazdan “Akşam olduğunu algılamasını” istiyoruz. Yani -linkte de geçtiği üzere- efsanevi IF‘i kullanma zamanı 😉

Kodlarını yazalım..

“`
if (x < 500) {
digitalWrite(3, HIGH);
}
“`

Şimdi Arduino ile Empati zamanı  Kendinizi cihazın yerine koyun ve ADIM ADIM hatta gerektiğinde virgül virgül harf harf yazılmış olan kodları işlediğinizi düşünün. A=15, b$ = “Robbie” 😉 gibi değer atanan değişkenler fazla ise, elinize kağıt kalem de alabilirsiniz.

Bakalım..

int x;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);}

void loop() { 
  x = analogRead(A0);
  if (x > 200) {
      digitalWrite(3, LOW); }

  if (x < 500) {
    digitalWrite(3, HIGH); }

}

Bu kodlar işimizi görecek.. Söylediğimiz cümleyi de düzelttiğimiz için, artık olması gerektiği gibi..
Ancak 🙂
Sabahın ve akşamın ilk saatlerinde lambaların korku filmlerindeki gibi yanıp söndüğünü göreceğiz..
?

 

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir