Olmak yada olmamak ! İşte bütün mesele bu.

Sayısal elektroniğin temelinin sadece “1” bir ve “0” sıfırdan ibaret olması sokaktaki insan açısından bir şey ifade etmese de günümüzde hayatımız “1” ve “0” dan oluşmuş bir dünya ile sarılmış durumda.

Aslında pratik açıdan baktığımızda bir şey ya vardır ya yoktur, ya açıktır yada kapalıdır veya çalışıyordur yada çalışmıyordur.  Matematik açısından “1” ve “0” dan oluşmuş bu “ikili tabanda sayma düzeni” ile aklınıza gelebilecek her şeyi ifade etmek mümkündür.

İnsanoğlu aya ilk adımını bastığında nasıl çağ atlamışsa siz de Arduino kullanmaya başladığınızda şimdi yazacağım komutu kullanarak kendi dünyanızın uydusu aya ayak basmış olacaksınız.

İşte komut;  digitalWrite(13, HIGH);

Artık başınız göğe erdi bin türlü zahmete girerek aldığınız Arduinonun üstünde olan topu topu 1 adet (ışık yayan diyotu -ama siz öyle demeyin) LED i yakmayı başardınız 🙂

digitalWrite
komutunda 2 adet parametre olduğunu görüyorsunuz; birinci parametre Arduinonun 13 numaralı bacağına işlem yapacağınızı ifade ederken sonraki parametre bu bacağın “1” mi “0” mı olacağını söylüyor “1” için HIGH “0” için LOW kullanıyoruz.

Arduinoda yazılan programa sketch deniyor, Arduino programınının menülerini kurcaladığınızda example/basics/blink sketch ini açtığınızda aşağıdaki sketch i göreceksiniz. Programda gerekli Türkçe açıklamaları da koydum.

Aşağıdaki blink programında
” /* ” ile başlayan satırlar dikkate alınmaz açıklama ve not satırlarıdır  ” */ ”  işaretine kadar hiç bir komut çalıştırılmaz birden fazla satırı kapsayabilir.
“//”  işareti de  programcının notları, açıklamalarıdır işaretten satır sonuna kadar yazılanlar çalıştırılmaz dikkate alınmaz.
void kelimesi program içindeki program parçacıklarını belirtmek için kullanılır yapısı “void kucukkodunAdı() { buraya komutlar gelir }”
Büyük parantezler “{…}” bir arada çalışacak kodları gruplamak için kullanılır.
“;” noktalı virgül işaretini her komuttan sonra kullanıyoruz.

/*
  Blink
  LED i devamlı 1 saniye yakar 1 saniye söndürürür.
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
void setup() {
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT); //13 numaralı bacağı çıkış olarak tanımladık
}

void loop() {
  digitalWrite(13, HIGH);   // 13 nolu bacağa bağlı LED i aç >> BAŞINIZ GÖĞE ERDİ Mİ 🙂
  delay(1000);              // bir saniye bekle, 1 saniye=1000 milisaniye
  digitalWrite(13, LOW);    // LED i kapat
  delay(1000);              // 1 saniye bekle
}

Yukarıdaki Loop() bölümü içindeki kodlar sonsuz döngüde devamlı çalıştırılır.
loop() dan önce görülen setup() bölümü program başlamadan önce yapılan ayarlamalar ve bildirimlerdir.
pinMode(13, OUTPUT); bildirimi 13 numaralı bacağın çıkış olarak kullanılacağını bildiriyor.

Bazı komutların büyük harf küçük harf karışık yazılmasının nedeni kodu okurken görsel olarak daha anlaşılır olması içindir bilgisayarın ilk icad edildiği yıllarda bir macar programcı bu yazım şeklini icad ettiğinden MacarKodlaması olarak da anılmaktadır.

İlk programla beraber başımız göğe erdi içimizdeki ayı feth ettik, şairin dediği gibi;

Olmak yada olmamak !  İşte bütün mesele bu.

 

Ömer Koman

Elektronik hakkında ilk hatırladığım şey 5-6 yaşlarımdayken babamın arkadaşı radyocunun tezgahına burnumu dayayıp lambalı radyoları tamir edişini izlemekti...

17 comments

  1. […] gibi bardağı azar azar doldurarak bir çok oransal/ölçülebilir değer oluşturabiliriz. Daha önceki LED yakıp söndürdüğümüz yazımızda aslında oransal olarak ledi tam dolduruyorduk. Ama […]

  2. Mustafa AY dedi ki:

    Merhabalar,

    Sitede forum gibi soru sorabileceğim bir yet bulunmadığı için buradan sormak zorunda kaldım.

    Benim yapmak istediğim robot bir yere sensörleri aracılığıyla atıyorum 12 sn de vardı. Sonra geri dönerken de daha hızlı olması için delay(120) yapıp 12 saniye gitmesini istiyorum.

    Ancak robotun kaç saniye gittiğini nasıl hesaplayabileceğimi anlayamadım. SimpleTimer gibi kütüphaneler buldum ancak içindeki Serial.begin(9600) kısmını bir türlü çözemedim. Anlayamıyorum diyebilirim.

    • Ömer Koman dedi ki:

      Delay ile süre ölçemezsiniz delay işlemciyi verilen süre kadar bekletir. süre ölçümlerini milis() fonksiyonu ile yapın…

      Arduino Help kısmında Reference kısmına bakarsanız şöyle yazar:

      millis()
      Returns the number of milliseconds since the Arduino board began running the current program.

      milis() fonksiyonu arduinoya enerji verdiğiniz andan itibaren kaç milisaniye geçtiğini size söyler.

      Bu bilgiden faydalanarak harekete başladığınız anda milis() değerini saklayın hareket bittiğinde milis() okutup sakladığınız değeri son okuduğunuz milis() değerinden çıkarın, elde ettiğiniz değer geçen net süredir.
      (serial.begin ve serial.print komutları ile ilgili sitede yazılar var bir inceleyin derim)

      örnek

      unsigned long time1;
      unsigned long time2;

      void setup(){
      Serial.begin(9600);
      }
      void loop(){
      Serial.print("Başlama zamanı: ");
      time1 = millis();//hareket baslama anini sakla
      //prints time since program started
      Serial.println(time1);

      // wait a second so as not to send massive amounts of data
      delay(1000);//test için 1 saniye kadar beklettik. siz burada aracı hareket ettiriyorsunuz farzedin

      Serial.print("Bitiş zamanı: ");
      time2 = millis();
      Serial.println(time2);//hareket bitis

      Serial.print("Geçen süre: ");
      Serial.println(time2-time1);//hesapla yaz

      }

  3. Mustafa AY dedi ki:

    Merhabalar,

    milis() işlevinin ne işe yaradığını okudum ancak anlamadığım yer “Serial.begin(9600)” kısmıydı.

    Onu da internette daha önceden aradım ancak bulamadım serial nedir diye. Şimdi sitede anlatım var dediniz sağ üstteki aramaya basınca 4 tane sonuç çıktı ki onlar da anlatım değil, kodlarda kullanılan serial ler. RObot bilgisayara falan bağlı olmayacağı için bilemiyorum. Sanki serial bilgisayara takılı iken haberleşmeyi sağlıyor.

    Kendim ise şöyle bir yol buldum en sonunda:

    [code]
    void loop () {
    digitalWrite(solmotor = HIGH);
    digitalWrite(sagmotor = LOW);
    sureSay();
    }
    void sureSay( void ) {
    delay(100);
    sure += 100;
    }
    [/code]

  4. sabri dedi ki:

    milis() == Milisaniye çözünürlüğünde olan ve başlangıcı sistem start zamanına veya daha sonra resetlenmiş/işlenmiş data adres veya değişkenindeki toplam süredir.Komut iç döngü komutudur(zaten argüman olması gerekir öyle olmazsa). Ben arduino da yeniyim ama yaklaşık 8 yıldır python programcılığıyla uygulama yazmaktayım(kendine müslüman :=)).

  5. tutkun dedi ki:

    @Mustafa Ay,
    Programında mantık hatası var bence. Şöyle ki;

    void sureSay( void ) {
    delay(100); // 100 milisaniye bekletiyorsun
    sure += 100; // sonra tanımladığın değişkene 100 milisaniye olduğunu ekliyorsun
    }

    halbu ki şöyle yapabilirsin:

    void yapilanIslem(void) {
    // burada bir is yaptırıyorum
    }

    void loop() {
    baslangicSuresi = milis(); // Saat: 19:26
    yapilanIslem(); // işlem süresi ölçülecek işlemler
    bitisSuresi = milis(); // Saat: 19:27
    Serial.print("Toplam İş Süresi: ");
    Serial.print( bitisSuresi - baslangicSuresi ); // Süre: 19:27 - 19:26 = 00:01
    }

    Yukarıda ikinci süreden ilk süreyi çıkardık ve kalan süre, arada geçen süre olarak ekrana yazıldı.

    NOT: Tabii ki 19:27 gibi bir şey yok. Ben onu anlaşılır olması açısından yazdım 🙂 Bu değerler integer türündendir muhtemelen(hiç pic programlamamış biri olarak) 🙂

  6. […] parlamaya başlar eğer ters bağlarsanız birşey olmaz parlamaz. Bu özelliği Arduino üzerinde şu yazımızda test […]

  7. Elgun dedi ki:

    Merhabalar. Ben arduinoyla kulucka makinesi yapmak istiyorum. Böyle bir kod yazdım. Şimdi bana bide belli bir zaman aralıklarında başka bir pine HİGH LOW vermek lazım. Yumurtalari çevirecek motoru açıp kapatmak için. Ama bu codlara karışmaması lazım. Zannımca bunu millis() fonksiyonuyla yapa bilirim. Biraz uğraştım. Bu kpnuda bi tavsiyede buluna bilirmisiniz.
    #include // dht11 kütüphanesini ekliyoruz.
    #define DHT11PIN 2 // DHT11PIN olarak Dijital 2’yi belirliyoruz.

    dht11 DHT11;
    int relay2 = 31;
    float istilik;
    float gerginlik;
    int istilikPini = 0;
    int rele = 30;

    void setup()
    {
    pinMode(rele,OUTPUT);
    pinMode(relay2,OUTPUT);
    Serial.begin(9600);
    }
    void loop()
    {
    gerginlik = analogRead(istilikPini);
    gerginlik = (gerginlik / 1023) * 5000;
    istilik = gerginlik / 10.0;

    Serial.println(“\n”);
    // Sensörün okunup okunmadığını konrol ediyoruz.
    // chk 0 ise sorunsuz okunuyor demektir. Sorun yaşarsanız
    // chk değerini serial monitörde yazdırıp kontrol edebilirsiniz.
    int chk = DHT11.read(DHT11PIN);
    Serial.print(“Nem (%): “);
    Serial.println((float)DHT11.humidity, 2);

    Serial.print(“Sicaklik (Celcius): “);
    Serial.println((float)DHT11.temperature, 2);

    // Çiğ Oluşma Noktası, Dew Point
    Serial.print(“Cig Olusma Noktasi: “);
    Serial.println(DHT11.dewPoint(), 2);
    Serial.print(“temperatur miqdari:”);
    Serial.print(istilik);
    Serial.println(” derece”);
    if (istilik 26)
    {
    digitalWrite(rele,LOW);
    }
    else if (DHT11.humidity 40)
    {
    digitalWrite(relay2,HIGH);
    }
    delay(1000);

    }

  8. Ömer Koman dedi ki:

    işleri bölümlere böl mesela 1.iş sıcaklık kontrol olsun sonra 2.iş motor çevir olsun. sırasıyla 1.işi yap sıcaklığı kontrol et, sonra 2.iş motor çevirme olacak ama motoru çevirmek için içerde bir sayaç yap mesela 100 kere ısı kontrolu yaptığında motoru 1 kere çevir filan gibi bir mantık olur herhalde. ayrıca projeyi beğendim bittikten sonra resimlerini filan yayınlarsanız yada sitemizde proje olarak koymak isterseniz yer veririz seve seve.

  9. Şule dedi ki:

    Merhaba, ben kapasitif sensörle çalışan bir devre yapmak istiyorum. Kapasitif sensör için hangi Arduino’yu kullanacağıma karar veremedim, sizlerin bir önerisi var mı?

    • Ömer Koman dedi ki:

      elinizde ne varsa onunla çalışır hepsi ile çalışır yani. sonuçta kondansatörün dolup boşalma zamanı ölçülecek.

  10. İsmail dedi ki:

    Merhaba güzel bir yazı olmuş benim çok basit bir projem var 6dklık bır ışık gösterisi yapıcam bunu tek bir ışıkla yapıcam yani tek bir ledi 6 dk gibi bir sürede açıp kapatıcam bu belli zamanlarda çalışıcak belli sürelerde durucak bunun için kullanıcağım delay komutu 6dk süreceği için 6000 hatta 10000 lere kadar çıkması gerektiği için sıkıntı olurmu acaba ne yapmam gerekli

  11. Ömer Koman dedi ki:

    Delay (1000) kullanip while icinde döndurun. aşağıdaki kod 1 dk sayar, 1saat saymak için 3600 e kadar saymanız lazım

    int dksay=0
    while(dksay<60){
    delay(1000);
    dksay++;
    // zamanı sayarken kontrol etmeniz gereken şeyler varsa bu satırda yapın
    }

  12. alperen dedi ki:

    hocam arduino ile araba yaptım arabama park sensörüde eklemek istiyorum fakat bir türlü gerçekleştiremedim kodlarda yardımcı olurmusunuz ?

  13. Emre dedi ki:

    Merhaba ben belirli sürelerle yanan Led yapmak istiyorum açıklamam gerekirse önce 5 saniye boyunca 1. Işık yanıcak 10 saniye 2. Işık devamında ise süreler değişecek bunu nasıl yapabilirim hiç anlamıyorum yardım eder misiniz lütfen

    • Ömer Koman dedi ki:

      void setup() {
      // initialize the digital pin as an output.
      // Pin 13 has an LED connected on most Arduino boards:
      pinMode(11, OUTPUT); //11 numaralı bacağı çıkış olarak tanımladık
      pinMode(12, OUTPUT); //12 numaralı bacağı çıkış olarak tanımladık

      }

      void loop() {
      digitalWrite(11, HIGH); // 1.led yaktık
      delay(5000); // 5sn bekle
      digitalWrite(11, LOW); // 1.led sondur
      digitalWrite(12, HIGH); // 2.led yaktık
      delay(5000); //
      delay(5000); // toplam 10sn bekle
      digitalWrite(12, LOW); // 2.led sondur
      // buradan tekrar başa döner
      }

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar