Arduino Tarifleri #5 – IF-ELSE Komutunu Kullanmak
Bu bölümde artık kendimizi biraz daha kod yazıyormuş gibi hissedebiliriz 🙂 Çünkü bundan önce yaptığımız videolarda sadece dijital giriş çıkış işlemleri yapmıştık ama artık işin içine mantığımızı da dahil etme zamanı geldi. If Else konusunua giriş yapıyoruz. Çünkü mantıksız kod çok sinsidir. 🙂
Mantık diyorum çünkü, bu videoda koşul komutu olan if-else komutunu öğreneceğiz arkadaşlar ve bu komut kullanırken biraz dikkatli olmayı gerektiriyor. Önceki videolarda kodda hata yaptığımızda derleyicimizin hata verdiğini gördünüz değil mi? İşte öyle bir hata türü daha var ki derleyicinin ruhu duymaz onu. Mantık Hataları… Evet mantık hataları, ismi cafcaflı değil ama gerçekten bela bir şey. Her şeyi doğru yaparsınız, bağlantılar tamdır, kod hata vermez ama sistem çalışmaz. İşte bu mantık hatası dediğimiz hatalar en çok bu if-else komutlarında olur arkadaşlar.
Bu kadar hakkında yazdık çizdik ama bu video mantık hataları üzerine yapılmış bir video değil. Bu videoda ef-else kodunu kullanmayı, koşula bağlı kodlar yazmayı öğreneceğiz. Sadece bunu iyi öğrenmezsek başımıza ne geleceğine dikkat çekmeye çalıştım 🙂 Video yeteri kadar iyi merak etmeyin, zaten bu kod ileride çok fazla kullanılacak dolayısı ile zaman içinde daha iyi oturacaktır. Siz anlatılanlara verin kendinizi. İyi çalışmalar dilerim, hoşça kalın 🙂
Geçen videodan önce izlemiş olmanız lazım ama izlemedi iseniz pull-down/pull-up dirençlerini es geçmeyin arkadaşlar. Pull Down / Pull Up dirençleri. = https://youtu.be/AKLXtNABYqY
MALZEMELER
Bu içerik için gerekli olan tüm malzemeleri www.robo90.com üzerinden güvenle satın alabilirsiniz.
- Arduino UNO R3 – SMD Klon (CH340 Çipli) – USB Kablo Hediyeli
- 12x12x7mm Push Buton – Tact Buton x5
- 10K Direnç Paketi – 1/4 W – 10 Adet
- 220R Direnç Paketi – 1/4 W – 10 Adet
- Kırmızı Led – 5mm – 10 Adet
- Elektronik Breadboard – Büyük Boy – 830 Pin
- Jumper Kablo
DEVRE ŞEMASI
ARDUINO KODU
Arduino Tarifleri Serisi Kategorisi
Etiketler
12 Yorum
Bir yanıt yazın Yanıtı iptal et
Daha fazla sonuç göster
butona bir kere basıldıktan sonra if in altındaki bütün komutların sırasıyla sürekli devam etmesini nasıl sağlayabilirim lütfen yardım
4 5 4 5 4 5… şeklinde yanması gerekiyor
else if(digitalRead(1)==HIGH)
{
digitalWrite(4, HIGH);
delay (sure);
digitalWrite(4, LOW);
delay (sure);
digitalWrite(5, HIGH);
delay (sure);
digitalWrite(5, LOW);
delay (sure);
}
İf koşulunun için de while döngüsü yapabilirsiniz. 454545 şeklinde yanması için ise while döngüsü içinde tersleme ~ koşulunu koyarsanız olacaktır.
Yada for döngüsü içinde de olabilir.
For(i=0;i<25;i++)
{
digitalwrite(4,high);
Delay
Digitalwrite(5,high);
Delay
Sonrada söndürme komutları
}
Zaten kodlamayla biraz uğraştıktan sonra algoritma
mantıgınızı geliştirdikçe bir işi yazılıma yaptırmak için farklı şeyleri deniyor olacaksınız. Tabi ki en sonunda en uygun olanla devam edeceksiniz. Kolay gelsin.
#include
#include
//RTC bağlantı pinleri
//CLK -> 6, Data -> 7, RST -> 8
virtuabotixRTC RTCSaat(6, 7, 8);
//LCD ekran nesnesini oluşturuyoruz.
LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);
//Eğer LCD ekrana yazı gelmiyorsa yukarıdaki kodu
//bununla değiştirmeniz gerekmektedir.
//LiquidCrystal_I2C lcd(0x27,16,2);
int but1 = 2; // buton pinlerini atadık
int b1d; // Buton 1 okunan değerini kaydetmemiz için db1 adında değişken atayoruz…ve diğerleri için
int saat,dakika,saniye,gun,ay,yil;
void setup() {
pinMode(but1 , INPUT); // Buton pinlerini giriş olarak atadık
lcd.begin(); //lcd’yi başlatıyoruz
// lcd.backlight(); //lcd arka ışığını açıyoruz.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(” MERHABA”);
lcd.setCursor(0,1);
lcd.print(“FIAT UNO 70SXie”);
delay(1000);
// RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
// saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl
//(haftanın günü pazartesi için 1 yazıyoruz.)
//RTCSaat.setDS1302Time(00, 16,15,3, 15, 01, 2020);
}
void loop() {
b1d = digitalRead(but1); // butonları oku ve durum bilgilerini değişkenlere kaydet
if (b1d == HIGH); // b1d HIGH ise ( bu bağlantıda 1. butona basılmış ise)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“SOL ON KAPI”);
lcd.setCursor(0,1);
lcd.print(” AÇIK”);
delay(5000);
}
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“FIAT UNO 70SXie”);
lcd.setCursor(0,1);
lcd.print(” By_KOP-GARAGE”);
delay(5000);
//RTCSaat.setDS1302Time(00, 04,23,3, 17, 03, 2021);
RTCSaat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
saat=RTCSaat.hours;
dakika=RTCSaat.minutes;
saniye=RTCSaat.seconds;
gun=RTCSaat.dayofmonth;
ay=RTCSaat.month;
yil=RTCSaat.year;
char date[10];
sprintf (date,”%02d/%02d/%02d”,gun,ay,yil);
char zaman[9];
sprintf (zaman,” %02d:%02d”,saat,dakika);
// Tarih ve Saat bilgisini LCD ekrana yazdırıyoruz.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Tarih:”);
lcd.setCursor(6,0);
lcd.print(date);
lcd.setCursor(0,1);
lcd.print(” Saat:”);
lcd.setCursor(7,1);
lcd.print(zaman);
delay(5000); // 1 saniye bekletiyoruz.
}
}
Bu kod’da bir adet buton kullandım, ve else kullanamadım, çünkü else kullandığımda = else without previous if hatası alıyorum, else koymadığımda kod çalışıyor fakat bu seferde = ilk parantezler ve ikinci parantezlerdeki tüm kodlar ardarda çalışıyor, buton basılı olsun olmasın farketmiyor. direnci unutmadım. direnci çıkarsamda birşey değişmiyor if komutu else ile yüklenmiyor else without previous if hatası veriyor, else olmadan yükleniyor ama bütün yazıları yazıyor sırayla, parantezler yokmuş gibi.
Merhaba, if satırının sonunda kullandığınız ; yüzünden sorun oluyor. Onu silerseniz else kullanabilirsiniz.
merhabalar kolay gelsin merak ettiğim birşey var mesela bir butonumuz olsun butona basınca led yanıcak ama butona belirli bir sayı kadar basmak gerek mesela butona 3 kere basınca ledler yansın gibi yardımcı olursanız çok sevinirim şimdiden sağolun 🙂
bir değişken atayıp yapmalısın.Mesela buton_durumu v.b
başta buton_durumu değişkeni atayıp sıfır yap şu şeklde int buton_durumu = 0;gibi veya(define buton_durumu 0)bir değişken atayıp buton_durumu gibi ve kodda da her butona basılınca buton_durumu+1
de sonrasında if(buton_durumu == 3){
lediyak;(buralara gerçek kodları yaz)
}
Şu soruya kimseden cevap bulamadım.
aslında çok basit olması gereken bir konu. Ama cevap yok.
Şöyle ki;
Basit bir ldr devresi. 7 adet led var. bu ledleri ldr den gelen bilgiye göre belli aralıklarda, belli kombinasyonlar ile yakmak istiyorum. mesela 900 ile 800 arasında 1,3,5,6 yanacak. 800 ile700 arası 1,2,6,7 yanacak. 700 ile 600 arası 2,4,5,6, numaralı ledler yanacak … gibi. Bunun kodunu 1 haftadır uğraşmama rağmen yapamıyorum. kimseden de cevap alamadım. bir el atsanız diyorum.
900 ile 800 ARASI DERKEN ???
sıcaklığı analog olarak devreye güç verip if ve else komutlarına görede yazacaksız ( komik bulabilirsin ama olsun yazıyım dedim
int ldr = 12;
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led 5 = 7;
int led6 = 8;
int led7 = 9;
void loop() {
int isik = analogRead(A0);
Serial.println(isik);
delay(1000);
if(isik > 285){
digitalWrite(led1,LOW);
}
if(isik < 285){
digitalWrite(led1,HIGH);
}
}
bundan birkaç tane yapıp istediğin ledleri açıp kapatabilirsin(pinleri istediğin yere tak Analog pinlere takma ama ldr hariç onu Analog pinlerden birine takman gerek)
too few arguments to function ‘void digitalWrite(uint8_t, uint8_t)’
hatasını nasıl giderebilirim
teşekkürler…