ARDUINO PROGRAMLAMA KİTABI Bir parça kod! Uğur DEMİR Seri Port 13. Pin ledi Dijital Giriş/Çıkışlar Rx/Tx ledi USB Port Güç ledi Reset Butonu Voltaj Regülatörü Mikrokontroller Güç Girişi 7-12V Güç Pinleri Analog Girişler random if / else switch / case analogRea d digitalWrite interrupt I2C / SPI int Kapak Fotoğrafı: Arduino Uno Copyright © 2016 Uğur DEMİR. Bu kitabın yazımı Arduino resmi sitesindeki Reference bölümü referans alınarak yazar tarafından derlenerek yazılmıştır. Her hakkı saklıdır. Arduino Programlama Kitabı: Bir parka kod! Copyright © 2016 Uğur DEMİR Her hakkı saklıdır. Yazarla irtibat [email protected] Ücretsiz PDF http://www.ugrdmr.wordpress.com ISBN: - Uğur Demir 1992 yılında Eskişehir de doğdum. Lise öğrenimimi Türk Telekom Anadolu Teknik Lisesi Elektrik Elektronik Bölümü, lisans eğitimimi Sakarya Üniversitesi Elektrik Elektronik Mühendisliğini başarıyla bitirdim. Yaklaşık bir senedir Sakarya Üniversitesi Teknokent’de özel bir firmada Ar-Ge R & D Mühendisi olarak çalıştım. Bir senedir de Gömülü Sistemler Uzmanı olarak çalışmaktayım. Yaklaşık beş senedir Arduino, Beaglebone ve Raspberry Pi ile çeşitli projeler hayata geçirdim. Blog sitemde yaptığım bazı projeleri açık kaynak kod olarak paylaşıyorum. Open Source açık kaynak kod olarak olarak paylaştığım ilk kitabımdır. Biraz da olsa açık kaynak kodlu platforma faydamız olabilirse ne mutlu. Teşekkür Bu kitabın yazımında bana destek olan Mekatronik Mühendisliği okuyan kardeşim Okan KOÇOĞLU’na, bana ilham veren sevdiğim, hayat yoldaşım Sakine KÖKLÜ’ ye ve bana bu fikri aşılayan Elektronik Mühendisi, Genel Müdürüm Sayın Orhan NERGİZ’e teşekkürlerimi sunarım. İçindekiler 1. Giriş ....................................................................................................... 1 1.1. Microkontroller nedir? ............................................................... 2 1.2. Arduino Özellikleri ...................................................................... 4 1.3. Arduino Yazılımının Yüklenmesi.................................................. 6 1.4. İlk Program ................................................................................. 9 2. Program Yapısı .................................................................................... 10 2.1. void setup() ............................................................................... 10 2.2. void loop() ................................................................................ 10 2.3. #define...................................................................................... 12 2.4. #include .................................................................................... 12 3. Kontrol Yapısı ...................................................................................... 13 3.1. if ................................................................................................ 13 3.2. if/else ........................................................................................ 15 3.3. switch/case ............................................................................... 16 3.4. while ......................................................................................... 18 3.5. do/while ................................................................................... 20 3.6. break ......................................................................................... 21 3.7. continue.................................................................................... 22 3.8. return ....................................................................................... 22 3.9. go to ......................................................................................... 24 4. Söz Dizimi ..................................................................................... 24 4.1. Noktalı Virgül (;) ........................................................................ 24 4.2. Süslü Parantez ({}) ..................................................................... 25 4.3. Çift Slash(//) .............................................................................. 26 4.4. Yıldızlı Slash(/**/) ..................................................................... 26 5. Aritmetik Operatörler ......................................................................... 26 5.1. Toplama, Çıkarma, Çarpma, Bölme .......................................... 26 6. Karşılaştırma Operatörleri .................................................................. 27 6.1. ==(eşit eşit) , != (eşit değil), < (küçük), > (büyük), <= (küçük eşit), >= (büyük eşit) ......................................................................... 27 7. Boolean Operatörleri .......................................................................... 28 7.1. && (and) ................................................................................... 28 7.2. || (or) ....................................................................................... 30 7.3. ! (not) ........................................................................................ 30 8. Birleşik Operatörler ............................................................................ 31 8.1. ++ (arttırma), -- (azaltma) ........................................................ 31 8.2. += , -= , *= , /= , %= ................................................................... 31 8.3. &= (Bitsel Lojik Ve) ................................................................. 32 8.4. |= (Bitsel Lojik Veya) ................................................................ 33 9. Sabitler ................................................................................................ 34 9.1. HIGH | LOW .............................................................................. 34 9.2. INPUT | OUTPUT ...................................................................... 34 9.3. true | false ................................................................................ 35 9.4. integer constants ...................................................................... 36 9.5. U & L ........................................................................................ 37 9.6. floating point constants ............................................................ 37 10. Dönüşümler ........................................................................................ 37 10.1. char ........................................................................................... 37 10.2. byte........................................................................................... 37 10.3. int ............................................................................................. 37 10.4. unsigned int .............................................................................. 38 10.5. long .......................................................................................... 38 10.6. float .......................................................................................... 38 10.7. string ......................................................................................... 38 10.8. substring() ............................................................................... 38 11. Değişken kapsamları ........................................................................... 40 11.1. static ........................................................................................ 40 11.2. volatile ..................................................................................... 40 11.3. const ........................................................................................ 40 11.4. PROGMEM ............................................................................... 40 11.5. sizeof() ..................................................................................... 42 12. Dijital Giriş Çıkışlar .............................................................................. 43 12.1. pinMode(pin,mod) .................................................................. 43 12.2. digitalWrite(pin,değer) ............................................................ 43 12.3. digitalRead(pin) ....................................................................... 43 13. Analog Giriş Çıkışlar ............................................................................ 45 13.1. analogRead(pin,mod) .............................................................. 45 13.2. analogWrite(pin,değer) ........................................................... 47 13.3. analogReference(tip) ............................................................... 48 14. Gecikmeler .......................................................................................... 49 14.1. delay(milisaniye) ...................................................................... 49 14.2. unsigned long millis() ............................................................... 49 14.3. delayMicroseconds(mikrosaniye) ............................................. 51 15. Matematiksel İşlevler ......................................................................... 51 15.1. min(x,y) .................................................................................... 51 15.2. max(x,y) ................................................................................... 52 15.3. abs(x) ....................................................................................... 52 15.4. constrain(x,a,b) ........................................................................ 52 15.5. map() ....................................................................................... 53 15.6. pow(a,b) .................................................................................. 53 15.7. sqrt(a,b) ................................................................................... 53 16. Trigonometri ...................................................................................... 54 16.1. sin(rad) ..................................................................................... 54 16.2. cos(rad) .................................................................................... 54 16.3. tan(rad) .................................................................................... 54 17. Karakterler ......................................................................................... 54 17.1. isAlphaNumeric() ..................................................................... 55 17.2. isAlpha() ................................................................................... 55 17.3. isAscii()...................................................................................... 55 17.4. isWhiteSpace() .......................................................................... 55 17.5. isControl() ................................................................................. 55 17.6. isDigit() ..................................................................................... 55 17.7. isGraph() ................................................................................... 55 17.8. isPrintable() .............................................................................. 55 17.9. isPunct() .................................................................................... 55 17.10. isSpace() ................................................................................. 55 17.11. isUpperCase() ......................................................................... 55 17.12. isHexaDecimalDigit() ............................................................... 55 18. Seri Haberleşme .................................................................................. 58 18.1. Serial.begin(hızı) ....................................................................... 58 18.2. int Serial.available() .................................................................. 59 18.3. int Serial.read()) ........................................................................ 59 18.4. Serial.flush() .............................................................................. 60 18.5. Serial.print(data)....................................................................... 62 18.6. Serial.println(data).................................................................... 62 19. İnterruptlar (Kesmeler) ....................................................................... 62 19.1. interrupts() .............................................................................. 62 19.2. noInterrupts() .......................................................................... 64 20. Random Sayılar ................................................................................... 67 20.1. randomSeed() .......................................................................... 67 20.2. random(min,max) .................................................................... 68 21. Gelişmiş Giriş Çıkışlar .......................................................................... 68 21.1. tone() ....................................................................................... 68 21.2. noTone() .................................................................................. 69 21.3. shiftOut() ................................................................................. 69 22. Kütüphaneler ...................................................................................... 72 22.1. EEPROM ................................................................................... 72 23. Haberleşme Protokolleri ..................................................................... 77 23.1. I2C Veri Yolu ............................................................................ 77 23.2. SPI Veri Yolu ............................................................................. 81 24. Arduino Detaylı Pin Yapısı .................................................................. 85 25. ASCII Kodları........................................................................................ 86 Kodlar Listesi ....................................................................................... 88 Şekiller ve Tablolar Listesi .................................................................. 89 Uğur DEMİR - Bir parça kod! 1. Giriş Arduino Programlama Kitabı – Bir parça kod! Bu kitabın amacı Arduino Atmel Atmega 328P Mikrodenetleyici kullanarak özellikle Arduino için C programlama dilini öğrenmek için yazılmıştır. C genel amaçlı bir programlama dilidir. Geliştirildiği ortam olan UNİX sistemi ile yakından ilgilidir. Derleyici ve işletim sistemleri yazmak için oldukça kullanışlı olması nedeni ile “sistem programlama dili” olarak adlandırılır. C iyi düzenlenmiş programların geliştirilebilmesi için gerekli temel akış kontrolü sunar. Bunlar gruplama, karar verme(if- else), olası durumlarından biri dallanma(switch), döngülerde koşul sınamanın başta (for,while) ve döngülerden ani çıkma (break) olarak sayılabilir. Arduino programlanırken C dilinin yanı sıra asıl beslendiği yer kütüphanelerimizinde yazıldığı C++ dilidir. Bizim kullandığımız fonksiyonlar arkada çalışan ve programımıza en başta eklediğimiz kütüphanelerden gelmektedir. Bu kitapta Arduino için yazılmış özel kütüphanelerde kullanacağımız hazır fonksiyonlar ve C nin temeli anlatılmıştır. Arduino projelerimizde ister uzaya göndereceğimiz araç yapalım ister akıllı saat ister led yakıp söndürelim programlama yaparken önceliğimiz her zaman basitlik olmalıdır. Parçaları birleştirerek, basitten başlayarak bütüne varmak bir parça kod ile başlayacaktır. Bir parça kod ile harikalar yaratabiliriz. Hadi başlayalım. 1