28 Haziran 2025 Cumartesi

 


1. char Karakter Dizisi

char, tek bir karakteri temsil eden bir veri tipidir (örn. 'A', 'b', '7'). Birden fazla karakteri yan yana depolamak istediğimizde, bu char'ları bir dizi içinde kullanırız. Bu yapıya karakter dizisi veya C tarzı string denir. C/C++'ta metinler genellikle char dizileri olarak depolanır ve null karakteri (\0) ile sonlandırılır. Bu null karakteri, dizinin nerede bittiğini belirtir.


- Null Karakteri(\0):

\0 karakteri, ASCII değeri 0 olan özel bir karakterdir. Bir karakter dizisinin (char array) sonunu işaretlemek için kullanılır. Buna null sonlandırma (null termination) denir.

Bir char dizisinin belirli bir uzunluğu olsa bile, o dizideki "gerçek" metnin nerede bittiğini anlamanın tek yolu “\0” karakteridir. Metin işleme fonksiyonları (örneğin strlen(), strcpy(), Serial.print() gibi) bu karakteri okuyarak dizinin sonuna ulaştıklarını anlarlar. “\0” olmasaydı, bu fonksiyonlar dizinin dışındaki rastgele bellek bölgelerini okumaya devam edebilirlerdi. Bu da programın çökmesine veya hatalı verilere yol açabilirdi. Nitekim yaptığımız uygulamada; char türünde birden fazla dizi tanımladığımız zaman, dizilerin eleman sayısını 1 eleman fazla tanımladık.  1 eleman fazla tanımlamadığımız zaman, seri port ekranına yazdırdığımızda iki dizi verileri birbirine karıştı. Bu sebeple dizi tanımlarken eleman sayısını 1 fazla tanımlamak gerekmektedir. Fazla tanımlanan bu son dizi elemanını “\0” olarak da tanımlayabiliriz. 



- Karakter Dizisi Tanımlama Örnekleri:



a. char dizi_a[3]={'a','b'};    
3 elemanlı dizi tanımladık ama içine 2 eleman koyduk. Program 3. elemanı otomatik olarak “\0” ile doldurur.

b. char dizi_b[6]={'c','d','e','f'};  
6 elemanlı dizi tanımladık ama içine 4 eleman koyduk. Program 5. ve 6. elemanı otomatik olarak “\0” ile doldurur.

c. char dizi_c[7]={'m','e','h','m','e','t','\0'};
Ya da kendimiz doğrudan dizinin sonuna sonlandırma karakterini elleyebiliriz.

d. char mesaj1[ ] = "Merhaba";
mesaj1 dizisi tanımladık ama kaç elemanlı olduğu belirtmedik. Bu durumda derleyici diziyi, 7 elemandan ve 1 “\0”dan oluşan 8 elemanlı bir dizi olarak boyutlandırır. 

e. char isim[10] = "Arduino";
10 elemanlı isim adında bir dizi tanımladık ama 7 karakter ekledik. Bu durumda bu dizi bellekte şu şekilde saklanır:



f. char isim[10];     // 10 karakterlik boş bir dizi tanımladık.
isim[0] = 'A';
isim[1] = 'l';
isim[2] = 'i';
isim[3] = '\0';             // Metnin burada bittiğini belirtmek için null karakter ekledik.
Serial.println(isim);         // Çıktı: Ali. (Eğer “\0” eklemeseydik, "Ali"den sonra rastgele karakterler de gelebilirdi.)

g. Uzun dizileri şu şekilde tanımlayabiliriz:
1. char myString[ ] = "This is the first line"
2.    " this is the second line"
3.    " etcetera";

h. sizeof(dizi_adi); 
Bu komut hem sayı dizilerinin hem de karakter dizilerinin (yani stringlerin) bellekte kapladığı alanı bayt cinsinden verir. Karakter dizilerinin kapladığı alanı verirken null sonlandırıcılı (\0) karakterini de dâhil eder.
char mesaj[ ] = "Merhaba";     // 7 karakter + 1 null sonlandırıcı karakter.
int diziBoyutu = sizeof(mesaj);    //mesaj dizisinin boyutunu bayt olarak verir.
           //Çıktı: 7 + 1 = 8 byte.

i. String sehir[ ] = {"ankara", "bolu", "karabuk"}; : 
String tipinde bir dizi tanımlandı.
Serial.println(sehir[0]); // Çıktı: ankara.


- Dize Dizileri: 

LCD ekranlı bir proje gibi büyük miktarda metinle çalışırken, bir dizeler şeklinde bir dizi tanımlamak genellikle kullanışlıdır. Dizelerden oluşan bir dizi oluşturmak için; veri türünden sonraki yıldız işareti koymak gereklidir. Aşağıdaki gibi bir dize dizisi tanımlayabiliriz:

char *myStrings[ ] = {"This is string 1", "This is string 2", "This is string 3","This is string 4", "This is string 5", "This is string 6"};




- İki Boyutlu Karakter Dizisi(Karakter Matrisi):

Satır ve sütundan oluşan dizilere 2 boyutlu dizi denir.


karakter dizisinin alt dizileri:  {'a', 'b', 'c'} ve {'d', 'e', 'f'}

Serial.println(karakter[0][0]);         Çıktı: a
Serial.println(karakter[0][1]);          Çıktı: b

Eğer bu alt dizileri bir string olarak işlemek isterseniz (örneğin Serial.println(karakter[0]); gibi), \0 karakterini kendiniz eklemeniz gerekir.
char karakter[2][4] = {{'a', 'b', 'c', '\0'}, {'d', 'e', 'f', '\0'}};
Serial.println(karakter[0]);         Çıktı: abc.

Eğer bir alt diziyi doğrudan bir string değişmezi (string literal) ile başlatırsanız, o zaman derleyici otomatik olarak \0 ekler.
char metinler[2][4] = {"abc", "def"};  Dikkat: Boyutu 3 değil, 4 yaptık (\0 için).
Serial.println(metinler[0]);         Çıktı: abc.




2. Sayı Dizisi
Arduino programlamada sayı dizileri, birden fazla aynı türden değeri tek bir isim altında depolamanızı sağlayan yapılardır. Bu, benzer verileri düzenli bir şekilde saklamak ve onlara kolayca erişmek için oldukça kullanışlıdır. Örneğin, beş farklı sensörden okuduğunuz değerleri veya bir dizi LED'in durumunu saklamak için bir sayı dizisi kullanabilirsiniz.
Bir sayı dizisi tanımlarken, dizinin veri tipini (örneğin int, float, byte), dizinin adını ve köşeli parantez içinde eleman sayısını belirtmeniz gerekir. Fakat dizileri tanımlarken elemanlarını da belirlersek; eleman sayısını belirtmenize gerek kalmaz. Derleyici verilen değer sayısına göre dizinin boyutunu otomatik olarak belirler. Örneğin; 5 elemanlı dizi oluşturup içine 3 eleman yazdığımızda geri kalan elemanlar sıfır değerini alır.
Genel tanımlama şekli aşağıdaki gibidir:

veriTipi diziAdi[ elemanSayisi ];


- Sayı Dizisi Tanımlama Örnekleri:



Dizide her indisteki değer 1 bayttır, yani 8 bit. 


a. Integer (Tam Sayı) Dizisi:
int sicakliklar[4]; : 4 adet tam sayı saklayabilen “sicakliklar” adında bir dizi.
int pin[ ]={1,2,3}; : 3 adet tam sayı saklayabilen ve değerleri başta belirlenmiş “pin” adında dizi.

b. Float (Ondalıklı Sayı) Dizisi:
float mesafeler[5]; : 5 adet ondalıklı sayı saklayabilen 'mesafeler' adında bir dizi.
float uzunluk[ ]= {1.2,5.6,2.9,7.8}; : 4 adet ondalık sayı saklayabilen ve değerleri başta belirlenmiş “uzunluk” adında dizi.

c. Byte Dizisi (0-255 arası değerler için):
byte ledDurumlar[8]; : 8 adet byte değeri saklayabilen 'ledDurumlar' adında bir dizi.

d. Eleman Sayısı Belirtmeden Tanımlama
Derleyici verilen değer sayısına göre dizinin boyutunu otomatik olarak belirler.
veriTipi diziAdi[ ] = {deger1, deger2, deger3, ...};

e. sizeof(dizi_adi); 
Bu komut hem sayı dizilerinin hem de karakter dizilerinin (yani stringlerin) bellekte kapladığı alanı bayt cinsinden verir. Karakter dizilerinin kapladığı alanı verirken null sonlandırıcılı (\0) karakterini de dâhil eder.
int sayilar[ ] = {10, 20, 30, 40, 50};         // 5 elemanlı bir int dizisi.
int diziBoyutu = sizeof(sayilar);     //sayilar dizisinin boyutunu byte olarak verir.

Çıktı: int veri tipi 2 bayt yer kaplar. Bu durumda, 5 x 2 = 10 byte olur. 


- İki Boyutlu Sayı Dizisi(Sayı Matrisi): 




3. Dizi Boşaltma
Arduino'da (ve genel C++ programlamada) bir "diziyi boşaltmak" terimi, programlama dilinde doğrudan tek bir komutla yapılan bir işlem değildir. Daha ziyade, dizinin elemanlarını belirli bir duruma sıfırlamak veya diziyi yeniden kullanıma hazırlamak anlamına gelir. Bir dizinin boyutu sabittir ve tanımlandıktan sonra değiştirilemez. "Boşaltma" işlemi, dizinin bellekten silinmesi anlamına gelmez; yalnızca içeriğinin değiştirilmesi anlamına gelir.

a. For döngüsü kullanma:
For döngüsü kullanarak dizinin her elemanına tek tek erişip istenilen değer atanır. Örneğin; sayı dizisi için sıfır(0) değeri atanır.

b. memset() Fonksiyonu ile sayı dizisi boşaltma:
memset() fonksiyonu, bir bellek bloğunu belirli bir değerle doldurmak için kullanılan bir C kütüphanesi fonksiyonudur. Dizileri hızlıca 0 veya belirli bir byte değeriyle doldurmak için çok verimlidir. Özellikle büyük dizilerde döngüden daha performanslı olabilir.

Kullanımı:
memset(dizinin_adi, atanacak_deger, boyut_bayt_cinsinden);

Örnek:
int sayilar[15];
memset(sayilar, 0, sizeof(sayilar));

Dizideki her eleman 1 bayttır. sayilar[15] dizisindeki her bir eleman da 1 bayttır. memset() fonksiyonu, bayt bayt çalıştığı için, her baytı 0 yapar, bu da int 0 değerini oluşturur.

c. Karakter dizilerini boşaltma:
Bir karakter dizisini (C-stili string) "boşaltmak" genellikle, dizinin ilk elemanına null sonlandırıcı (\0) karakterini atamak anlamına gelir. Bu, string’in boş olduğunu belirtir.

Örnek:
char isim[10] = "Arduino";     //10 elemanlık bir dizi oluşturup 7 karakter ekledik.
isim[0] = '\0'; veya diğer kullanım şekli: isim[0] = NULL

İstersek tanımladığımız bir diziyi herhangi bir indisten itibaren sonlandırabiliriz:
char isim1[7] = {'m', 'e', 'h', 'm', 'e', 't'};
char isim2[7] = {'g', 'o', 'k', 'd', 'a', 'g'};

Şeklinde 2 adet dizi tanımladık. Şimdi bunları sonlandıralım:

isim1[4] = '\0';            //4. indisten itibaren diziyi sonlandır. Yani ilk 0,1,2,3. elemanlar aktiftir.
Serial.print(isim1);     //Çıktı: mehm. Yazdırma komutu \0’ı görene kadar ekrana yazdırır.
isim2[2] = NULL;         //2. indisten itibaren diziyi sonlandır. Yani 0 ve 1. elemanlar aktiftir.
Serial.print(isim2);    //Çıktı: go. Yazdırma komutu \0’ı görene kadar ekrana yazdırır.


1. Örnek Program Kodları - Karakter Dizileri:
//NOT: dizileri tanımlarken dizi boyutunu bir eleman fazla tanımladık

char dizi1[4] = {'x', 'y', 'z'};             //4 elemanlı karaker dizisi tanımlandı.
char dizi2[5] = {'g', 'h', 'j', 'm'};     //5 elemanlı karaker dizisi tanımlandı.
char dizi3[3] = {'s', 't', '\0'};         //3 elemanlı karaker dizisi tanımlandı ve sonlandırma karakteri eklendi.
char karakter[6] = {'a', 'b', 'c', 'd', 'e'};   //6 elemanlı karakter dizisi tanımlandı.
char karakter2[4];    //4 elemanlı karakter dizisi tanımlandı ama içine eleman eklenmedi.
char karakter_matris[2][3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}};    //2 satır 3 sütun karakter matrisi
char isim[7] = "cuneyt";    //7 elemanlı karakter dizisi tanımlandı.
String sehir[] = {"adana", "yalova", "mugla"};   //3 elemanlı metin dizisi tanımlandı.
void setup()
{
  Serial.begin(9600);

  //_________dizi1, dizi2 ve dizi3'ü yazdırma_________
  Serial.print("dizi1 = "); Serial.println(dizi1);
  Serial.print("dizi2 = "); Serial.println(dizi2);
  Serial.print("dizi3 = "); Serial.println(dizi3);

  //________karakter dizisinin herhangi bir indisindeki değeri yazırma______
  Serial.print("karakter dizisinin 3. indisi= "); Serial.println(karakter[3]);
  karakter[3] = 'm';
  Serial.print("karakter dizisinin 3. indisini yeni değeri= "); Serial.println(karakter[3]);
  Serial.println(" ");

  //________karakter2 dizisinin indislerine değer atama______
  karakter2[0] = 'x';      //karakter2 dizininin 0. indisini m yaptık.
  karakter2[1] = 'y';         //karakter2 dizininin 1. indisini e yaptık.
  karakter2[2] = 'z';        //karakter2 dizininin 2. indisini h yaptık.
  Serial.print("karakter2 dizininin 0. indisi= "); Serial.println(karakter2[0]);
  Serial.print("karakter2 dizininin 1. indisi= "); Serial.println(karakter2[1]);
  Serial.print("karakter2 dizininin 2. indisi= "); Serial.println(karakter2[2]);
  Serial.println(" ");         //1 satır boşluk.

  //________çok boyutlu karakter dizileri______
  Serial.print("karakter_matris[0][0]= "); Serial.println(karakter_matris[0][0]);
  Serial.print("karakter_matris[0][1]= "); Serial.println(karakter_matris[0][1]);
  Serial.print("karakter_matris[0][2]= "); Serial.println(karakter_matris[0][2]);
  Serial.print("karakter_matris[1][0]= "); Serial.println(karakter_matris[1][0]);
  Serial.print("karakter_matris[1][1]= "); Serial.println(karakter_matris[1][1]);
  Serial.print("karakter_matris[1][2]= "); Serial.println(karakter_matris[1][2]);
  Serial.println(" ");      //1 satır boşluk.

  //_________char ile metin tanımlama__________
  Serial.print("isim değişkeninin 0. indisteki karakteri=  "); Serial.println(isim[0]);
  Serial.print("isim değişkeninin 1. indisteki karakteri=  "); Serial.println(isim[1]);
  Serial.println(" ");      //1 satır boşluk.

  //_________string ile metin dizisi tanımlama__________
  Serial.print("sehir değişkeninin 0. indisi= "); Serial.println(sehir[0]);
}

void loop() 
{

}


2. Örnek Program Kodları - Sayı Dizileri:
int sayilar[5] = {3, 6, 9, 2, 7};     //5 elemanlı bir dizi tanımlandı. {0.indis, 1.indis, 2.indis, 3.indis, 4.indis}.
int sayilar2[3];      //sayilar2 isimli 3 elemanlı bir dizi tanımlandı ama içerisine herhangi bir eleman eklenmedi.
int matris[2][4] = {{11, 12, 13, 14}, {15, 16, 17, 18}};      //2 satır ve 4 sütundan oluşan bir dizi tanımlandı. Yani matris tanımlandı.

void setup()
{
  Serial.begin(9600);

  //________sayilar dizisinin herhangi bir indisindeki değeri yazırma______
  Serial.print("sayilar dizisinin 4. indisi= "); Serial.println(sayilar[4]);
  sayilar[4] = 10;        //sayilar dizininin 4. indisi 10 yapıldı.
  Serial.print("sayilar dizisinin 4. indisinin yeni degeri= "); Serial.println(sayilar[4]);
  Serial.println(" ");    //1 satır boşluk bırakıldı.

  //________sayilar2 dizisinin indislerine değer atama______
  sayilar2[0] = 27;    //sayilar2 dizininin 0. indisini 27 yaptık.
  sayilar2[1] = 30;     //sayilar2 dizininin 1. indisini 30 yaptık.
  sayilar2[2] = 43;    //sayilar2 dizininin 2. indisini 43 yaptık.
  Serial.print("sayilar2 dizininin 0. indisi= "); Serial.println(sayilar2[0]);
  Serial.print("sayilar2 dizininin 1. indisi= "); Serial.println(sayilar2[1]);
  Serial.print("sayilar2 dizininin 2. indisi= "); Serial.println(sayilar2[2]);
  Serial.println(" ");      //1 satır boşluk bırakıldı.

  //________çok boyutlu diziler(matrisler)______
  Serial.print("matris[0][0]= "); Serial.println(matris[0][0]);
  Serial.print("matris[0][1]= "); Serial.println(matris[0][1]);
  Serial.print("matris[0][2]= "); Serial.println(matris[0][2]);
  Serial.print("matris[0][3]= "); Serial.println(matris[0][3]);
  Serial.println(" ");     //1 satır boşluk bırakıldı.
  Serial.print("matris[1][0]= "); Serial.println(matris[1][0]);
  Serial.print("matris[1][1]= "); Serial.println(matris[0][1]);
  Serial.print("matris[1][2]= "); Serial.println(matris[1][2]);
  Serial.print("matris[1][3]= "); Serial.println(matris[1][3]);

}

void loop() 
{
  
}



3. Örnek Program Kodları - Dizi Boşaltma
char dizi[7] = {'a', 'b', 'c', 'd', 'e', 'f'};
char dizi2[7] = {'x', 'y', 'z', 't', 'r', 'q'};

void setup()
{
  Serial.begin(9600);

  //belirli bir indisten itibaren diziyi sonlandırma.
  Serial.println(dizi);
  dizi[4] = '\0';       //4. indisten itibaren diziyi sonlandır. Yani ilk 0,1,2,3. elemanlar aktiftir.
  Serial.println(dizi);
  dizi[2] = NULL;       //2. indisten itibaren diziyi sonlandır. Yani 0 ve 1. elemanlar aktiftir.
  Serial.println(dizi);

  //diziyi tamamen boşaltma.
  memset(dizi2,'\0', sizeof(dizi2));     //dizideki tüm elemanlar silinir. 
  Serial.print("dizi2= "); Serial.println(dizi2);

}

void loop()
{

}


________________________________________________________________________________________________________________________________________________________

27 Haziran 2025 Cuma




String, Türkçe’de metin diye adlandırılan veri tipidir. String'lere metinsel ifadeler de denilebilir. Arduino programlamada "String" ifadesi, metinsel verileri saklamak ve işlemek için kullanılan bir nesnedir. 

Metin dizeleri iki şekilde temsil edilebilir: String veri türü ve sonlandırma/null karakteri ile biten char türündeki bir dizi. C tabanlı dillerde genellikle karakter dizileri (char array) kullanılırken, Arduino'da string sınıfı, metin manipülasyonunu daha kolay ve esnek hale getiren çeşitli fonksiyonlar sunar:

• Çıktıyı biçimlemek. 

• İki metni birleştirmek. 

• Bir metnin bir alt metnini seçmek. 

• Metindeki harfleri büyük harfe ya da küçük harfe dönüştürmek. 

• İki metni mukayese etmek. 

• Bir metinde bir alt metni ya da bir karakteri aramak. 


String Veri Tipinin Kullanımı:




string metin1, metin2, ………………………..;
int deger1, deger2, …………………………..;
char karakter; 
int string_sayi_tam;
float string_sayi_ondalikli;

1. metin1 = "Merhaba Dunya"; : Tırnak içindeki bir metin doğrudan string değişkene atandı.

2. metin2 = String('A'); : “A” harfi string olarak tanımlanıp metin2 değişkenine atandı.

3. metin3 = String(123); : “123” string ifadeye dönüştürüp metin3 değişkenine atandı.

4. metin4 = String(12, HEX); : 12 sayısının hexedecimal(16 lı) karşılığı string ifadeye dönüştürüldü.

5. metin5 = String(12, BIN); : 12 sayısının binary(2 li) karşılığı string ifadeye dönüştürüldü.

6. metin6 = metin7 + metin8; : metin7 ve metin8 string’i birleştirilip metin6 string’ine atandı.

7. metin9.concat(" diye konuştu."); : metin9 string’inin sonuna metin eklendi.

8. deger1 = metin10.indexOf('a'); : metin10 içerisinde soldan sağa doğru ilk a harfinin kaçıncı indiste olduğunu bulur.

9. deger2 = metin11.lastindexOf('a'); : metin11 içerisinde sağdan sola doğru ilk a harfinin kaçıncı indiste olduğunu bulur.

10. deger3 = metin12.length(); : metin12 içerisindeki karakter sayısını verir. Boşluklar dâhil.

11. metin13.trim(); : metin13 içerisindeki baştaki ve sondaki boşlukları kaldırır.

12. metin14.toUpperCase(); : metin14 içerisindeki tüm karakterleri büyük yapar.

13. metin15.toLowerCase(); : metin15 içerisindeki tüm karakterleri küçük yapar.

14. metin16.replace("e", "u"); : metin16 içerisindeki tüm e’leri u yapar.

15. metin17.replace("Yavaş", "Hızlı"); : metin17 içerisindeki “Yavaş” kelimesini “Hızlı” kelimesi ile değiştirir.

16. karakter = metin18.charAt(4); : metin18 string’inin 4. indisindeki karakteri bulur.

17. metin19.setCharAt(6, 'y'); : metin19’un 6. indisteki harfi “y” harfi ile değiştirir.

18. metin20.substring(5); : metin20 string’inin 5. indisten sonraki kısmını al.

19. metin20.substring(8,15); : metin20 string’inin 8. indisi ile 15. indisi arasını al. 15. indis hariç.

20. toInt() / toFloat(): String'i bir tam sayıya veya ondalıklı sayıya dönüştürür.

String sayiStr1 = "123.45";
String sayiStr2 = "123";
float sayi_ondalikli = sayiStr1.toFloat(); : sayiStr1 string’ini ondalıklı sayıya çevirir.
int sayi_tam = sayiStr2.toInt(); : sayiStr2 string’ini tam sayıya çevirir.

21. startsWith(on_ek) / endsWith(son_ek): String'in belirli bir ön ek veya son ek ile başlayıp başlamadığını kontrol eder.

String dosyaAdi = "rapor.txt";
bool sonuc = dosyaAdi.endsWith(".txt"); :  dosyaAdi string’inin .txt ile bitip bitmediği kontrol edildi. Sonuç; sonuc = true olur.

22. compareTo() Komutu: 
Bu komut, iki string nesnesini alfabetik olarak, yani lexicographically (sözlük sırasına göre) karşılaştırır. Temel olarak, sözlükteki kelimelerin sıralanma şekline benzer bir karşılaştırma yapar. Karşılaştırma alfabetik sıraya göre yapılır. Alfabetik sırası büyük olanın değeri büyüktür. Karşılaştırma harfler ve string ifadeler için yapılabilir. 





Örneğin;
deger = string_ifade_1.compareTo(string_ifade_2);   olsun;
(string_ifade_1) - (string_ifade_2) = 0 ise; değer = 0.
(string_ifade_1) - (string_ifade_2) > 0 ise; değer = pozitif.
(string_ifade_1) - (string_ifade_2) < 0 ise; değer = negatif.




String Nesnesini Boşaltma:

Bir string nesnesini aşağıdaki 2 şekilde boşaltabiliriz:
String mesaj = "Merhaba Dünya";
mesaj = "";         // String’i boş bir string’e atayarak içeriğini temizle.
veya
mesaj.remove(0); // İlk karakterden itibaren hepsini sil (boşalt).


String Kullanımında Dikkat Edilmesi Gerekenler:

1. Bellek Kullanımı: String nesneleri dinamik bellek kullandığı için, özellikle bellek kısıtlı Arduino kartlarında (Uno gibi) yoğun String işlemleri bellek fragmentation (parçalanma) sorunlarına yol açabilir. Bu durum, programınızın çökmesine veya beklenmedik davranışlar sergilemesine neden olabilir. Büyük ve sürekli değişen String'lerle çalışırken dikkatli olunmalıdır.
2. Performans: Dinamik bellek yönetimi, statik karakter dizilerine göre biraz daha yavaş olabilir. Yüksek performans gerektiren uygulamalarda bu göz önünde bulundurulmalıdır.
3. String’e Alternatif Olarak Karakter Dizileri (char array) Kullanmak: Eğer bellek ve performans kritikse, C tarzı karakter dizileri (char[]) kullanmak daha uygun olabilir. Ancak bu durumda metin işleme fonksiyonlarını kendiniz yazmanız veya daha düşük seviyeli kütüphaneler kullanmanız gerekir.


1. Örnek Program Kodları

String yazi = "abcde abcde fghi abcd";
String yazi2 = "   merhaba   ";
String yazi3 = "SELAM";
String yazi4 = "Kedinin asaleti fareyi görünceye kadardır";
String yazi5 = "Yavaş tükürüğün sakala zararı vardır";
String yazi6 = "nasılsın";
String yazi7 = "kurtlar vadisi";
String yazi8 = "Su kucugun su buyugun";
String yazi9 = "abcdefghjkmnoprs";
int yer, yer2;
String metin;
String metin1 = "ağaca";
String metin2 = "yaslanma";
String metin3;
char karakter;
String donustur, donustur2, donustur3;
String hayvan1, hayvan2, hayvan3, hayvan4;
String harf1, harf2, harf3, harf4;
int deger;

void setup()
{
      Serial.begin(9600);
      metin = "merhaba";
      Serial.println(metin);


      //__________string ifadelerin birleştirilmesi__________
      metin3 = metin1 + metin2;   //iki string ifade birleştirilip 3. string ifadeye atandı.
      Serial.println(metin3);

      metin3 = metin1 + " " + metin2 + " çürür";  //string ifadelere kelime ve boşluk eklendi.
      Serial.println(metin3);

      metin3.concat(" insana yaslanma ölür.");  //string ifadenin sonuna yazı eklendi.
      Serial.println(metin3);

      //______string ifade içerisinde soldan sağa harfin kaçıncı indiste olduğunu bulma_______
      //NOT: Türkçe karakterler 2 karakter olarak sayılır. Boşluklar sayılır. Saymaya sıfırıncı indisten başlanır.

      yer = yazi.indexOf('a');                //metin içerisinde soldan sağa doğru ilk a harfinin kaçıncı indiste olduğunu bulur.
      Serial.print("Soldan sağa 1. a harfinin indis numarası= ");             Serial.println(yer);

      yer2 = yazi.indexOf('a', yer + 1);      //2. a harfini aramaya ilk a harfini bulduğu indisten sonraki indisten başlayarak arar.
      Serial.print("Soldan sağa 2. a harfinin indis numarası= ");     Serial.println(yer2);

      //_________string ifade içerisinde sağdan sola harfin kaçıncı indiste olduğunu bulma_______
      //NOT: Türkçe karakterler 2 karakter olarak sayılır. Boşluklar sayılır. Saymaya en sağdaki yani en büyük indisten başlanır.

      yer = yazi.lastIndexOf('a');            //metin içerisinde sağdan sola doğru ilk a harfinin kaçıncı indiste olduğunu bulur.
      Serial.print("Sağdan sola 1. a harfinin indis numarası= "); Serial.println(yer);

      yer = yazi.lastIndexOf('a', yer - 1);   //2. a harfini aramaya ilk a harfini bulduğu indisten bir önceki indisten başlayarak arar. Çünkü arama sağdan sola doğru yapılıyor.
      Serial.print("Sağdan sola 2. a harfinin indis numarası= "); Serial.println(yer);

      //_________string ifade içerisindeki karakter sayısını bulma_______
      Serial.print("karakter sayısı ="); Serial.println(yazi.length());  //yazi değişkeni içerisindeki karakter sayısını verir. Boşluklar dahil.

      //_________string ifade içerisindeki baştaki ve sondaki boşlukları kaldırma_______
      Serial.print("boşluklu hali= ");
      Serial.println(yazi2);
      yazi2.trim();
      Serial.print("boşluklar kaldırılmış hali= ");
      Serial.println(yazi2);

      //_________string ifade içerisindeki tüm karakterler büyük yapıldı_______
      yazi.toUpperCase();
      Serial.print("büyük yazı= "); Serial.println(yazi);

      //_________string ifade içerisindeki tüm karakterler küçük yapıldı_______
      yazi3.toLowerCase();
      Serial.print("küçük yazı= "); Serial.println(yazi3);

      //_________string ifade içerisindeki kelimeleri yada harfleri değiştirme_______
      yazi4.replace("e", "u");  //yazi4 string i içerisindeki tüm e leri u yapar.
      Serial.print("e harfleri u yapıldı= "); Serial.println(yazi4);

      yazi5.replace("Yavaş", "Hızlı");      //yazi5 stringi içerisindeki yavaş kelimesini hızlı kelimesi ile değiştirir.
      Serial.print("Kelime değiştirildi= "); Serial.println(yazi5);

      //_________string ifade içerisindeki herhangi bir indisteki karakteri bulma_______
      karakter = yazi6.charAt(4);      //4. indisteki karakteri bulur.
      Serial.print("4. indisteki karakter= "); Serial.println(karakter);

      //_________string ifade içerisindeki herhangi bir indisteki karakteri değiştirme_______
      yazi7.setCharAt(6, 'y');     //6. indisteki harfi y harfi ile değiştirir.
      Serial.print("harf değiştirildi= "); Serial.println(yazi7);

      yazi8.setCharAt(yazi8.indexOf('u'), 'a');     //yazi8 değişkeni içerisindeki soldan sağa ilk u harfinin kaçıncı indiste olduğu bulundu ve bu indis numarası kullanılarak u harfi a harfi ile değiştirildi.
      Serial.print("ü harfi bulundu a hari ile değiştirildi= "); Serial.println(yazi8);

      //_________string ifadenin belirli bir indisten sonraki kısmını yazdırma_______
      Serial.print("belli indisten sonra yazdırma= ");
  Serial.println(yazi9.substring(5));

      //_________string ifadenin belirli bir aralığını yazdırma_______
      Serial.print("belli bir aralık yazdırma= ");
          Serial.println(yazi9.substring(5, 10));     //yazi9 stringinin 5. indisi ile 10. indisi(10. indis hariç) arası yazdırıldı.

      //_________herhangi bir sayıyı string ifadeye dönüştürme_______
      donustur = String(12);     //12 sayısı 1 ve 2 olarak iki karaktere dönüştürüldü.
      Serial.print("12 sayısının string ifadesi= "); Serial.println(donustur);

      donustur2 = String(12, HEX);     //12 sayısının hexedecimal(16 lı) karşılığı string ifadeye dönüştürüldü.
      Serial.print("12 sayısının hex karşılığının string ifadesi= "); Serial.println(donustur2);

      donustur3 = String(12, BIN);     //12 sayısının binary(2 li) karşılığı string ifadeye dönüştürüldü.
      Serial.print("12 sayısının bin karşılığının string ifadesi= "); Serial.println(donustur3);


}

void loop() 
{

}


2. Örnek Program Kodları

Bu uygulamada karşılaştırma operatörleri ile string karşılaştırma uygulaması yapacağız.

String hayvan1, hayvan2, hayvan3, hayvan4;
String harf1, harf2, harf3, harf4;
int deger;

void setup()
{
      Serial.begin(9600);

      //_________string ifadelerin karşılaştırma operatörleri ile karşılaştırılması_______
      hayvan1 = "kedi";
      hayvan2 = "kopek";
      hayvan3 = "kopek";
      hayvan4 = "maymun";

      harf1 = 'a';
      harf2 = 'b';
      harf3 = 'c';
      harf4 = 'd';

      if (harf2 > harf1)
      {
            Serial.println("harf2 daha büyük");
      }

      if (hayvan2 == hayvan3)
      {
            Serial.println("hayvan2 ile hayvan3 birbirine eşit");
      }

      if (harf3 > harf4)
      {
            Serial.println("harf3 harf4'den büyüktür");
      }
      else
      {
            Serial.println("harf3 harf4'den büyük değil");
      }
}
void loop() 
{

}


3. Örnek Program Kodları

Bu uygulamada string ifadelerin compareTo() komutu ile karşılaştırılmasını yapacağız.

String hayvan1, hayvan2, hayvan3, hayvan4;
String harf1, harf2, harf3, harf4;
int deger;

void setup()
{
      Serial.begin(9600);

      //_________string ifadelerin compareTo() komutu ile karşılaştırılması_______
      //NOT: deger = string_ifade_1.compareTo(string_ifade_2). Karşılaştırma alfabetik sıraya göre yapılır. Alfabetik sırası büyük olanın değeri büyüktür.
      //(string_ifade_1) - (string_ifade_2) şeklinde işlem yapar. Durum negatif yada pozitif yada sıfır çıkabilir.
      hayvan1 = "kedi";
      hayvan2 = "kopek";
      hayvan3 = "kopek";
      hayvan4 = "maymun";

      harf1 = 'a';
      harf2 = 'b';
      harf3 = 'c';
      harf4 = 'd';

      //_________harflerin karşılaştırılması_______
      deger = harf1.compareTo(harf2);     //harf1'in alfabetik sırasından harf2'nin alfabetik sırası çıkarılıp değer değişkenine atanır. a=1, b=2 olduğu için deger = 1 - 2 = -1 olur.
      Serial.print("harf1 ile harf2'nin karşılaştırılması= "); Serial.println(deger);
      deger = harf1.compareTo(harf3);
      Serial.print("harf1 ile harf3'ün karşılaştırılması= "); Serial.println(deger);

      deger = harf2.compareTo(harf1);
      Serial.print("harf2 ile harf1'in karşılaştırılması= "); Serial.println(deger);
      deger = harf3.compareTo(harf1);
      Serial.print("harf3 ile harf1'in karşılaştırılması= "); Serial.println(deger);

      deger = harf1.compareTo(harf1);
      Serial.print("harf1 ile harf1'in karşılaştırılması= "); Serial.println(deger);

      //_________kelimelerin karşılaştırılması_______
      deger = hayvan1.compareTo(hayvan4);
      Serial.print("hayvan1 ile hayvan4'ün karşılaştırılması= "); Serial.println(deger);
      deger = hayvan2.compareTo(hayvan1);
      Serial.print("hayvan2 ile hayvan1'in karşılaştırılması= "); Serial.println(deger);
      deger = hayvan2.compareTo(hayvan2);
      Serial.print("hayvan2 ile hayvan3'ün karşılaştırılması= "); Serial.println(deger);
}

void loop() 
{

}


________________________________________________________________________________________________________________________________________________________

22 Haziran 2025 Pazar


HC-SR04, robotik ve elektronik projelerde sıkça kullanılan, uygun maliyetli ve kolay kullanımlı bir ultrasonik mesafe sensörüdür. İnsan kulağının duyamayacağı yüksek frekansta (genellikle 40 kHz) ses dalgaları yayarak nesnelere olan uzaklığı ölçer.




Sensörün 4 pini vardır. VCC ve GND besleme ve toprak pinidir. Arduino'daki 5V ve GND pinlerine bağlanabilir. Trig pinini kullanarak sensörden ultrasonic sinyali gönderilir. Echo piniyle yansıyan sinyal alınır. Sensör 40kHz düzeyinde bir ses sinyali yayar.




Çalışması:

Ses sinyali üretmek için Trig pini 10µs boyunca HIGH durumuna getirilir ve sonra LOW yapılır. Bunun üzerine sensör 8 cycle’ lık bir ses sinyali gönderir. Bu sinyalin hemen ardından Echo pini HIGH olur ve sinyalin geri dönmesini bekler. Sinyal geri döndüğünde ise Echo pini LOW konumuna düşer. Echo pininin HIGH olarak kaldığı süre hesaplanarak, ses dalgasının kat ettiği mesafe, dolayısıyla sensörden nesneye olan mesafe belirlenir.




Echo pini 38ms bekledikten sonra yansıyıp dönen herhangi bir sinyal algılamazsa zaman aşımına uğrayacak ve LOW duruma geri dönecektir.

Mesafeyi hesaplamak için aşağıdaki temel formül kullanılır:
Mesafe = (Ses sinyali hızı x sinyalin nesneye çarpıp geri dönme süresi) / 2

Sinyalin hem giderken hem de dönerken kat ettiği mesafeyi 2 ye bölerek sensör ile nesne arasındaki mesafe bulunur.

Sinyalin nesneye gidiş ve dönüş süresi ise Echo pininin HIGH kalma süresi tespit edilerek bulunur. Bunun için pulseIn() komutu kullanılır. 

Örneğin;
sure = pulseIn(2 , HIGH); Bu komut 2 nolu pini takibe alır. 2 nolu pinin durumu HIGH olduğu zaman arka planda saymaya başlar. Pin LOW konumuna düştüğünde saymayı bırakır ve hesapladığı süreyi mikrosaniye cinsinden sure değişkenine atar.


Örnek:
Ses hızı: 340 m/s ve sinyalin çarpıp geri dönme süresi: 1500 µs olsun. Sonucu da cm cinsinden bulalım. O zaman;

                            Mesafe = (Hız x Süre) / 2

340 (m x 100)/(s x 1000) = 34 cm/ms       1500 µs = 1,5 ms

Mesafe = (34cm/ms x 1,5ms) / 2 = 25,5 cm olarak bulunur.


Burada ses sinyalinin ilerleme hızını 340m/s aldık ama ortamın sıcaklığına göre bu değer değişir. Ortamın sıcaklığına göre ses hızı aşağıdaki formülle hesaplanır:



Örnek Uygulama - 1

Bu uygulamada herhangi bir cismin sensöre olan uzaklığı cm cinsinden ölçülerek seri port ekranına yazdırılır.


Devre Şeması:



Program Kodları:

#define trig 8

#define echo 9

float sure;

int mesafe;

void setup()

{

      Serial.begin(9600);

      pinMode(trig, OUTPUT);

      pinMode(echo, INPUT);

}


void loop()

{

      //trig pinini temizle.

      digitalWrite(trig, LOW);

      delayMicroseconds(2);

  

      //trig pinini 10 mikrosaniye HIGH yap.

      digitalWrite(trig, HIGH);

      delayMicroseconds(10);

      digitalWrite(trig, LOW);


      sure = pulseIn(echo, HIGH);     //Bu komut 9 nolu pini takibe alır. 9 nolu pinin durumu HIGH olduğu zaman arka planda saymaya başlar. Pin LOW konumuna düştüğünde saymayı bırakır ve hesapladığı süreyi mikrosaniye cinsinden sure değişkenine atar.

      sure = sure / 1000;         //sure değişkeni milisaniye cinsine çevrildi.

      mesafe = (34.2 * sure) / 2;     //sesin havadaki hızı 34.2 cm/ms olarak kabul edildi(sıcaklığa göre değişir) ve sure ms dir.

      Serial.print("Mesafe = "); Serial.print(mesafe); Serial.println(" cm");

      delay(1000);


//NOT: Burada trig pini Loop içerisinde her seferinde 10 mikrosaniye HIGH ve ardından LOW yapılır. Eğer trig pinini sürekli HIGH yaparsak bu seferde echo pini LOW durumunu göremeyeceği için sure hesabı yapamayacak ve varsayılan süre olan 38ms bekledikten sonra kendisini LOW durumuna düşürecektir.

}



Örnek Uygulama - 2

Bu uygulama, yukarıdaki uygulamaya ek olarak, herhangi bir nesne sensöre 15 cm'den daha az yaklaşırsa buzzer ses vermeye başlar ve seri port ekranına uyarı yazıları yazılır.


Devre Şeması:



Program Kodları:

#define trig 8

#define echo 9

#define buzzer 7

float sure;

int mesafe;


void setup()

{

      Serial.begin(9600);

      pinMode(buzzer, OUTPUT);

      pinMode(trig, OUTPUT);

      pinMode(echo, INPUT);

}


void loop()

{

      //trig pinini temizle

      digitalWrite(trig, LOW);

      delayMicroseconds(2);


      //trig pinini 10 mikrosaniye HIGH yap.

      digitalWrite(trig, HIGH);

      delayMicroseconds(10);

      digitalWrite(trig, LOW);


      sure = pulseIn(echo, HIGH);

      sure = sure / 1000;

      mesafe = (34.2 * sure) / 2;    //sesin havadaki hızı 34.2 cm/ms olarak kabul edildi(sıcaklığa göre değişir) ve sure ms dir.

      if (mesafe < 15)

      {

            digitalWrite(buzzer, HIGH);

            Serial.print("DİKKAT!!! Çok yaklaştın= "); Serial.print(mesafe);       Serial.println(" cm");

            delay(50);

      }

      else

      {

            digitalWrite(buzzer, LOW);

            Serial.print("Mesafe Normal = "); Serial.print(mesafe); Serial.println(" cm");

            delay(100);

      }

}


________________________________________________________________________________________________________________________________________________________


Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com