__________________________________ARDUİNO KOMUT LİSTESİ______________________________
//AVR, Arduino'nun temelini oluşturan Atmel çiplerini ifade eder
// //satırı yorum satırı haline getirir.
/* */ //belli bir aralığı yorum metni haline getirir.
___________________________Kütüphane Ekleme__________________________________________
#include <kutuphane_ismi>
#include "kutuphane_ismi"
___________________________Veri Tipleri______________________________________________
int // 2 byte. Tam sayı. -32768 ile 32767 arası.
unsigned int // 2 byte. Tam sayı. 0 ile 65535 arası.
uint8_t // 1 byte(8 bit) işaretsiz tam sayı.0 ile 255 arası.
uint16_t // 2 byte(16 bit) işaretsiz tam sayı.0 ile 65535 arası.
uint32_t // 4 byte(32 bit) işaretsiz tam sayı. 0 ile 4294967295 arası.
int8_t // 1 byte(8 bit) işaretli tam sayı. -128 ile 127 arası.
int16_t // 2 byte(16 bit) işaretli tam sayı. -32.768 ile -32.767 arası.
int32_t // 4 byte(32 bit) işaretli tam sayı. -2.147.483.648 ile 2.147.483.647 arası
long // 4 byte. Tam sayı. -2147483648 ile 2147483647 arası.
unsigned long // 4 byte. Tam sayı. 0 ile 4294967295 arası
float // 4 byte. Ondalık sayı. -3.14*10^38 ile 3.14*10^38 arası.
double // Birçok platformda double veri tipi float'tan daha yüksek hassasiyete sahip olsa da, çoğu Arduino kartında (Uno ve diğer birçok ATmega kartı) double ile float aynı boyuttadır. Arduino Due ise bir istisnadır ve
// burada double 8 bayt boyutundadır (float 4 bayt iken). 8 baytlık veri depolama alanına sahip devre kartlarında, maksimum değer 1,7*10^308 ve minimum değer -1,7*10^308 olabilir. 4 baytlık veri depolama alanına
// sahip devre kartlarında ise maksimum ve minimum değerler float değerine eşdeğerdir.
bool // 1 byte. Mantıksal değer tutar. 1(true) veya 0(false)
String // metinsel ifade
char // 1 byte. Karakter tanımlamak için kullanılır. ASCII standartlarına göre tanımlama yapılır.
byte // 1 byte. 1 bayt yani 8 bit. 0 ile 255 arası.
static // static int, static char vb. şekilde tanımlanan değişkenler yerel olarak herhangi bir döngü içerisinde tanımlansa bile void setup() üzerinde tanımlanmış gibi olur.
// Döngünün her tekrarında ilk verdiğimiz değeri tekrar almaz.
int(veri) //veri değişkeni int türüne dönüştürüldü.
char(veri) //veri değişkeni char türüne dönüştürüldü.
int sayi; //ise, "&sayi" ifadesi, sayi değişkeninin hafızadaki konumunu gösteren bir "işaretçidir". Serial.println((uint32_t)&sayi, HEX); komutuyla bu adres seri port ekranına yazdırılır.
_____________________________Sabitler_______________________________________________
const int b = 3; //const ifadesi ile tanımlanan değişken program içerisinde sadece okunabilir, değiştirilemez. Başlangıçta ne olarak tanımlandıysa öyle kalır.
#define c 5 //#define ile tanımlanan durumda ise; program, derlendiği sırada, kodlar içerisinde nerede c görürse oraya 5 koyar. Bunu arka planda yapar.Bu nedenle bellekte yer kaplamaz. #define c 5 yazdıktan sonra sonuna ; koyulmaz.
_____________________________Akış Komutları_________________________________________
return 0; veya return x; veya return hesapla; //bir işlevi sonlandırır ve istenilen değeri döndürür.
goto devam; //Program akışını programdaki etiketli bir noktaya aktarır.
break; //döngüden anında çıkar ve break'tan sonraki komutlar çalışmaz.
continue; //bu komuttan sonraki döngü içerisindeki komutlar işlemez ve döngü yukarı dönerek kaldığı yerden devam eder.
______________________Pinlerin Giriş / Çıkış Olarak Tanımlanması____________________
pinMode(4, OUTPUT); //4 nolu pin çıkış yapıldı.
pinMode(5, INPUT); //5 nolu pin giriş yapıldı.
pinMode(A0, OUTPUT); //A0 pini çıkış yapıldı.
pinMode(A0, INPUT); //A0 pini giriş yapıldı.
pinMode(pin,INPUT_PULLUP); //Atmega328 mikrokonrolcüsü bulunan Arduino Uno’da tüm IO pinlerinde dahili INPUT_PULLUP özelliği bulunurken, hiçbir pinde dahili INPUT_PULLDOWN özelliği bulunmaz.
DDRD = B11111111; //Arduino D portunun tüm pinleri çıkış yapıldı. Binary sayı kullanıldı.
DDRD = 0b11111111; //Arduino D portunun tüm pinleri çıkış yapıldı. Binary sayı kullanıldı.
DDRD = 0xFF; //Arduino D portunun tüm pinleri çıkış yapıldı. 16 lık yani hexedecimal sayı kullanıldı.
DDRD = B00000000; //Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.
DDRD = 0b00000000; //Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.
DDRD = 0x00; //Arduino D portu portunun tüm pinleri giriş yapıldı. 16 lık yani hexedecimal sayı kullanıldı.
NOT: Analog pinler; analog olarak kullanılacaksa pinMode() ile giriş -çıkış olarak tanımlamasına gerek yoktur ama digital olarak kullanılacaksa pinMode() ile giriş -çıkış olarak tanımlama yapılmalıdır.
___________________________Dijital Okuma - Yazma Komutları_____________________________
digitalWrite(3, HIGH); //3 nolu pine 5v gönderildi.
digitalWrite(3, LOW); //3 nolu pine 0v gönderildi.
digitalWrite(4, 1); //4 nolu pine 5v gönderildi.
digitalWrite(4, 0); //4 nolu pine 0v gönderildi.
digitalWrite(A0, HIGH); //A0 pinine 5v gönderildi.
digitalWrite(A0, LOW); //A0 pinine 0v gönderildi.
digitalWrite(5, port); //5 nolu pine port(1 yada 0) değişkenini yaz.
digitalWrite(LED_BUILTIN, HIGH);//Arduino üzerindeki led yakıldı ve Arduino 13. pine 5v gönderildi.
digitalWrite(LED_BUILTIN, LOW); //Arduino üzerindeki led söndürüldü ve Arduino 13. pine 0v gönderildi.
PORTD = B11111111; //Arduino D portunun tamamına binary türünde 1 gönderildi.
PORTD = 0b11111111; //Arduino D portunun tamamına binary türünde 1 gönderildi.
PORTD = 0xFF; //Arduino D portunun tamamına hexadecimal türünde 1 gönderildi.
PORTD = 16; //Arduino D portuna decimal türünde 16 sayısı gönderildi.
digitalRead(7); //7 nolu pinin değeri okundu(1 yada 0).
port = digitalRead(7); //7 nolu pinin değeri okundu(1 yada 0) ve port değişkenine atandı.
port_oku = PINB; //PortB'ye ait tüm pinlerin değeri decimal olarak port_oku değişkenine atandı.
port_deger = (PINB & bit (3)); //PortB'ye ait 3. pinin decimal değeri port_deger değişkenine atandı.
___________________________Analog Okuma - Yazma Komutları_______________________________
analogWrite(9, 127); //9. pine PWM 127 değerini gönderir. Bu komut PWM sinyali için kullanılır. Arduino Uno’da PWM çıkış pinleri 3, 5, 6, 9, 10, 11 nolu pinlerdir. analogWrite(127)--> %50 görev döngüsü(2,5 Volt). analogWrite(255)--> %100 görev döngüsü(5 Volt).
analogWrite(led, i); //ismi led olarak tanımlanan pine, PWM olarak i değeri gönderildi. i=0--->led=0V, i=255--->led=5V
analogWriteResolution(x); //analogWrite(a,b) komutu ile gönderilecek PWM değerinin kaç bitlik olacağını belirler. x=8 için; b=0-255 arası, x=10 için; b=0-1023 arası ....gibi. Arduino Uno'da analogWrite(a,b) komutunun varsayılan bit değeri 8 yani b=0-255 arasıdır.
pot = analogRead(A0); //A0 pininden alınan analog voltaj değeri Arduino Uno içerisindeki 10 bitlik ADC ile 0 - 1023 arasındaki dijital değere çevrilerek pot değişkenine atanır. Burada DEFAULT referans değeri olarak 5v kullanılır. Arduino analog girişler A0-A5 arasıdır.
analogReference(EXTERNAL); //Analog giriş işlemleri için referans voltaj değeri olarak AREF pininden verilen voltaj kullanıldı. Bu voltaj değeri 0'dan az 5'den çok olamaz.
analogReadResolution(x); //analogRead() komutunun okuduğu analog değerin kaç bitlik ADC ile digital değere çevrileceğinin belirlenmesini sağlar. Komut x=8 için; pot=0-255 arası, x=10 için; pot=0-1023 arası,x=12 için; pot=0-4095 arası, x=16 için; pot=0-65535 arası değer üretir. Arduino Uno'da 10 bitlik ADC olduğu için analogRead() komutunun varsayılan bit değeri 10'dur.
___________________________Seri Port Ekranına Yazma Komutları_________________________
Serial.begin(9600); //seri port başlatıldı. baundrate:9600(saniyedeki bit sayısı).
Serial.end(); //seri port kapatıldı.
Serial.print("Merhaba"); //seri monitör ekranına Merhaba yazıldı.
Serial.println("Merhaba"); //seri monitör ekranına Merhaba yazıldı ve satır başı yapıldı.
Serial.print(x); //x değerini ekrana yazar.
Serial.print(x, 5); //x sayısını virgülden sonra 5 basamak olacak şekilde yazdır.
Serial.println(port, DEC); //port değerinin decimal(onlu) değerini yazar. Satır başı yapar.
Serial.println(port, HEX); //port değerinin hexadecimal(on altılı) değerini yazar. Satır başı yapar.
Serial.println(port, BIN); //port değerinin binary(ikili) değerini yazar. Satır başı yapar.
Serial.println(port, OCT); //port değerinin octal(sekizli) değerini yazar. Satır başı yapar.
Serial.println((char)deger); //deger değişkenini ekrana karakter türünde yazdırır.
Serial.println((int)deger); //deger değişkenini ekrana tam sayı türünde yazdırır.
Serial.println((float)deger); //deger değişkenini ekrana ondalıklı sayı türünde yazdırır.
Serial.print("\t"); //1 tab boşluk bırakır.
Serial.print("\n"); //satır başı yap.
\n //satır sonu karakteri, yeni satır karakteri.
\r //Bir sonraki satıra geçmeden geçerli satırın başına gider.
\0 //Sonlandırma karakteri, boş karakter anlamına gelir. Genellikle, karakter dizileri bu ifade ile sonlandırılır.
Serial.print("yazı\n"); //yazı'dan sonra satır başı yapar.
Serial.println(); //Satır başı yapar.
Serial.print("\nyazı"); //yazı'dan önce satır başı yapar.
Serial.println("Sayı= " + String(x)); //x değişkeni int olarak tanımlanıp herhangi bir sayı atandıktan sonra Serial.println() komutunun belirtilen şekilde kullanılması ile String olarak ekrana yazdırılabilir.
________________________________Seri Port Komutları__________________________________
Serial.begin(9600, SERIAL_8N1); //Seri haberleşmeyi başlatır.Serial.begin(9600); yazdığımızda yapılandırma otomatik olarak SERIAL_8N1 değerini kullanır.
Serial.end(); //Seri portu kapatır ve seri port arabelleğindeki tüm veriler silinir.
Serial.available(); //Seri port ara belleğindeki(buffer) byte sayısını integer türünde verir.
Serial.read(); //Seri porta gelen verileri okur. Okuduğu her değerin integer karşılığını döndürür. Veri yoksa -1 değerini döndürür. Okunduktan sonra veriler silinir.
Serial.readBytes(verilerin_aktarılacağı_dizi,okunacak_byte_sayısı); //Seri porttan gelen veriyi bayt bayt istenilen bayt adedinde okuyarak char veya byte tipinde bir diziye yazma işlemini gerçekleştirir.
Serial.readBytesUntil(karakter, dizi, byte_sayisi); //Seri porttan gelen verileri belli bir karaktere kadar okumaya yarar.
Serial.readString(); //Seri porta gelen girdi dizisini satır sonuna kadar okuyarak okunan değeri String(metin) formunda geri döndürür.
Serial.readStringUntil(‘karakter’); //Seri porttan gelen verileri belirlenen karaktere kadar okur.
gelen_metin.trim(); //Seri porttan gelen metin alınıp bir değişkene kaydedildiğinde metnin başında ve sonunda yer alan gizli boşlukları, \r (Satır Başı), \n (Alt Satır), \t (Tab) gibi gizli karakterleri temizler.
Serial.write(); //1 byte büyüklüğündeki char veya byte türündeki veriyi yada bu türdeki dizileri göndermekte kullanılır.
Serial.write(77); //77 decimal sayısının char karşılığı olan M harfini gönderir.
a = Serial.write(dizi); //dizi’yi gönderir ve gönderdiği eleman sayısını(kaç baytlık işlem yapıldığını) değişkene atar.
Serial.write(dizi, 3); //dizi’nin ilk 3 elemanını(3 bayt) gönderir.
Serial.availableForWrite(); //Seri port arabelleğindeki veri yazılabilecek kaç bayt(karakter)’lık alan olduğunu bildirir.
Serial.find(); //Arduino seri portuna gelen veri içinde belirlenen karakteri arar. Char türü parametre alır. Eğer karakteri bulursa TRUE, bulamazsa FALSE sonucu döndürür. Geriye dönüş değeri bool türündendir.
Serial.find(‘G’); //Arduino seri portuna gelen veri içinde 'G' karakterini arar. Sonucu True yad False olarak değişkene atar.
Serial.find(“GOKDAG”); //Arduino seri portuna gelen veri içinde "GOKDAG" karakter dizisini arar. Sonucu True yad False olarak değişkene atar.
Serial.flush(); //Gönderilen seri veri iletiminin tamamlanmasını bekler ve iletim arabelleğini(buffer) temizler.
void serialEvent() //Seri porttan veri geldiğinde serialEvent() fonsiyonu çalışır.
___________________________Bekleme Komutları__________________________________________
delay(100); //100 milisaniye bekle.
delayMicroseconds(500); //500 mikrosaniye bekle.
yaz1 = micros(); //Arduino geçerli programı başlattığından itibaren geçen süre(mikrosaniye) yaz1 değişkenine atandı.
yaz2 = millis(); //Arduino geçerli programı başlattığından itibaren geçen süre(milisaniye) yaz2 değişkenine atandı.
________________________Karşılaştırma Operatörleri____________________________________
== Eşit eşit
!= Eşit değildir
< Küçüktür
> Büyüktür
<= Küçük eşittir
>= Büyük eşittir
_________________________Matematiksel Fonksiyonlar____________________________________
sq(a); //a sayısının karesini alır.
sqrt(a); //a sayısının karekökünü alır.
pow(a, b); //a sayısının b üssünü alır.
min(c, d); //c ve d değişkenlerinden küçük olanı alır.
max(e, f); //e ve f değişkenlerinden büyük olanı alır.
abs(e); //e sayısıın mutlak değerini alır.
log10(x); //Onluk Logaritma - log'dur. 10 tabanına göre hesap yapar.
log(x); //Doğal Logaritma - ln'dir. e(2.71828...) tabanına göre hesap yapar.
x = constrain(a, 10, 20); //a değeri; 10 ile 20 arasında ise x = a, 10'dan küçükse x = 10, 20'den büyükse x = 20 olur.
x = map(a, 0, 200, 0, 50); //0 ile 200 arasında olan a değerini 0 ile 50 arasındaki değere dönüştürüp x'e atar.
trunc(a/b); //(a/b) sayısını tam sayıya yuvarlar.
isnan(deger); //Is Not a Number - Sayı Değil Mi? Eğer "deger" bir sayı değilse True, sayıysa False değerini döndürür. isnan() fonksiyonu yalnızca float veya double veri tipleriyle çalışır.
_______________________________Rastgele Sayı__________________________________________
sayi = random(0, 100); //0-100 arasında rastgele bir sayı üretilip sayi değişkenine atandı.
randomSeed(x); //random komutu ile her program başladığında aynı rastgele değerler üretilmemesi için başlangıç referans değeri verilebilir. Bu değer bir sayı yada bir pinden okunan değer olabilir. Aynı referans değeri için aynı rastgele sayılar üretilir.
_______________________________Ses Tonu_______________________________________________
tone(pin, frekans, süre); //belirlenen pine, belirlenen frekansta, belirlenen süre boyunca %50 görev döngüsünde kare dalga gönderilir.
tone(pin, frekans); //belirlenen pine, belirlenen frekansta, %50 görev döngüsünde kare dalga gönderilir. Kare dalga, noTone() komutunu görene kadar devam eder.
noTone(pin); //belirlenen pindeki kare dalgayı durdur.
_______________________________Şartlı İfadeler________________________________________
if (şart) //şart doğruysa ifadelere geç.
{
ifadeler...
}
else if (şart) //şart doğruysa ifadelere geç.
{
ifadeler...
}
while (şart) //şart doğruysa ifadelere geç, şart bozuluncaya kadar döngüyü devam ettir.
{
ifadeler...
}
do //önce ifadelere geç, şart doğruysa döngüye devam et, şart bozulursa döngüden çık.
{
ifadeler...
} while (şart);
while(1); //bulunduğu satırsa sonsuz döngü oluşur ve program burada kalır.
for (i = 0; i < 10 i++) //şart sağlandığı müddetçe döngüye devam et, şart bozulunca döngüden çık.
{
ifadeler
}
switch (x)
{
case a: //x = a ise
{
ifadeler...
break;
}
case b: //x = b ise
{
ifadeler...
break;
}
default: //bunların dışında ise
{
ifadeler...
break;
}
}
_______________________________String(Metinsel) İfadeler___________________________________
String yazi = "Merhaba"; //yazi adında string nesnesi tanımlandı ve içerisine metin atandı.
metin3 = metin1 + metin2; //iki string değişken birleştirilip 3. string değişkene atandı.
metin3 = metin1 + " " + metin2 + " çürür"; //metin1, boşluk, metin2 ve çürür stringleri birleştirilip metin3 stringine atandı.
metin3.concat(" merhaba"); //metin3 string değişkeninin sonuna "merhaba" yazısı eklendi.
yer = yazi.indexOf('a'); //yazi string'i içerisinde soldan sağa doğru ilk a harfinin kaçıncı indiste olduğunu bulur ve bulduğu indis numarasını yer değişkenine atar.
yer2 = yazi.indexOf('a', yer + 1); //2. a harfini aramaya ilk a harfini bulduğu indisten sonraki indisten başlayarak arar.
yer = yazi.lastIndexOf('b'); //yazi string'i içerisinde sağdan sola doğru ilk b harfinin kaçıncı indiste olduğunu bulur ve bulduğu indis numarasını yer değişkenine atar.
yer2 = yazi.lastIndexOf('b', yer - 1); //2. b harfini aramaya ilk b harfini bulduğu indisten bir önceki indisten başlayarak arar.
sayi = yazi.length(); //yazi değişkeni içerisindeki karakter sayısını bulur ve sayi değişkenine atar. Boşluklar dahildir.
yazi.trim(); //yazi string'inin başındaki ve sonundaki boşlukları kaldırır.
yazi.toUpperCase(); //yazi string'i içerisindeki tüm harfleri büyük harf yapar.
yazi.toLowerCase(); //yazi string'i içerisindeki tüm harfleri küçük harf yapar.
yazi.replace("e", "u"); //yazi string'i içerisindeki tüm e leri u yapar.
yazi.replace("Yavaş", "Hızlı"); //yazi string'i içerindeki "Yavaş" kelimesini "Hızlı" kelimesi ile değiştirir.
karakter = yazi.charAt(4); //yazi string'i içindeki 4. indisteki karakteri bulur karakter stringine atar.
yazi.setCharAt(6, 'y'); //yazi stringinin 6. indisinde bulunan harf y ile değiştirildi.
Serial.println(yazi.substring(5)); //yazi stringi içindeki metni 5. indisten başlayarak ekrana yaz.
Serial.println(yazi.substring(5, 10)); //yazi stringi içindeki metnin 5. indisle 10. indis(10. indis hariç) arasını ekrana yaz.
donustur = String(12); //12 sayısı 1 ve 2 olarak iki karaktere dönüştürüldü.
donustur = String(12, HEX); //12 sayısının hexedecimal(16 lı) karşılığını string ifadeye dönüştür.
donustur = String(12, BIN); //12 sayısının binary(2 li) karşılığını string ifadeye dönüştür.
toInt(); //String'i bir tam sayıya dönüştürür. Örnek: sayiStr1 = "123"; olsun. int sayi_tam = sayiStr1.toInt();
toFloat(); //String'i bir ondalıklı sayıya dönüştürür. Örnek: sayiStr2 = "123,45" olsun. float sayi_ondalikli = sayiStr2.toFloat();
startsWith(on_ek) //String'in belirli bir ön ek ile başlayıp başlamadığını kontrol eder.
endsWith(son_ek) //String'in belirli bir son ek ile bitip bitmediğini kontrol eder. Örnek: String dosyaAdi = "rapor.txt"; olsun. bool sonuc = dosyaAdi.endsWith(".txt"); sonuc = true olur.
compareTo() //2 string nesnesini alfabetik olarak, yani lexicographically (sözlük sırasına göre) karşılaştırır. Alfabetik sırası büyük olanın değeri büyüktür.
//Örnek: 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.
mesaj = ""; //mesaj string'inin içeriğini temizle.
mesaj.remove(0); //mesaj string'inin içeriğini temizle.
_______________________________Diziler(Array)___________________________________________
//Parantez içine eleman sayısını belirtmesek dahi yazdığımız eleman sayısı kadar arka planda dizi eleman sayısını oluşturur.
eleman_sayisi = sizeof(dizi); //dizi'nin eleman sayısını bayt cinsinden verir.
__________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.
sayilar2[0] = 27; //sayilar2 dizininin 0. indisi 27 yapıldı.
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ı.
memset(dizi,'\0', sizeof(dizi)); //sayı dizisi tamamen boşaltır.
__________Karakter Dizileri________
//Karakter dizisi tanımlarken eleman sayısını 1 eleman fazla tanımlamak gerekir. Derleyici bu fazla yere sonlandırma karakterini('\0') ekler.
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.
karakter2[0] = 'm'; //karakter2 dizininin 0. indisi m yapıldı.
char karakter_matris[2][3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; //2 satır 3 sütundan oluşan karakter matrisi tanımlandı.
char isim[7] = "mehmet"; //7 elemanlı bir dizi tanımlandı.
String sehir[] = {"ankara", "bolu", "karabuk"}; //3 elemanlı metin dizisi tanımlandı.
dizi[3]='\0' veya dizi[3]=NULL //diziyi, 3. indisten itibaren sonlandırır. Dizi elemanları silinmez. Sadece dizinin ilk 0,1,2. elemanı aktiftir.
_______________________________Mantık Operatörleri_______________________________________
&& Ve
|| Veya
! Değil
_______________________________Bitsel Operatörler________________________________________
x = a & b; //a ile b yi ve işlemine tabi tut x e ata.
y = a | b; //a ile b yi veya işlemine tabi tut x e ata.
z = a ^ b; //a ile b yi xor işlemine tabi tut x e ata. xor(A'.B+A.B')=(A nın değili ve B) veya (A ve B nin değili). Yani aynılar 0, farklılar 1 demektir.
f = e << 2; // e yi 2 bit sola kaydır f ye ata.
g = e >> 2; // e yi 2 bit sağa kaydır g ye ata.
h = ~k // k nın değilini h ye ata.
a |= 0b00100000 //a ile 0b00100000 değerini "veya" işlemine tabi tut, sonucu "a" değişkenine ata.
b &= 0b11011111 //b ile 0b11011111 değerini "ve" işlemine tabi tut, sonucu "b" değişkenine ata.
_______________________________Birleşik Operatörler________________________________________
a++; //a yı 1 artır.
++b; //b yi 1 artır.
e = ++c; //önce c yi 1 artır sonra e ye ata.
f = d++; //önce d yi f ye ata sonra d yi 1 artır.
a--; //a yı 1 azalt.
--b; //b yi 1 azalt.
e = --c; //önce c yi 1 azalt sonra e ye ata.
f = d--; //önce d yi f ye ata sonra d yi 1 azalt.
a += 10; //a = a + 10;
a -= 8; //a = a - 8;
a *= 4; //a = a * 4;
a /= 2; //a = a / 2;
b = a %= 5; //a nın 5 ile bölümünden kalan b ye atandı.
c %= 3; //c nin 3 ile bölümünden kalan tekrar c ye atandı.
_______________________________Bit ve Bayt Metodları________________________________________
//x, 16 bitlik bir sayı olsun:
lowByte(x); //x'in ilk 8 bitini yazdırır.
highByte(x); //x'in son 8 bitini yazdırır.
bitRead(y, 0); //y'nin 0. bitini yazdırır.
bitWrite(y, 4, 0); //y'nin 4. bitini 0 yapar.
bitSet(z, 5); //z'nin 5. bitini 1 yapar.
bitClear(z, 1); //z'nin 1. bitini 0 yapar.
_______________________________Gelişmiş________________________________________
sure = pulseIn(pin, değer, zaman_aşımı); //Bir pinin ne kadar süre HIGH veya LOW durumunda kaldığını takip eder ve geçen süreyi mikrosaniye cinsinden döndürür.
sure = pulseIn(9, HIGH, 10000000); //9 nolu pinin durumu HIGH olduğu zaman saymaya başlar. Pin LOW konumuna düştüğünde saymayı bırakır ve geçen süreyi sure değişkenine atar.
................................................//Eğer 9 nolu pin 10000000 mikrosaniye(10sn) boyunca HIGH olmazsa zaman aşımına uğrar ve komut sıfır değerini verir.
data = shiftIn(dataPin, clockPin, MSBFIRST); //dış kaynaktan seri olarak gelen veriyi oku ve data değişkenine yaz.
................................................//dataPin: verinin okunacağı pin. clockPin: clock palsinin gönderileceği pin. MSBFIRST: Dış kaynaktaki bilgiyi en soldan itibaren okumaya başla. LSBFIRST: Dış kaynaktaki bilgiyi en sağdan itibaren okumaya başla.
shiftOut(dataPin, clockPin, MSBFIRST, data); //dış kaynağa seri olarak veri gönder. dataPin: verinin gönderileceği pin. clockPin: clock palsinin gönderileceği pin. data: gönderilecek data.
................................................//MSBFIRST: Dış kaynaktaki bilgiyi en soldan itibaren okumaya başla. LSBFIRST: Dış kaynaktaki bilgiyi en sağdan itibaren okumaya başla.
_______________________________I2C İletişim Komutları____________________________________
#include <Wire.h> //I2C iletişim kütüphanesi
Wire.begin(); //master cihaz haberleşmesini başlat.
Wire.begin(3); //3 nolu slave cihaz haberleşmesini başlat.
Wire.available(); //Arduino'ya ulaşmış veri paketlerinin sayısını döndürür.
Wire.beginTransmission(7); //master cihazın 7 nolu cihaz ile haberleşmesini başlatır.
Wire.endTransmission(); //master slave cihaz ile başlattığı haberleşmeyi sonlandırır. Parantez içi boş bırakılırsa ya da “true” yazılırsa program tarafından “true” olarak algılanır
Wire.endTransmission(false); //Hattı serbest bırakma, hattı meşgul tut, iletişime devam et anlamına gelir.
Wire.read(); //master ve slave cihaz için veri okur.
Wire.write(); //master ve slave cihaz için veri gönderme komutudur.
Wire.requestFrom(adres, miktar, durak); //master cihaz tarafından, slave cihazdan byte isteğinde bulunmak için kullanılmaktadır.
Wire.onRequest(istek_fonksiyonu); //master cihazdan veri isteği geldiğinde slave cihazda çalıştırılacak fonksiyonu belirler.
Wire.onReceive(veri_fonksiyonu); //slave cihaza veri geldiğinde çalışacak olan fonksiyonu belirler.
____________________________________I2C LCD Komutları____________________________________
#include <LiquidCrystal_I2C.h> //LCD'nin I2C iletişim kütüphanesi.
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(adres, sütun, satır); //I2C LCD ayarlarını yapar.
lcd.init(); //I2C LCD’yi başlatır.
lcd.begin(); //Bazı kütüphanelerde I2C LCD'yi başlatmak için bu komut kullanılır.
lcd.print("metin"); //I2C LCD’ye yazı/karakter gönderir.
lcd.backlight(); //Ekran ışığını açar.
lcd.noBacklight(); //Ekran ışığını kapatır.
lcd.cursor(); //imleci açar. İmleç alt çizgi şeklindedir.
lcd.noCursor(); //imleci kapatır.
lcd.setCursor(sütun, satır); //imlecin yerini belirler.
lcd.blink(); //blok tarzı imleci açar.
lcd.noBlink(); //blok tarzı imleci kapatır.
lcd.clear(); //ekranı temizler ve imleci sol üst köşeye (ilk satır ve ilk sütun) konumlandırır.
lcd.home(); //imleci (0,0) noktasına götürür.
lcd.display(); //ekrana basılmış olan tüm karakterleri veya imleçleri görüntüler.
lcd.noDisplay(); //LCD'de görüntülenen tüm karakterleri kapatır. Metin LCD belleğinden silinmez; bunun yerine kapatılır. LCD, lcd.display(); yürütüldüğünde ekranı tekrar gösterir.
lcd.scrollDisplayLeft(); //her çalıştığında ekran içeriğini (metin ve imleç) bir konum sola kaydırır.
lcd.scrollDisplayRight(); //her çalıştığında ekran içeriğini (metin ve imleç) bir konum sağa kaydırır.
____________________________________SPI Komutları____________________________________
#include<SPI.h> //SPI iletişim kütüphanesi.
SPI.begin(); //SPI iletişim başlatıldı.
SPI.setClockDivider(SPI_CLOCK_DIV4); //clock bölme 4 yapıldı.
digitalWrite(SS,LOW); //slave seçme biti LOW yapılarak slave cihaz ile iletişim başladı.
digitalWrite(SS,HIGH); //slave seçme biti HIGH yapılarak slave cihaz ile iletişim kapatıldı.
SPI.transfer(78); //slave cihaza 1 baytlık 78 decimal verisi gönderildi.
gelen = SPI.transfer(0x00); //slave cihazdan 1 baytlık veri almak için önce sahte bir veri gönderildi ve bunun akabinde gelen veri "gelen" değişkenine atandı.
SPI.transfer16(0xABFF); //slave cihaza 2 baytlık 0xABFF hexedecimal verisi gönderildi.
gelen = SPI.transfer16(0x00); //slave cihazdan 2 baytlık veri almak için önce sahte bir veri gönderildi ve bunun akabinde gelen veri "gelen" değişkenine atandı.
SPI.attachInterrupt(); //SPI kesmesi aktif edildi.
ISR(SPI_STC_vect) //slave Arduino'ya veri geldiğinde çalışan kesme fonksiyonu
{
gelen = SPDR; //slave cihaza gelen veri SPDR kayıtçısına kaydedilir. Buradaki veri gelen değişkenine atandı.
}
SPI.beginTransaction(SPISettings(16000000, MSBFIRST, SPI_MODE0)); //SPI veri yolunu başlatır. Max SPI hızı:16Mhz, Bitlerin gönderim sırası: MSBFIRST, SPI iletişim modu: SPI_MODE0. Bu komuttan önce SPI.begin(); kullanılmalıdır.
SPI.endTransaction(); //SPI veri yolunu durdurur.
SPDR = 0x1F; //veri kayıtçısına veri gönderildi.
_________________________Atmega328 Kayıtçılarına Değer Yazma Komutları__________________
Örnek:
TCNT0 = 0; //Timer0'a ait TCNT0 kayıtçısına decimal sıfır gönderdilerek sıfırlandı.
TCNT0 = 0b00001001; //Timer0'a ait TCNT0 kayıtçısına binary olarak sayı gönderildi.
TCCR0A |= (1 << WGM01); //Timer0'a ait TCCR0A kayıtçının WGM01 biti 1 yapıldı.
TCCR0B |= (1 << CS01) | (1 << CS00); //Timer0'a ait TCCR0B kayıtçının CS00 ve CS01 biti 1 yapıldı.
NOT: Kayıtçıların bitlerinde değişiklik yapmak için: “|=” (veya eşit), “&=” (ve eşit),”=” (eşit) şeklindeki bitsel operatörler kullanılabilir. Kayıtçıdaki herhangi bir biti 1 yapmak
için; “|=” i, 0 yapmak için; “&=” i kullanabiliriz. Bu bitsel operatörler kullanıldığında, kayıtçıdaki 0 yapılacak bitler önce, 1 yapılacak bitler ise en son ayarlanmalıdır. Çünkü
bazı kayıtçılarda bu operatörlerle bir bit sıfır yapıldığında, tüm kayıtçıyı sıfırladığı görüldü. Bu nedenlerden dolayı bu operatörler yerine kayıtçı_adı=0b10010001 şeklinde ya da
bitSet() ve bitClear() komutlarının kullanımı daha sağlıklı olmaktadır.
____________________________________EEPROM Komutları____________________________________
EEPROM.length(); //EEPROM boyutunu verir.
EEPROM.write(adres, veri); //belirtilen bellek adresine 1 bayt veri yazmak için kullanılır. Veri tipleri char ve byte türünde 1 bayt olmalıdır.
EEPROM.write(adres, NULL); //belirtilen bellek adresindeki veriyi siler.
oku = EEPROM.read(adres); //belirtilen bellek adresindeki okur ve "oku" değişkenine atar.
EEPROM.update(adres , veri); //önce belirtilen adresteki veriyi okur. Eğer yazacağı veri, adresteki veri ile aynıysa yazma işlemi yapmaz, farklıysa yazma işlemi yapar.
EEPROM[15] = 120 //15 adresine 120 değerini yaz.
data = EEPROM[10] //10 adresindeki değeri “data” değişkenine ata.
EEPROM.put(adres , data); //EEPROM'a 1 bayttan daha uzun veri yazmak için kullanılır. “adres” değişkeni verilerin yazılacağı başlangıç adresidir.
EEPROM.get(adres , data); //EEPROM'dan 1 bayttan daha uzun veri okumak için kullanılır. “adres” değişkeni verilerin okunmaya başlanacağı başlangıç adresidir.
____________________________________Watchdog Timer Komutları____________________________________
#include <avr/wdt.h> //WDT kütüphanesi eklendi.
wdt_disable(); //WDT'yi pasif edildi.
wdt_enable(sure); //sure; 16ms->WDTO_16MS, 32ms->WDTO_32MS, 64ms->WDTO_64MS, 125ms->WDTO_125MS, 250ms->WDTO_250MS, 500ms->WDTO_500MS, 1sn->WDTO_1S, 2sn->WDTO_2S, 4sn->WDTO_4S, 8sn->WDTO_8S
wdt_reset(); //zamanlayıcı sıfırlandı.
_________________________________Servo Motor Kontrol Komutları___________________________________
#include <Servo.h> //servo motor kontrol kütüphanesi.
Servo servo_motor; //kütüphaneyi kullanabilmek için servo motor nesnesi oluşturuldu.
servo_motor.attach(pin_no); //servo motorun kontrol ucunun takıldığı Arduino pini tanımlandı.
servo_motor.write(derece); //servo motora açı değeri gönderildi.
____________________________PWM Üretimi İçin PWM Kütüphanesi Komutları____________________________
//PWM üretmek için gerekli olan kütüphane Arduino içerisinde olmadığı için haricen eklememiz gerekmektedir. GitHub’dan “terryjmyers” kullanıcısının oluşturduğu
//PWM kütüphanesini https://github.com/terryjmyers/PWM linkinden indirilerek Arduino'ya eklenir.
InitTimersSafe(); //Timer kesmesindeki registerları sıfırlayarak gerekli kurulumları yapar.
SetPinFrequencySafe(pwm_pin, frekans); //Belirtilen pine gönderilecek PWM sinyalinin frekansını belirler. Pin, Arduino’nun PWM pinlerinden biridir.
pwmWrite(pwm_pin, duty_cycle); //Belirtilen pine ait Duty Cycle değerini belirler. duty_cycle değeri 0 - 255 arasıdır.
pwmWriteHR(pwm_pin, duty_cycle); //Bir önceki komut ile aynı işlevi görür. Fakat burada farklı olan; bu komuttaki duty_cycle değeri 0 – 65535 arasındadır.
__________________________________PWM Üretimi İçin Diğer Yollar____________________________________
1- İki Adet Timer Kullanarak PWM Üretme.
2- Timer’ların Çıkış Portlarından PWM Sinyali Alma
a. Fast PWM Mode
b. Phase Correct PWM Mode
_____________________________________Klavye Fonksiyonları____________________________________
//Keyboard fonksiyonlarını kullanmak için; <Keyboard.h> kütüphanesi projemize eklenmelidir.
Keyboard.begin(); //Klavye iletişimini başlatır. Bu fonksiyonda varsayılan düzen “KeyboardLayout_en_US” dir.
Keyboard.end(); //Klavye iletişimini durdurur.
Keyboard.write(karakter); //Bağlı bilgisayara tuş vuruşu gönderir.“karakter” değişkeni: char ya da int türündendir.
Keyboard.press(tuş); //Klavyenizde bir tuşa basılı tutuluyormuş gibi çalışır.
Keyboard.release(tuş); //Belirtilen tuşu bıraktırır. “tuş” değişkeni char türündedir.
Keyboard.releaseAll(); //Şu an basılı olan tüm tuşları bıraktırır.
Keyboard.print(); //Bağlı bir bilgisayara bir veya daha fazla tuş vuruşu(metin) gönderir.
Keyboard.println(); //Bağlı bir bilgisayara bir veya daha fazla tuş vuruşu(metin) gönderdikten sonra satırbaşı yapar.
_____________________________________Mouse Fonksiyonları____________________________________
//Mouse fonksiyonlarını kullanmak için; <Mouse.h> kütüphanesi projemize eklenmelidir.
Mouse.begin(); //Mouse iletişimini başlatır.
Mouse.end(); //Mouse iletişimini durdurur.
Mouse.click(tuş); //Mouse işaretçisinin bulunduğu konuma bir tıklama gönderir. "tuş" değişkeni= MOUSE_LEFT (varsayılan)veya MOUSE_RIGHT veya MOUSE_MIDDLE.
Mouse.press(tuş); //Mouse’de bir tuşa basılı tutuluyormuş gibi çalışır. "tuş" değişkeni= MOUSE_LEFT (varsayılan)veya MOUSE_RIGHT veya MOUSE_MIDDLE.
Mouse.release(tuş); //Mouse’de basılı olan tuşu bırakmak için kullanılır. "tuş" değişkeni= MOUSE_LEFT (varsayılan)veya MOUSE_RIGHT veya MOUSE_MIDDLE.
Mouse.isPressed(tuş); //Tüm fare düğmelerinin o anki durumunu kontrol eder ve herhangi birinin basılı olup olmadığını raporlar. "tuş" değişkeni= MOUSE_LEFT (varsayılan)veya MOUSE_RIGHT veya MOUSE_MIDDLE. Döndürdüğü değer bool türündendir.
Mouse.move(x_ekseni, y_ekseni, mouse_teker); //Bağlı bir bilgisayarda mouse işaretçisini hareket ettirir. Mouse işaretçisinin konumu her zaman işaretçinin önceki konumuna göre güncellenir.
______________________________________LCD Fonksiyonları____________________________________
//LCD fonksiyonlarını kullanmak için; <LiquidCrystal.h> kütüphanesi projemize eklenmelidir.
LiquidCrystal lcd(rs, rw, e, d4, d5, d6, d7); //LiquidCrystal türünde lcd isminde bir nesne oluşturup LCD ile iletişim pinleri belirlenir. 4 bit mod. rw pininin GND’ye götürülmediği durum.
LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //LiquidCrystal türünde lcd isminde bir nesne oluşturup LCD ile iletişim pinleri belirlenir. 4 bit mod. rw pininin GND’ye götürüldüğü durum.
LiquidCrystal lcd(rs,rw,e,d0,d1,d2,d3,d4,d5,d6,d7); //LiquidCrystal türünde lcd isminde bir nesne oluşturup LCD ile iletişim pinleri belirlenir. 8 bit mod. rw pininin GND’ye götürülmediği durum.
LiquidCrystal lcd(rs,rw,e,d0,d1,d2,d3,d4,d5,d6,d7); //LiquidCrystal türünde lcd isminde bir nesne oluşturup LCD ile iletişim pinleri belirlenir. 8 bit mod. rw pininin GND’ye götürüldüğü durum.
lcd.begin(sütun, satır, charsize); //LCD ekranın ara yüzünü başlatır. charsize(isteğe bağlı): Ekranın karakter başına sahip olduğu nokta sayısı. 5x8 için: LCD_5x8DOTS. 5x10 için: LCD_5x10DOTS. Varsayılan: LCD_5x8DOTS.
lcd.clear(); //LCD ekranı temizler ve imleci sol üst köşeye konumlandırır.
lcd.home(); //İmleci LCD'nin sol üst köşesine yani 0. sütun ve 0. satıra konumlandırır.
lcd.setCursor(sütun no, satır no); //LCD’nin imlecini, belirtilen satır ve sütun numarasına konumlandırır. Sütun ve satır koordinatları sıfırdan başlar (sırasıyla 0-15 ve 0-1).
lcd.write(karakter); //LCD'ye tek bir karakter yazdırır.
lcd.print(data, BASE); //LCD’ye metin yazdırmak için kullanılır. İsteğe bağlı olarak sayıların yazdırılacağı taban(BASE) kullanılabilir.
lcd.cursor(); //LCD imlecini açar. İmleç alt çizgi (“_”) şeklindedir .
lcd.noCursor(); //Alt çizgi (“_”) şeklindeki LCD imlecini kapatır.
lcd.blink(); //LCD imlecini açar. Fakat bu sefer imleç blok(█) şeklindedir.
lcd.noBlink(); //Blok (█) şeklindeki LCD imlecini kapatır.
lcd.noDisplay(); //LCD ekranı kapatır. LCD’ye gönderilen verilerin ve imlecin silmeden görünürlüğünü kaldırmak için kullanılır.
lcd.display(); //lcd.noDisplay(); fonksiyonu kullanılarak görünürlüğü kaldırılan verilerin ve imlecin tekrar görünür olmasını sağlar.
lcd.scrollDisplayLeft(); //Ekranda bulunan verileri ve imleci bir hücre sola kaydırır.
lcd.scrollDisplayRight(); //Ekranda bulunan verileri ve imleci bir hücre sağa kaydırır.
lcd.leftToRight(); //LCD ekrana yazılan metnin yönünün soldan sağa doğru olmasını sağlar.
lcd.rightToLeft(); //LCD ekrana yazılan metnin yönünün, sağdan sola doğru olmasını sağlar.
lcd.autoscroll(); //Bu fonksiyon LCD'nin otomatik kaydırma özelliğini açar. LCD ekranındaki verinin, leftToRight(); veya rightToLeft(); ile ayarlanan metin yönünde otomatik olarak kaydırılmasını sağlar.
//Kayma işlemi karakter sayısı kadar hücre olur. Mevcut metin yönü soldan sağa ise (varsayılan budur), ekran sola kaydırılır. Mevcut yön sağdan sola ise, ekran sağa kaydırılır.
lcd.noAutoscroll(); //LCD'nin otomatik kaydırmasını kapatır.
______________________________________Bluetooth Fonksiyonları____________________________________
//Bluetooth fonksiyonlarını kullanmak için; <SoftwareSerial.h> kütüphanesi projemize eklenmelidir.
SoftwareSerial bluetooth(Rx,Tx); //bluetooth isminde bir nesne oluşturup Rx ve Tx pinleri belirlenir.
bluetooth.begin(baud); //Bluetooth seri port bağlantısını başlatır. baud değişkeni 300, 600, 1200, 2400, 4800, 9600(varsayılan), 19200, 38400, 57600 ve 115200 değerlerini alabilir.
bluetooth.available(); //Bluetooth seri tamponunda bekleyen verinin bayt (karakter) sayısını verir. Programda bluetooth modülünden veri gelip gelmediğini kontrol etmek için kullanılır. Veri geldiyse 1 değerini, gelmediyse 0 değerini döndürür.
bluetooth.read(); //Bluetooth modülünden gelen veriyi okur ve char tipinde değer döndürür.
bluetooth.print(); //Bluetooth modülüne veri gönderir.
bluetooth.println(); //Bluetooth modülüne veri gönderir ardından satır başı yapar.
bluetooth.write(); //Bluetooth modülüne binary veri gönderir ve gönderilen verinin uzunluğunu döndürür.
bluetooth.overflow(); //SoftwareSerial nesnesi arabelleğinde taşma olup olmadığını test eder. Taşma varsa 1, taşma yoksa 0 değerini döndürür.
bluetooth.listen(); //bluetooth SoftwareSerial nesnesinin dinlenmesini sağlar. Aynı anda yalnızca bir SoftwareSerial nesnesi dinlenebilir.
bluetooth.isListening(); //bluetooth SoftwareSerial nesnesinin aktif olarak dinlenip dinlenmediğini test eder.
bluetooth.peek(); //Bluetooth modülünden gelen veriyi okur. Ancak read()'in aksine, bu fonksiyona yapılan sonraki çağrılar aynı karakteri döndürür.
___________________________________________Diğer Notlar____________________________________________
1. Kesme alt programları içerisinde seri port ekranına yazdırma işlemi yapılmamalıdır.
Kaydol:
Kayıtlar (Atom)
0 comments:
Yorum Gönder