Öztürk Web | Arduino Öğreniyorum Bölüm 6

Arduino Öğreniyorum Bölüm 6

1 ay önce

Okuma Sayısı

201

Konu Kategorisi= Arduino  Kategoriye Git

Arduino Öğreniyorum Bölüm 6

Arduino Öğreniyorum Bölüm 6

Klavyeden girilen değere göre yön değiştirme

Selamınaleyküm

Bu bölümde klavyeden girilen yön bilgisine göre ledlerimizin yanıp sönme yönünü ve delay sürelerini değiştireceğiz, bunu yaparken değişkenlerimizi seri porttan girilen değerlere göre değiştirip void loop() içinde kullanmayı öğreneceğiz

Bu sefer önce kodları verip daha sonra detayları anlatmak istiyorum. Eğer okumak istemezseniz sayfanın altında videolu anlatım mevcut.

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
}

/* 
 *  seri port ekranından arduinoya gönderilecek komutlar
 *  yön vermek için sol, sag, orta, hepsi, kelimelerini kullanın 
 *  yanıp sönme hızını belirlemek için speed:xxx kalıbını kullanın örneğin 200 ms için speed:200  
*/

String yon = ""; // burada string veri tipinde yon adında bir değişken tanılmadık bu değişkene program çalışırken göndereceğimiz değer sayesinde ledlerin yanma yönü değişecek 
int hiz = 500; 
// integer tipinde ki hiz değişkenimiz ise  default olarak 500ms olarak belirledik ilk çalışmada ledlerimizin delay süresini belirleyecek daha sonra bizim komutumuza göre çalışacak

void loop()
{
  if (Serial.available())
  {
    String a = Serial.readString(); // a değişkenimize seri ekrandan gönderdiğimiz değişkeni atadık
    String b = a.substring(0, 6); // b ' ye ise substring fonksiyonu ile girilen kelimenin ilk 6 karakterini atadık bunu hız için kullanılacak kalıbı yakalamak için yapıyoruz
    int x = a.substring(6).toInt(); 
    // x'e ise hız kalıbı kullanılmış ise speed: değerinden sonra girilen sayıları yakalamak için a'ya girilen değerin ilk 6 karakterinden sonraki tüm değeri atadık

    if (a == "sag") // eğer a değişkeni sag kelimesine eşit ise yon değişkenimize sag kelimesini atadık
    {
      yon = "sag";
    }
    else if (a == "sol") // eğer a değişkeni sol kelimesine eşit ise yon değişkenimize sol kelimesini atadık
    {
      yon = "sol";
    }
    else if (a == "orta") // eğer a değişkeni orta kelimesine eşit ise yon değişkenimize orta kelimesini atadık
    {
      yon = "orta";
    }
    else if (a == "hepsi") // eğer a değişkeni hepsi kelimesine eşit ise yon değişkenimize hepsi kelimesini atadık
    {
      yon = "hepsi";
    }
    else if (a == "off") // eğer a değişkeni off kelimesine eşit ise yon değişkenimize off kelimesini atadık
    {
      yon = "off";
    }
    
    //hız için gereken kontroller
    
    if (b == "speed:") // ekrana speed:xxx kalıbı yazılmış mı kontrolü yapıyoruz
    {
      hiz = x; // eğer speed:xxx kalıbı  kullanılmışsa ilk 6 karakterden sonra girilen değeri hiz değişkenine atıyoruz
    }
    else
    {
      hiz = hiz; // aksi halde tüm durumlarda hiz değişkenimiz default olarak ayarladığımız hiz = 500 ms olarak çalışacak  
    }

    // girilen değerleri ekrana yazdırmak için kullanılan kod parçamız

    Serial.println("delay = " + (String)hiz); 
    Serial.println("yon = " + yon);
    Serial.println("---------------------------");
  }

  if (yon == "sol") // girilen değere göre ışıkların yönünü değiştiriyoruz
  { 

    digitalWrite(13, 1);
    delay(hiz); // yukarıda aldığımız hız değişkenini yapılacak işin süresini belirleyen delay()  fonksiyonuna yazıyoruz
    digitalWrite(13, 0);
    delay(hiz);

    digitalWrite(12, 1);
    delay(hiz);
    digitalWrite(12, 0);
    delay(hiz);

    digitalWrite(11, 1);
    delay(hiz);
    digitalWrite(11, 0);
    delay(hiz);

    digitalWrite(10, 1);
    delay(hiz);
    digitalWrite(10, 0);
    delay(hiz);

    digitalWrite(9, 1);
    delay(hiz);
    digitalWrite(9, 0);
    delay(hiz);
  }
  else if (yon == "sag") // girilen değere göre ışıkların yönünü değiştiriyoruz
  { 

    digitalWrite(9, 1);
    delay(hiz);
    digitalWrite(9, 0);
    delay(hiz);

    digitalWrite(10, 1);
    delay(hiz);
    digitalWrite(10, 0);
    delay(hiz);

    digitalWrite(11, 1);
    delay(hiz);
    digitalWrite(11, 0);
    delay(hiz);

    digitalWrite(12, 1);
    delay(hiz);
    digitalWrite(12, 0);
    delay(hiz);

    digitalWrite(13, 1);
    delay(hiz);
    digitalWrite(13, 0);
    delay(hiz);
  }
  else if (yon == "orta")// girilen değere göre ışıkların yönünü değiştiriyoruz
  {

    digitalWrite(11, 1);
    delay(hiz);
    digitalWrite(11, 0);
    delay(hiz);

    digitalWrite(10, 1);
    digitalWrite(12, 1);
    delay(hiz);
    digitalWrite(10, 0);
    digitalWrite(12, 0);
    delay(hiz);

    digitalWrite(13, 1);
    digitalWrite(9, 1);
    delay(hiz);
    digitalWrite(13, 0);
    digitalWrite(9, 0);
    delay(hiz);
  }
  else if (yon == "hepsi") // girilen değere göre ışıkların yönünü değiştiriyoruz
  {

    digitalWrite(9, 1);
    digitalWrite(10, 1);
    digitalWrite(11, 1);
    digitalWrite(12, 1);
    digitalWrite(13, 1);
    delay(hiz);

    digitalWrite(9, 0);
    digitalWrite(10, 0);
    digitalWrite(11, 0);
    digitalWrite(12, 0);
    digitalWrite(13, 0);
    delay(hiz);
  }
  else if (yon == "off") // eğer off yazıldıysa ışıkların tamamını söndürüyoruz
  {

    digitalWrite(9, 0);
    digitalWrite(10, 0);
    digitalWrite(11, 0);
    digitalWrite(12, 0);
    digitalWrite(13, 0);
  }
}

Arduinoda da substring fonksiyonu verilen değişkenin içindeki karakterleri  tarar  ve bizim istediğimiz kısmını arayabilir biz kodlarımızda substring(0, 6) şeklinde kullandık bu kullanım şekli verilen dizinin sıfırıncı karakterinden başla altıncı karakterine kadar tara demek oluyor. Bu örnekte girilen değer “göndermek” olsaydı bize gönder sonucunu verecekti . aynı kelimeyi  substring(6) olarak tarasaydık bu sefer sadece “mek” sonucunu alırdık yani virgülden önceki değer hangi karakterden taramaya başlanacağını sonraki değerde nerede duracağını bildiriyor.

Kodlarımızda yon ve hiz değişkenlerini loop yada setup içine tanımlamadık  zira setup içine yazarsak sadece bir kere loop içine yazarsak sürekli tanımlanmış olacaktı ve programımız istediğimiz gibi çalışmayacaktı.

Kodlarımızı çalıştırmak için iki bölüm önceki videoda anlatılan devreyi kurmanız gerekiyor videoyu youtubeda seyretmek için buraya,  sitemdeki anlatımı okuyup videoyu seyretmek için buraya , Arduino videolarımın tamamı için buraya tıklayabilirsiniz.

Eğer devrenizde hazırsa seriport ekranınıza kodların arasına yazdığım yön komutlarını yada speed:xxx kalıbını kullanarak hız komutlarını yazabilirsiniz.

Bu arada youtube’daki videolarımı beğenmeyi, kanalıma abone olmayı ve yorum yapmayı ihmal etmeyin lütfen.

Kolay gelsin

 

Kategoriler

İşinizi İnternete Taşımak İstermisiniz ?