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 videoyuyoutubeda 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