Professional Documents
Culture Documents
YAZAR
SENCER ALTUN
KAPAK TASARIMI
EMRE KILIÇ
BASKI
2017
ÖNSÖZ
Günümüzde elektronik büyük bir hızla gelişmektedir. Bu gelişen
teknolojiye yetişebilmemiz, gelişmeleri iyi izleyebilmemiz, onlardan
faydalanmamızla mümkün olacaktır. Arduino, Raspberry Pİ,
Beaglebone vs. bir çok geliştirme kartları mevcut. Elektroniği
anlayabilmemiz için deneyler yapmalıyız.Bu kitapta en popüler olan
Arduino kartını inceleyeceğiz ve deneyler yapacağız. Bu kitapdaki
uygulamalar denenmiştir. Faydalı olmak dileğiyle…
SENCER ALTUN
İÇİNDEKİLER
TEMEL ELEKTRONİK .................................................................................................................................8
Dİ‘ENÇLE‘ ............................................................................................................................................9
POTAN“İYOMET‘E AYA‘LI Dİ‘ENÇ ............................................................................................... 11
BUZZER .......................................................................................................................................... 12
ULT‘A“ONİK ME“AFE “EN“Ö‘Ü HC – SR04) ............................................................................. 12
LM “ICAKLIK “EN“Ö‘Ü ....................................................................................................... 12
LED LIGHT EMİTTİNG DİODE - IŞIK YAYAN DİYOT ............................................................. 13
ARDUİNO NEDİR ................................................................................................................................... 15
ARDUİNO İDE PROGRAMINA GİRİŞ ...................................................................................................... 17
1-ARDUİNO’YA GİRİŞ ............................................................................................................................ 20
2-DİGİTAL PİNLERİ ÇIKIŞ OLARAK KULLANMA ..................................................................................... 23
A‘DUİNO KA‘AŞİMŞEK UYGULAMA“I .............................................................................................. 24
3-DİGİTAL PİNLERİ GİRİŞ OLARAK KULLANMA..................................................................................... 26
A‘DUİNO LED-BUTON UYGULAMASI ................................................................................................ 27
4-İF – ELSE KOMUTUNU KULLANMAK.................................................................................................. 29
A‘DUİNO BUTON - KA‘AŞİMŞEK UYGULAMA“I................................................................................ 30
5-SERİAL MONİTÖR VE DEBUGGİNG .................................................................................................... 34
6-DEĞİŞKEN TANIMLAMA VE VERİ TİPLERİ ..................................................................................... 38
7-DEĞİŞKEN TANIMLAMA VE VERİ TİPLERİ 2) ..................................................................................... 40
8-CONST VE DEFİNE İFADELERİNİN KULLANIMI ................................................................................... 42
9-TEMEL MATEMATİK İŞLEMLERİ ......................................................................................................... 47
A‘DUİNO İLE DÖ‘T İŞLEM .............................................................................................................. 48
KALAN BULMA............................................................................................................................... 49
KAREKÖK BULMA ....................................................................................................................... 50
MUTLAK DEĞE‘ ...................................................................................................................... 50
10-DEĞİŞKEN ÖMÜRLERİ, KARŞILAŞTIRMA VE MANTIK İFADELERİ .................................................... 51
DEĞİŞKEN TANIMLAMA ..................................................................................................................... 52
KA‘ŞILAŞTI‘MA.............................................................................................................................. 54
DİRENÇLER
Dirençler pasif devre elemanlarıdır. Pasif olarak
nitelendirilmelerinin sebebi, kendi kendine
gerilim yada akım üretmemeleridir. Direnç
elektrik akıma karşı gösterilen zorluk olarak
bilinir. Direnç değeri yükseldikçe uçlarındaki
gerilim artmakta, direnç üzeriden geçen akım
azalmakta, direnç değeri azaldıkça dirençten
geçen akım artmakta, direnç uçlarındaki gerilim
ise azalmaktadır. Böylece elektronik devrelerde akım ve gerilimi direnç aracılığıyla
değiştirebiliyoruz. Dirençler ohm(Ω), kiloohm(KΩ) ve megaohm(MΩ) birimlerinde
kullanılmaktadır.
Direncin kullanıldığı devre çeşidine göre tolerans ve güç değerleri önem
kazanmaktadır. Toleransı yüksek bir direnç hassas devrelerde kullanıldığında hataya yol
açabileceği gibi, yüksek akıma maruz kalacak dirençlerin güç değerlerininde buna
uygun olarak seçilmesi gerekmektedir.
Bir direncin tam değeri üzerinde yazan değer değildir. Fabrika verilerine göre
belirlenmiş toleransa sahip dirençler, tolerans değerine göre direnç değerinin değişim
aralığını belirler. Örneğin değeri 100Ω olan bir direncin tolerans değeri +%10 ise bu
direncin ölçülen değeri 90Ω ila 110Ω arasında bir değer olacaktır. Aynı direncin
toleransı +%1 olsaydı, ölçülen direnç değeri 99Ω ila 101Ω arasında bir değer olacaktı.
Hassasiyet gerektiren devrelerde mümkün olduğunca düşük toleranslı dirençler
kullanarak devremizin doğruluğunu ve kesinliğini artıracaktır.
LED RENKLERİ; Led’ler kristal diyotlara yada güç diyotlarına yapı olarak
benzemezler. Sadece germanyum yada silisyumdan imal edilmemişlerdir.
GalyumArsenid(GaAs), Galyum Fosfat(GaP), GalyumArsenidFosfat(GaAsP),
Silikonkarbit(SiC) veya Galyumindium nitrit(GalnN) gibi maddelerden yapılmıştır. Tüm bu
maddeler, led’in farklı dalga boylarında ışık yaymasını sağlar.
OHM KANUNU
Sıcaklığın sabit tutulduğu bir ortamda iletkenin direnci de sabittir. İletken uçlarındaki
gerilim değerini, iletkenden geçen akım miktarına böldüğümüzde iletkenin direncini
elde etmiş oluruz. Direnç, gerilim ve akım arasındaki bu ilişkiye OHM Kanunu diyoruz.
Arduino ile birçok uygulama yapabilirsiniz, bunun için biraz elektronik temeli ve
birazcıkta program yazma yeteneğiniz olması gerekli. Bahçenizdeki sulama
sistemlerinden tutunda, çiçeklerinizin nem oranını ölçmeye, arabalardaki park
sensöründen tutun, hızsız alarm sistemlerine kadar aklınıza gelebilecek birçok
elektronik uygulamaları bu kart ile yapabilirsiniz.
Programı bilgisayara kurduktan sonra büyük olasılıkla karşımıza türkçe bir arayüz
menüsü çıkacaktır(yukarıda görüldüğü gibi).
Dosya bölümüne girdiğimizde bizi karşılayan başlıklar ”Yeni proje oluşturma”-“Varolan
dosyayı açma” – “taslak defteri” – “örnek programlar” gibi önemli başlıklar mevcut.
Düzenle bölümüne girdiğimizde genellikle program içerisindeki işlemleri “kopyalama –
yapıştırma – geri alma – kelime bulma” düzenleme komutları mevcut.
Taslak bölümüne girdiğimizde “Yazdığımız programı kontrol etme/derleme – programın
hangi klasörde olduğunu” gibi işlemleri barındırıyor.
Araçlar sekmesine baktığımızda “Seri port ekranı – kart(hangi Arduino’yu kullanıyorsak
seçilmesi gereken alan ) – Port(hangi portu kullanıyorsak seçilmesi gereken port).
ARDUİNO’YA GİRİŞ
Örnek;
“1,2,3, pin çıkış”
“3,4,8, pinler giriş pini olacak” gibi..
ÖRNEK PROGRAM
void loop() {
Örnek; Led
Eğer bir bileşenden geri bildirim almak istiyorsak tercih etmemiz gereken komut
INPUT(Giriş) komutudur.
NOT; Kod satırını açıklamak istiyorsak eğer, satırın sonuna veya herhangi bir yere “//”
işareti ile istediğimiz açıklamayı yazabiliriz. Programa dahil olmaz. Örneklerimizde
görüldüğü gibi.
void setup() {
void loop() {
Led için 220 OHM buton için 10K OHM direnç kullanılmıştır.
void setup(){
if(butondurumu == HIGH) // Eğer uto duru u HIGH ise aşağıdaki kodu işle.
void setup(){
void loop(){
else if (b2d == HIGH){ // sade e . Buto a asıldı sa {---} arası daki kodu işle e al.
else if(b3d == HIGH){ // sade e . Buto a asıldığı da {---} arası daki kodu işle.
else if (b4d == HIGH){ // sade e . Buto a asıldığı da {---} arası daki kodu işle.
else { // eğer hiç iri değilse {----} arası daki kodu işle e al.
X = digitalRead(XXX);
ATANACAK
void setup() {
void loop() {
void setup() {
void loop() {
void setup() {
void loop() {
void setup() {
void loop() {
Yukarıdaki örnek programın amacı “float” veri tipindeki değişkenin değerini ondalıklı
yani noktadan sonrasıyla beraber ekrana yazdırmak.
char karakter = 'k'; // Char eri tipi de k değeri i karakter değişke e atadık
void setup() {
void loop() {
char; 1 bayt – Tek bir karakter. Yukarıdaki program örneğinde char ile bir karakter
değişkeni atadığımızda tek tırnak ile atama yapmalıyız. ( ‘k’ gibi.)
void setup() {
void loop() {
Yukarıdaki örnek programda sayac değişkeni 0’dan başlayarak 1 arta arta int veri
tipinin değeri olan ‘32767’ sayısına kadar gidecek.
NOT; Algoritma yukarıdaki programda, “int sayac =0;” komutunun bir pin numarasımı
yoksa tamsayı numarasımı olduğunu biliyor. Pin numarası olduğunu, Void loop
bölümünde yazan digitalWrite veya digitalRead kodlarının(buton veya led gibi) parantez
içini okuyarak birbirinden ayırıyor.
XXX = XXX +1
İŞLEM
void setup() {
void loop() {
Yukarıdaki programı çalıştırdığımızda bir hata ile karşılaşacağız. Bize hata ekranında
“buton değişkeni yukarıda tanımlanmış siz tekrar loop bölümünde buton değişkeninin
pinini veya değerini belirleyemezsiniz” hatası vericek. İşte bu hatayı vermesi const
ifadesi ile alakalı. Const ifadesi bu gibi durumlarda yani var olan değişkeni yanlışlıkla
programın ilerleyen kısımlarında tanımlanmasını engelliyor. Örnek programımızda
“const int buton =3;” yerine “int buton=3” ile değiştirirsek hata ile karşılaşmayacağız
ancak mantık hatası ile karşılaşacağız ve programımız düzgün çalışmayacak.
void setup() {
void loop() {
NOT; Eğer biz bu değişkeni int, float gibi tanımlamış olsaydık( yukarıdaki programdan
bahsediliyor), Arduino hafızasında 1 bayt, 2 bayt gibi yer kaplayacaktı.
define ifadesi Arduino’nun hafızasına yazılan bir işlem değildir. #define ismiyle atanmış
tüm komutlar yanındaki değişkenle değiştirilir. Bu yüzden atama anlamına gelen ( = )
işareti, normal kod olduğunu belirten ( ; ) ifadesini kullanmıyoruz.
#define XXXX XX
float sonuc; // float tipinde değişke atadık. Böl e işle i de float kulla ılır
void setup() {
void loop() {
NOT; Toplama – Çıkarma – Çarpma işlemlerinde int veri tipini kullanabiliriz. Fakat
Bölme yaparken “sonuc” değişlenini float ile atamamız yetmiyor, ayrıca bölünecek iki
sayıdan birininde float ile atanması gerekiyor. Yukarıdaki örnek programımızda olduğu
gibi.
ÖNEMLİ NOT; “=” eşittir ifadesi matematiksel ifade değildir. “=” eşittir
kullanıyorsak orada atama yapıyoruz demektir.
“==” çift eşittir ise bizim bildiğiniz “=” eşittir. Yani birşeyin birşeye eşit olduğunu söyleyen
eşittir.
ÖNEMLİ NOT; sayici =sayici+1 -> Bunun (+) yerine bunlarda olabilir.
sayici = sayici / 1
sayici = sayici - 1
sayici = sayici * 1
void setup() {
void loop() {
delay(1000); // u işle i s sa i e de ap
void setup() {
void loop() {
delay(1000); // u işle i s sa i e de ap
NOT; Karekök bulmak için sayının tam veya ondalıklı olduğuna dikkat etmemiz
gerekli. Ondalık ise “sonuc” değişkenini float ile atama yaparsak gerçeklerşir. Karekök
bulmak için;
MUTLAK DEĞER
DEĞİŞKEN ÖMÜRLERİ,
KARŞILAŞTIRMA VE MANTIK
İFADELERİ
DEĞİŞKEN TANIMLAMA
void setup() {
void loop() {
void setup() {
void loop() {
EŞİTTİR “==”
EŞİT DEĞİLDİR “!=”
KÜÇÜKTÜR “<”
BÜYÜKTÜR “>”
KÜÇÜK EŞİTTİR “<=”
BÜYÜK EŞİTTİR “>=”
Yukarıdaki ifadeleri kullanabilmemiz için öncelikle ilk başa boolean veri tipinde
bir değişken atamamız gerekir. Atanan bu değişkene bizim karşılaştırma ifadeleri
atanarak sonucu ekranda gösterir.
void setup() {
void loop() {
VEYA (OR)
1.İFADE 2.İFADE SONUÇ
0 1 1
1 0 1
1 1 1
0 0 0
DEĞİL(NOT)
1.İFADE 2.İFADE
1 0
0 1
Ve “&&”
Veya “||”
void setup() {
PARK SENSÖRÜ
MALZEMELER
Buzzer
void loop() {
NOT; “sure=pulseIn echo, HIGH ;” pulseIn komutu ile echo pininin 5V-0V durumunu sure
değişke i e ata a aptık.
WHİLE DÖNGÜSÜ
ÖRNEK; while(a<50)
{ 1
2
3
}
NOT; Loop döngüsü gibi her sona geldiğinde while geri dönecek. Döngü eğer
yukarıdaki örnek kod ise hep öyle devam eder.
void setup(){
void loop(){
void setup(){
void loop(){
NOT; Yukarıdaki programda a<50 ise bu döngüyü çalıştır. 50 olduğu anda buradaki
şart bozuldu. While döngüsü sağlanana kadar program akışı while ise devam eder.
While koşulu sağlanmazsa program loop bölümüne gelerek oradan devam eder.
void setup(){
void loop(){
NOT; Loop döngüsünün 1 kere dönmesini istediğiniz için “while(1);” kodunu kullandık.
LED 1 ADET
BUTON 1 ADET
220 veya 330 OHM ve 10K OHM DİRENÇ
void setup(){
void loop(){
NOT; Yukarıdaki programda bir hata var. Hatanın nedeni while döngüsünde yapılan
mantık hatası. Biz butona basıldığında while döngüsü çalışacak dedik. Bastık çalışıyor
led ama bırakınca sönmesi lazım ve while komutunun altındaki “Serial.println("butona
basilmiyor");” komutu ekranda görünmesi lazım. Bunun için while komutunun içine
while döngüsünün en altına “durum=digitalRead(buton);” yazmamız gerekiyor ve butona
basıldımı basılmadımı durumunu bu şekilde görebiliriz.
void setup(){
void loop(){
NOT; Her while döngüsünde butona basılıp basılmadığını kontrol etmemiz gerektiği
için while bloğunun içine “durum=digitalRead(buton);” kodunu yazıyoruz. Böylelikle
kodumuz doğru çalışıyor.
DO WHİLE DÖNGÜSÜ
do
{
Kodlar
}
while(koşul)
void setup(){
void loop(){
void setup(){
void loop(){
a=1; // a i ata
NOT; Yukarıdaki programı “if” ile sonsuz döngüye sokmuş olduk. Şöyleki a’yı 1
artırarak 49 sayısına gelmeden 1’e geri döndürecek böylelikle “do” döngüsünden
çıkılmayacak.
void setup() {
NOT; Yukarıdaki programda 1 tane switch 2 adet buton kullanıldı. Switch’in açık olma
durumunu hangi butona basıldı veya basılmadı bilgisini ekranda görebiliriz.
void loop() {
break; // aşa dö
break; // aşa dö
break; // aşa dö
break; // aşa dö
break; // aşa dö
Switch(değişken)
{
case x:
Serial.println(“xxxx”);
break;
default:
Serial.println(“xxxx”);
break;
}
default; Eğer bunlar dışında bir değer girilirse yani eksili sayılar veya bu programla
ilgili 4 değilde 5 sayısı girilirse yanlış değer ifadesini ekrana yazdırmasını istedik.
Dikkat edilmesi gereken bir nokta var. Biz case dedikten sonra bizim
değişkenimizin değeri tam sayıysa sayıyı yazdıktan sonra iki noktayla bitirilir.
ÖRNEK;
case 1:
{
case = 1:
Serial.println(“motor calisiyor”);
case =2;
Serial.println(“motor durdu”);
break;
}
Yukarıdaki örnek programda bizim algoritmamız 2 kod satırını işleyecek. Birincisi
break olmayan komutu, diğeride break olan komutu. Ekrana 2 aynı değeri girecektir.
Char sayac=0;
Switch(sayac)
{
case ‘a’:
Serial.println(“xxx”);
break;
}
Yukarıdaki örnek switch – case yapsında karakter kullanmanın örneği gösterildi.
FOR DÖNGÜSÜ
void setup() {
void loop() {
6 adet led
220 veya 330 OHM direnç 6 adet
void setup() {
NOT; Yukarıdaki programda for döngüsünde b’yi 2’den başlattık, 8’e kadar dedik, b’yi
birer birer artırdık.
“int b=2;” burada kod her döndüğünde “b” değerini 2 yazıcak. Örneğin “2’yi HIGH
yapacak 250 ms sonra LOW yapıcak” gibi. Ardından yukarı çıkacak 2’yi bir artıracak, 3
içinde { } süslü parantez içindeki işlemleri yapacak. Bu böyle devam edecek. 7, 8’den
küçük mü diye sonra işlemi gerçekleştirecek. Daha sonra tekrar 7’yi bir arttıracağı
zaman bakacak şart sağlanıyormu, “hayır sağlanmıyor”. İşte bu yüzden for döngüsünden
çıkacak.
8’de bitmesinin nedeni 7, 8’den küçük olduğu için, “7’de bitsin. 8. Pini
çalıştırmasın” dedik.
void setup() {
NOT; Yukarıdaki programda sürekli ileri giden sırasıyla ledi yakan bir program yazıldı.
Aşağıdaki kod satırı ile ileri ardından geri gelen programı yazabiliriz.
BREAK VE CONTİNUE
1 Adet buton
1 adet 10Kohm direnç
void setup() {
void loop() {
break; // durdur
NOT; Yukarıdaki programda 0’dan 20’ye kadar sayıcak butona, basıldığında break
komutu ile tekrar başa dönecek. Birçok örnek ile break komutunu kullanabiliriz.
void setup() {
void loop() {
break; // durdur
void setup() {
void loop() {
while(1) // de aşla a ak
break; // durdur
Continue; Break komutu bir döngünün çalışmasına son veriyordu. Continue ise o
andaki işlemi atlıyor.
void setup() {
void loop() {
1,2,3,4,5,7,8…..
1 Adet buton
1 adet 10Kohm direnç
void setup() {
void loop() {
void setup() {
void loop() {
while(1) { // de aşla a ak
NOT; Yukarıdaki programda a değerini int veri tipinin en son değerine kadar
arttıracak. Örneğin ekrana 103’ü yazdırdık. Yazdıktan sonra sayının değerini arttırdı. Bu
sırada buton’a bastık, buton’a basınca “continue” ifadesini gördü, bu yüzden a
değişkeninin değerinin 104 olmuş halini ekrana yazdıramadan , tekrar en başına gittiği
için a değerini 1 daha arttırdı. 104’den 105 oldu ve sonra çalışmaya devam etti. Bu
yüzden biz 103’den sonra 104 değerini görmeden direk 105 değerini görmüş olduk.
ÖZET OLARAK;
Break; Bu komut döngüden çıkartıyor.
Continue; Bir seferliğine mahsus bizim algoritmamızın çalışmasını bir miktar
engelliyor.
1 ADET POTANSİYOMETRE(100K)
void setup() {
void loop() {
2x2x2x2x2x2x2x2x2x2
ÖRNEK; 10 adet boş kutu düşünelim. Bu kutucukların her birine 1 veya 0 girecek
yani 2 değerin girilmesini hesaplıyoruz.
2 2 2 2 2 2 2 2 2 2
1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0
2 4 8 16 32 64 128 256 512 1024
void setup() {
void loop() {
“(5/1023)*1023(okunan_deger)=5V”
void loop() {
Bildiğimiz üzere Arduino’nun içinde 10 Bitlik ADC olduğu için 0-1023 arasında değişen
değerler alıyoruz. Biz bu değerleri miliVolta çevireceğiz. Örnek programı inceleyelim.
void setup() {
void loop() {
ÖNEMLİ NOT; Yukarıdaki programda hata var. İstediğimiz değeri bize veremiyor.
Çünkü bunun sebebi “voltaj_değer”i int olarak tanımladık oysaki float veri tipinde
tanımlamamız gerekiyordu.
NOT; 62 sayısının gelmesinin tanımı yok. Gereksiz bit. Yazdığımız program ile
voltajımızı ölçtük. Buradaki 303,03mV bilgisini sıcaklığa çevirecek programımıza devam
ediyoruz.
void setup() {
void setup() {
void loop() {
R=RED (KIRMIZI)
G=GREEN(YEŞİL)
B=BLUE(MAVİ)
Ortak anotlu RGB ledde artı, Ortak katot ise eksiye bağlanmalı. Tüm led bacakları 220
veya 330 OHM direnç ile bağlamalısınız.
NOT; PWM sinyali olan pinlerimize bağlıyoruz RGB ledimizin renk bacaklarını. Anot
RGB (+), Katot(-) bağlanacak.
void setup() {
void loop() {
NOT; Yukarıdaki programda Anot RGB Led bağlantılarını yaparak kırmızı rengi elde
ettik. Kırmızı ledi yakarken digital sinyaller kullandık. Bir sonraki örnek programda
Analog çıkışlarla RGB ledi yakacağız.
Void loop bölümünde Kırmızı ledi elde ettik ama bunu LOW olarak elde ettik.
Nedeni ise Anot RGB ledi kullanmamız. Farkındaysanız sinyal bacaklarını
Arduino’muzun pinlerine, Anot bacağını 5V’a bağladık. Burada GND olarak herhangi
işlem yapmadık. Yapmak için programda istediğiniz renkleri elde etmek için o pini LOW
olarak tanımlarız. Fakat bunu Anot’ta yaparız Katot’da ise tam tersi HIGH yaparız.
NOT; RGB ledin Anot – Katot olma durumunu ölçü aletimizle test edebiliriz. Öncelikle
ölçü aletimizi diyot ölçme fonksiyonuna getiriyoruz ve ardından kırmızı probu Ortak(Anot
veya Katot) bacağa tutuyoruz. Siyah probu’da herhangi renk bacağına tutuyoruz eğer
yanarsa RGB led Anot. Ortak kısma siyah, Renk bacaklarında birine kırmızı probu
değdirdiğimizde yanarsa Katot RGB led oluyor.
ANALOG ÇIKIŞ
Potansiyometre ile buzzerin sesini kontrol edeceğiz. Potansiyometre’nin 1.ucu(-),
2.ucu(AnalogPin), 3.ucu(+). Buzzer’in 1.ucu(-), 2.ucu Arduino’muzun PWM sinyali
gönderen pinine bağlıyoruz.(~ - 3,5,6,9,10,11).
void loop() {
NOT; Bizim Analog pinlerimiz 0-1023 arasında okuma işlemi yapıyorsa, çıktı işlemini
0-1023 arasında okuma yapıyor sanıyorsanız yanılgıya düşersiniz. Çünkü 0-1023
arasında okuma yapıyor ama 0-255 değerler arasında çıktı alıyor.
0-1023 arasında giriş alıp, 0-255 arasında çıktı vericeksek bu iki değeri birbirine
senkronize etmemiz gerekiyor.
NOT; Giriş kullanmadan yada map komutu kullanmadan’da direk analog çıkış
alabiliriz.
AKILDA KALANLAR;
CEVAP; Öncelikle Arduino’nun sitesinde “PWM; 3,5,6,9,10 ve 11. Pinleri 8-bit PWM
destekli sinyali çıkış olarak alabilirsiniz. “analogWrite()” fonksiyonunu kullanarak.”diyor.
2 2 2 2 2 2 2 2
Burada “0” sıfır’ıda kattığımız için hesaba değer toplamı 256 oluyor. İşte bu yüzden
Arduino’muzun içindeki PWM sinyali destekli pinler 8BİT olduğu için 0-255 arasında
çıktı veriyor.
PWM NEDİR?
“Pulse width modeslation” darbe genlikli modülasyon.
16.derste 10Bit’in ne anlama geldiğini öğrenmiştik.
Digital çıkış alıyoruz fakat “10Bit-ADC” gibi analog değerinde bir modülü varmı diye
düşünebilirsiniz ama düşünmeyin çünkü yok. Bu işi PWM yapıyor. Öncelikle PWM
Sinyalini anlayabilmemiz için digital ve analog sinyaller hakkında bilgi sahibi olmamız
gerekli.
DC; Bir doğru akım elektrik yük akımının zamanla değişmediği sabit kaldığı akımdır.
ANALOG SİNYAL
void setup() {
void loop() {
NOT; Yukarıdaki programda analog değerler ile istediğimiz işlemleri yapıyoruz. 255
Sayısını daha önce öğrenmiştik.
FONKSİYONLAR -1-
Soru; Bu fonksiyon nasıl değer döndürecek yani bu fonksiyon sonunda bilgi ne tarz
bilgi olacak?(int – float – long – double – void )
-Bir değer döndürmemesini istediğimiz için “Void” ile başlıyoruz.
void loop() {
void setup() {
void loop() {
FONKSİYONLAR -2-
1 adet led
2 adet buton
1 adet switch
1 adet 220 veya 330 OHM direnç
3 adet 10k Direnç
void setup() {
void loop() {
KOD AÇIKLAMALARI;
1 ve 4. Kod satır aralığında Arduino’muza bağladığımız bileşenlerin pin ve isim
atamalarını yaptık.
40. ve 45. Kod satırları aralığında for döngüsünün içinde “tur_sayisi” adlı
değişkenin değerini “fonksiyon2()” ile belirliyoruz.
While döngüsüne giriş elde ettikten sonra geri while döngüsünden çıkabilmek için
okuma işleminin aynısını yazmak lazım. Onuda 33. Program satırında yazdık.
Son olarakta while döngüsünden çıkış sağladıktan sonra ortaya çıkan sayac
değerini, geri “fonksiyon2()” adlı değişkene göndermemiz gerekiyorki, bu sayac
değişkeni “tur_sayisi” adlı değişkene kayıt edilsin, bu değişkende gelip for
döngüsünde kullanılsın. Bu yüzden “fonksiyon2()” değişkenine sayac’ı
göndermemiz için 10. Kod satırında “int fonksiyon2()” değişkenin en sonuna
“return sayac;” ifadesini ekliyoruz. 34. Kod satırında yapıldı.. Bu sayede sayac adlı
değişken(34) hesaplandıktan sonra “fonksiyon2()”nin yerine 40. Kod satırında
“tur_sayisi” adlı değişkene gönderiyouz. Ordanda for döngüsünde kullanılıyor.
Eğer 12. Kod satırında while kullanmasaydık, her bir butona bastığımızda, basar
basmaz o değişkeni gönderecekti, her seferinde hatalı çalışacaktı.
Önce biz 16. Kod satırında sayac değerini ayalıyoruz, ayarlama bittikten sonra
sayac değişkeninin durumunu kapatıyoruz, daha sonra sayac değişkenimizin
değeri aşağıya gidiyor. Biz ayarlama esnasında kapanmasın diye bir switch ile
kontrol ediyoruz.
15. Kod satırında “arti” HIGH iken if komutu çalışıyor. sayac’ı 1 artırdı, ekrana
sayac adlı kelimeyi yazdı arkasından değeri yazdı.
19. Kod satırında “hala butona basılıyormu”. Eğer butona basılmaya devam
ediliyorsa tutup bu sayac’ı artırmasın diye kendisini “while(1)” döngüsünün içine
kilitlemesi gerekiyor(20).
Bu sayede kendisini while içersine kilitledi. Bu durum sonsuz döngü olur. Sonsuz
döngüden çıkarmak için “while(1)”den çıkarmamız lazım. Onuda “if(arti == LOW)”
yani butona basılma işlemi bırakılmışsa “break” ile bitiriyoruz.
21. ve 30. Kod satırında if durumunu okuması için gereken kodu yazdık.
46. Kod satırında “while(1)” yazarak yapılacak işlemin bir kere yapılmasını
istedik. While’den bunu çıkartmamız için ise 48. ve 49. Kod satırında durum
değişkenimiz HIGH olduğunda while’de çıkmasını istedik.
12. Satırda durum değişkeni HIGH olduğu zaman sayac çalışmaya başlıyordu,
durum değişkeni LOW olduğu zamanda ledi yakmaya başlıyor.
48. Kod satırında durum değişkenini HIGH yaptığımızda break komutu sayesinde
while içinden çıkacak. Fakat öncesinde 47. Kod satırında olduğu gibi durum’u
okumamız gerekiyor.
FONKSİYONLAR -3-
void setup() {
KOD AÇIKLAMALARI;
İlk olarak 11. Kod satırındaki kod parçacığı yazılacak. 2.30 saniye sonra
“tur_sayisi” adlı değişkene 10 değeri atanacak. Sonrada 14. Kod satırında
“fonksiyon3(tur_sayisi)” çalıştırılacak ve fonksiyon3’de “tur_sayisi” adlı değişken
parametre olarak gönderilecek.
Bildiğiniz gibi fonksiyon tanımlama için 3 tane bilgi lazım; Veri tipi Fonksiyon ismi
(Parametre).
13. Kod satırında 10 sayısının yerine yazdığımız sayıları buton’a basarak sayı
adeti kadar ledi yakabiliriz.
void setup() {
void loop() {
Daha sonra algoritma gidiyor 4. Kod satırına “topla” adlı değişkeni buluyor ve
sonra a ve b adlı 2 tane değişken getiriyor. A’dan geleni birincisine, B’den geleni
2.’ne kayıt ediyor.
void setup() {
KOD AÇIKLAMALARI;
15. kod satırında “cikart” adlı fonksiyon tanımladık. Bunuda “b,a” olarak
tanımladık. B 1.değişkene, A ise 2. Değişkene tanımlanacak. Yani 16’dan 5’i
çıkartacak. Oda 11 olacak. 18. Kod satırında da “while(1);” diyerek programı
kilitliyoruz.Yani döngü sadece 1 kere çalışacak.
FONKSİYONLAR -4-
void setup(){
void loop(){
20. ve 23. Kod satır aralığında dört tane değişkenimiz var ve bunları en yukarıda
int veri tipin’de tanımdadık. 20. ve 23. Kod satırlarında fonksiyon isimlerimizi
tanımladık.
14. Kod satırında bölme işleminde çıkan sonucunda float veri tipinde olması için
yeni sayıdan sonra noktalı kısmın olması için(6.0), küsüratlı çıkmasını istiyorsak
yapmamız gereken 3 değişkenden en az 1 tanesini float tanımlamamız
gerekiyor. Yani sonuç, bölen ve bölünen’in sonuçtan sonra en az 1 tanesini float
olarak tanımlanması gerekiyor. Burada bolme değişkeni float olarak tanımlandı.
Küsüratlı sayıyı görelim diye 15. Kod satırında “0.6” olarak tanımladık.
void setup() {
pinMode(4, OUTPUT);
void loop() {
digitalWrite(2, HIGH);
delayMicroseconds(35000);
digitalWrite(2, LOW);
delayMicroseconds(35000);
millis();
void setup() {
Serial.begin(9600);
void loop() {
simdikizaman = millis();
Serial.println(simdikizaman);
NOT; Yukarıdaki programda, “unsigned long” adında bir değişken oluşturduk. Adını
“simdikizaman” diye tanımladık. Bu değişkene “millis()” fonksiyonuyla değer atıyoruz.
“millis()” fonksiyonu çalışmaya başladığı andan itibaren Arduino’nun çalıştığı
süreyi “simdikizaman” değişkenine aktaracak. Milisaniye cinsinden.
SORU; Yukarıdaki yazdığımız program kayıt edilen süre nereye kadar kayıt edecek?
CEVAP; unsigned lond veri tipi’nin değeri kadar.
1 GÜN = 24
1 SAAT/DAKİKA = 60
1 DAKİKA/SANİYE = 60
void setup() {
void loop() {
KOD AÇIKLAMALARI;
Değişkenleri tanımladık.
void setup() {
void loop() {
DİZİLER; Belli miktardaki verileri toplu olarak tutmaya yarıyor. Örnek programı
inceleyelim.
void setup() {
Serial.begin(9600);
void loop() {
Serial.println(ogrenci1);
NOT; Yukarıdaki programda int veri tipinde öğrencilerin notları tanımlanmış. Serial
monitörde öğrencilerin notunu girmek için “Serial.println(ogrenci1);” yazarak istediğimiz
öğrencinin notunu ekranda görebiliyoruz.
“ogrenci1” değerine yeni bir atama yapmak için void loop’ta en başa
“ogrenci1=100” yazıyoruz ve ilk değerin yerine(01), 100’ü yazıyor. Aşağıdaki programı
inceleyelim.
void setup() {
Serial.begin(9600);
void loop() {
Serial.println(ogrenciler[5]);
EN YUKARIYA YAZILIR.
Serial.println( xxx[x]);
LOOPA YAZILIR.
Dizileri tanımlarken veya onlara değer atarken sıkıntı yok ama o dizileri
kullanmak için aşağıda çağırırken ki bizde çağırdık. “(ogrenciler[5]);”
0’dan başlıyor.
ÖRNEK;
int ogrenciler[ ] = {50,55,60…};
ÖRNEK;
“İnt ogrenciler[ ];”
Burada hatalı bir kullanım yapıldı, hem değer vermiyorsunuz hemde diziyi
belirtmiyorsunuz.
void setup() {
Serial.begin(9600);
void loop() {
Serial.println(ogrenciler[8]);
int y;
void setup() {
Serial.begin(9600);
void loop() {
ogrenciler[0] =y;
Serial.println(ogrenciler[0]);
Aynı şekilde bir değişkene dizinin elemanını atayabiliyorsak bir diziyede farklı
bir değişkenin elemanını atayabiliriz.
int y =800;
void setup() {
Serial.begin(9600);
void loop() {
ogrenciler[0] =y;
Serial.println(ogrenciler[0]);
NOT; “ogrenciler[0]=y;” dersek y’nin ilk değeri 800 olursa 0. Diziye yani ogrenciler[ ]
ilk elemanına y değişkeninin değeri 800 ekrana yazılacaktır.
Karakter ataması yaparken örneğin {a,b,c,d} gibi yazarsak hata verir. Karakterleri
tek tırnak ile tanımlamalıyız. “{‘a’ , ‘b’, ‘c’ , ‘d’};” gibi. Örnek programı inceleyelim.
void setup() {
Serial.begin(9600);
void loop() {
Serial.println(klavye[3]);
void setup() {
Serial.begin(9600);
void loop() {
klavye[1] = fare;
Serial.println(klavye[1]);
void setup() {
void loop() {
NOT; İlk olarak 4. Kod satırındaki gibi “ogrenci”yi ekrana yazdırıyoruz. Daha sonra 5.
Kod satırındaki gibi “ogrenci”nin numarasını yazdıracağız. “( i ilk başta 0’dan başlıyor,
“ogrenci0”ın değerini ekrana yazdırıyor, sonra for döngüsü 1 tur atıyor “i”nin değeri 1
oluyor. Bu böyle gidiyor. )” 5. Kod satırında “i”yi yazdık ve “ogrenci”nin hangi “ogrenci”
olduğunu ekranda numarasıyla gösteriyor.
Bu diziler gibi daha birçok dizi bilgilerini ekrana yazdırabilirsiniz.
12 21 33 42 95
0 1 2 3 4
2,2 SATIR
9
SATIR SÜTUN
9
SÜTUN
0 1 2 3 4
void setup() {
Serial.begin(9600);
void loop() {
0 1 2 3 4
void setup() {
Serial.begin(9600);
void loop() {
ogrenciler[0][1] = 189;
void setup() {
Serial.begin(9600);
void loop() {
Serial.print(j);
Serial.print(" * ");
Serial.print(i);
Serial.print("=");
Serial.print(ogrenciler [j][i]);
delay(500);
Serial.println();
while(1);