 |
| İf Else akış diyagramı |
Merhaba bu yazıda kod deyince akla en çok gelen ve basit olan yapı olan İf - Else yapısınında bahsedeceğim. Çok bilinen yapı olduğu için kısa bir yazı olacak. İf kelime anlamı olarak "eğer" demek yani bir koşul eğer olursa bunlar olsun demek için kullanılıyor. Else is değil anlamında dır yani bir koşul olmazsa bunlar olsun demek için kullanılır. Birde bu ikisinin birleşimi Else İf yapısı var, bu yapıda koşul birden fazla duruma sahip olabilirse kullanılıyor Şimdi bu kalıbı Arduino da nasıl kullanacağımıza bakalım.
/*arduonik.blogspot.com
// bu arada tek satır yorum için kullanılırken /* - * / çok satırlı yorum için kullanılıyor
*/
int acik=1; // int türünde ve acik adında bir değişken oluşturuyoruz. Bu değişken daha sonra lambamızı kontrol edecek.
//led 0 da kapalı, 1 de yanıp sönecek ve diğer durumlarda devamlı yanacak.
// bu örnek için değeri elle girp kodu arduinoya atacağız daha pc daha da sonra bluetooth ve internet üzerinden ayarlıyacağız her şey zamanla :) .
int led = 13; // Arduino üstündeki ledi kullanacağımız için led 13. pin olarak ayarlıyoruz
void yanip_sonme(int sure){// bir önceki yazıyı hatırlamak amaçlı yanıp sönme işlemini fonksiyon ile yapalım
digitalWrite(led, HIGH); //ledimize elektrik veriyoruz
delay(sure); //sure değeri kadar bekliyoruz
digitalWrite(led, LOW); //led elektriğini kesiyoruz
delay(sure); // sure kadar bekliyoruz
}
void setup() { // Bu bölümün ne amaçla kullanıldığını bilmiyorsanız daha önceki yazılara kababilirsiniz
pinMode(led, OUTPUT); //led pinimizi çıkış olarak ayarlıyoruz
}
void loop() { // Bu bölümün ne amaçla kullanıldığını bilmiyorsanız daha önceki yazılara kababilirsiniz
if(acik == 0){ //eğer acik değişkeni sıfıra eşitse
digitalWrite(led, LOW); // led kapalı olsun diyoruz
}
else if(acik ==1){ // eğer acik değişkeni 1 ise
yanip_sonme(650); // yanıp sönme fonksiyonumuzu çalıştırıyoruz ve bekleme değeri için 650 ms diyoruz
}
else{ //diğer durumlar için yapılacakları belirtiyoruz dikkat ettiyseniz burada parantez yok
digitalWrite(led,HIGH); //acik in 0 ve 1 olmadığı durumlarda led devamlı yanacak
}
}
İf else yapısı kullanılmış karanlıkta yanan led örneğini de incelemenizi tavsiye ederim.
Dikkat ettiyseniz yukarıda ki örnekte sadece eşitlik durumları kullanılmış fakat İf - Else yapısı küçük, büyük gibi karşılaştırma yapmaya imkan tanımaktadır. Bu ifadeleri liste halinde ekliyorum.
== (eşitli)
- != (eşit değillik)
- < (küçüklük)
- > (büyüklük)
- <= (küçük eşitlik)
- >= (büyük eşitlik)
Merhaba arkadaşlar bu yazımda daha önce oluşturduğumuz fonksiyonları biraz daha özelleştireceğiz ve parantez içine bir şeyler ekleyip eklediğimiz şeylere göre farklı sonuçlar elde edeceğiz. Tanım biraz karışık gelmiş olabilir farkındayım ama kodlar içindeki açıklamalar size yardımcı olacaktır.
İlk olarak daha önce burada örneğini yaptığımız led uygulamasının basit halini yapacağız sizde Arduinoya ısınmak için bu örneği aşağıdaki yöntemle yaparsanız sizin için çok iyi olur. Takıldığınız yer olursa yorum olarak sormaktan çekinmeyin.
İlk örnekte devre kurmamıza gerek yok direk Arduino kartımızda bulunan ledi kullanacağız.
// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13; // pinimize "led" adını veriyoruz
void ac_kapa(int bekleme){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada bekleme adında bir int değişken var
// fonksiyonu kullanırken bu değişken yerine istediğimiz değeri yazarsak sadece bu fonksiyon içinde kullanılan bekleme değişkenleri yazdığımız değeri alacak
digitalWrite(led, HIGH); // ilk başta ledimizi açık duruma getiriyoruz
delay(bekleme); // ve bekleme değişkeni kadar bekliyoruz
digitalWrite(led, LOW); // ardından ledi kapatiyoruz
delay(bekleme); // ve led kapalıyken bekleme değişkeninin değeri kadar bekliyoruz
} // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {
pinMode(led, OUTPUT); //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}
// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500); // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme değişkenini 500 yapıyoruz yani her iki delay da 500 ms olacak
}
Şimdi bu kodu biraz daha geliştirip açık kalma ve kapalı kalma sürelerini farklı farklı olarak kullanalım
// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13; // pinimize "led" adını veriyoruz
void ac_kapa(int bekleme_acik,int bekleme_kapali){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada
//bekleme_acik ve bekleme_kapali adında iki int değişken ekliyoruz
// fonksiyonu kullanırken bu değişkenler yerine istediğimiz değeri yazarsak bu fonksiyon içinde kullanılan bekleme_acik ve bekleme_kapali değişkenleri yazdığımız değerleri alacak
digitalWrite(led, HIGH); // ilk başta ledimizi açık duruma getiriyoruz
delay(bekleme_acik); // ve bekleme_acik değişkeni kadar bekliyoruz
digitalWrite(led, LOW); // ardından ledi kapatiyoruz
delay(bekleme_kapali); // ve led kapalıyken bekleme_kapali değişkeninin değeri kadar bekliyoruz
} // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {
pinMode(led, OUTPUT); //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}
// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500,250); // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme_acik değişkenini 500, bekleme_kapalı değişkenini 250 yapıyoruz yani her iki delay da farklı olacak
}
Daha öncede dediğim gibi blogta ki örneklerden Trafik Lambası örneğinin devresini kurup kendi yazdığınız foknsiyon ile fonksiyon içine yazılan rengi yakacak bir kod yazmak size bir şeyler katacaktır. Takıldığınız yeri yorumda sorabilirsiniz.
Uzun bir aradan sonra merhaba. Bu yazımda önce Arduino programlarken her zaman kullanacağımız Setup, loop terimlerinden ve kendimiz nasıl yeni fonksiyon yazacağımız dan bahsedeceğim. Zaten yandaki şekil Setup ve Loop için kafanızda bir şeyler canlandırmıştır. Bu arada Void setup ve Void loop yani Arduinonun çalışması için gereken kodlara BareMinimum denmektedir.
Void Setup
void setup bir fonksiyondur ve yeni Arduino IDE lerinde siz yazmadan yeni sayafada karşınıza gelir. bu fonksiyon karta elektrik verdiğimizde sadece bir sefer çaılışır ve sırasını loop fonksiyonuna bırakır. Eğer reset butonuna basarsak yani gücü kesip geri verirsek tekrar çalışır. Sadece bir defa çalıştığı için adından da anlaşıldığı üzere kartın kurulum bilgilerini barındırır. Genelde seri bağlantı başlatılması, pinlerin nasıl çalışacağının belirlenmesi gibi sadece başta ve bir defa yapılması gereken işlemler burada belirtilir. pinlere isim takma yada değişken belirleme işleri ise bu fonksiyon çalışmadan yapılır.
Void Loop
Setup fonksiyonun bir sefer çalışması ardından devamlı çalışan kısımdır. Bu kısımda devamlı olarak çalışmasını istediğimiz sensör ölçümü ve işlenmesi, veri alışverişi, pini aktif ve pasif ( 1-0 durumu) gibi kodlar içerir.
Kullanımları aşağıda ki gibidir.
void setup() {
// yalnızca bir sefer çalışacak kurulum kodları
}
void loop() {
// devamlı bir döngü ile çalışacak işlem kodları
}
Fonksiyon Oluşturma
Fonksiyonlar bir işleme isim takma gibi düşünebiliriz. Özellikle uzun kodlarda kafamız karışabilir veya bir işlemi birçok kez kullanmamız gerekebilir, bu gibi durumlarda fonksiyonları kullanmak çok yararlı olacaktır. Mesela bir çizgi izleyen robot yaptığımızda motrun sola ve sağa dönmesi için iki farklı fonksiyon yazdığımızda kodumuz dağa anlaşılır olacak ayrıca düzeltmeleri daha kolay yaparsınız. sözlü anlatımdan ziyade bir örnek daha anlaşılır olacaktır.
int led = 13; // 13. pinimizin adını led olarak belirliyoruz
void setup() {
// sadece bir defa çalışacak kurulum kodlarımızı yazıyoruz(pin mod, seri bağlantı başlangıcı gibi)
pinMode(led, OUTPUT); // led pinini çıkış pini olarak ayarlıyoruz
}
void loop() {
//sürekli döngü içinde çalışacak kodumuzu yazıyoruz
ac_kapa();//ac kapa fonksiyonunu çalıştırıyoruz fonksiyon loop içinde olduğu için
}
void ac_kapa(){
//kendimize ait bir fonksiyon yazıyoruz
digitalWrite(led, HIGH); // Ledi yakıyoruz
delay(1000); // bir saniye led açık durumda bekliyoruz
digitalWrite(led, LOW); // ledi kapıyoruz
delay(1000); // bir saniye daha bekliyoruz
}
Daha sonra eklenecek örnek projelerde kullanımları ile fonksiyonları daha iyi kullanacağız.Ayrıca devre şemasını eklemiyorum sitemde 3 farklı örnek bulunmakta. Direnç eklemeyi unutmayın her ledin farklı bir iç direnci olduğu için bazı ledler direnç kullanmadan yanarken bazıları küçük dirençler kullansanız dahi bozulabilir bunun hesabını da ilerleyen günlerde paylaşacağım
Merhaba arkadaşlar bugün Arduino programlarken temel dil olan C dilinin değişkenlerinden bahsedeceğiz. Kod yazarken bir çok hesaplama, eşitleme ve adlandırma yaparız değişkenler bu değerlerin saklandığı yerlerdir. Mesela Arduino da pinler sayı olarak belirtilir ancak çok fazla pin kullınca hangi pin neye bağlı olduğunu karıştırabiliriz bu nedenle her bir pine ad veririz ve bu esnada değişken kullanırız, yada sensör değerlerini değişkenler de saklarız. Fark ettiyseniz verdiğim iki örnekten biri harf lerden oluşurken diğeri sayılardan oluşur ve biz bu ikisini farklı tür değişkenler de kullanırız. Bu yazıda en çok kullanılan char, int, long, float, double ile ön ekleri olan const ve unsigned terimlerini inceleyeceğiz. Önce ön ekleri inceleyelim bu ekler hepsinde geçerli ancak basit projeler de pek kullanılmazlar
Const
Const önüne geldiği değişkenin daha sonra değişmesine engel olur. Yani sadece okunabilir yapar ve genelde Pi gibi sabit değerler ile pin tanımlamaları yapılırken kullanılır.
const float pi = 3.14;
Unsigned
Önüne geldiği değişkenin negatif kısımlarını da pozitife ekler ve sadece pozitif sayıları algılatır. Mesela Char -128 ile 127 arsında sayı alırken Unsigned Char 0 ile 255 arasında değer alır.
unsigned char e = 240;
Artık değişkenlere geçelim üsteki ön ekler için her bir değişkene özel örnek belirtmeyeceğim.
Char (character)
Char veri tipi her tek karakteri veya İşaretli -128 ile 127 arası tam sayı saklaya bildiğimiz ve hafızadan 1 byte yer çalan değişkendir.
char c = 'd';
Int(integer)
Bu değişken türü en çok karşılaşılan değişkenlerin başında gelir. Uno gibi ATmega tabanlı kartlarda -32768 ile 32768 arası tam sayı değeri alıp 2 byte(16 bit) harcarken Due gibi kartlarda -2147483648 ile 2147483647 arsında tam sayı değeri alıp 4 byte ( 32 bit) yer kaplar.
int b= 3;
Long
-2147483648 ile 2147483647 arasındaki sayıları barındırır ve 4 byte yer kaplar. Eğer int ile long değişken türleri arasında matematiksel işlem yapılacaksa sonuna rakamın sonuna L eklenir. 7 basamak hassasiyetine sahiptir.
long l = 186000L;
long f= -135.7;
Double
Long ile benzerdir ancak basamak hassasiyeti 16 dır. Uno gibi ATmega kartlarda 4 byte Due gibi kartlarda 8 byte yer kaplar. Long double ile hassasiyet 20'ye kadar artar.
double g= -135.16;
Float
Bu değişken -3.4028235E+38 ile -3.4028235E+38 arsındaki sayıları 4 byte yer kaplayarak saklar. Ondalıklı sayılar için sıkça kullanılır. İnteger ile işlem yapmadan önce integer değerin önüne "(float)" almalıdır.
float s = 1.117;
int x = 3;
float z = (float)x / 2.2;
Boolean
Doğru ve yanlış anlamında "True" ve "False" değerleri içerir ve bir byte yer kaplar.
boolean calisma = false;
Merhaba bu yazıda basit bir şekilde buton kullanımına değinip ledi buton ile kontrol edeceğiz. Butonların bir çok çeşidi vardır biz bu yazıda 4 bacaklı en çok kullanılan modeli inceleyeceğiz. Öncelikle buton bağlanmasını inceleyip ardından kodlarına göz atacağız sonuçta buton ile ledi kontrol edeceğiz.
Malzemeler
- 1 adet buton
- 1 adet led ( Arduino da bulunan ledi kullanabiliriz 13. pin)
- 1 adet 10Kohm direnç
- 1 adet 100 - 220 ohm direnç (dahili ledi kullanırsak gerek yok)
- 1 adet Arduino
- 1 adet breadboard
- Yeteri kadar jumper yada kablo kesiti (6 - 8 adet)
Devre Kurumu
Buronun bir ucunu 10k lık dirence ve direnci GND pinine bağlıyoruz. Butonun direncin bağlandığı bacağın yanındaki bacağı 5 volt çıkışlı pine son olarak ta direnç bağlı pinin karşısındaki bacağı Arduino da digital pinlerden birine bağlıyoruz. Butonun son bacağı boş kalacak. Led ise dağa önce öğrendiğimiz gibi bağlanacak ancak daha hızlı ve zahmetsiz proje için 13. pine bağlı dahili led kullanılabilir. Devre şemasını ekliyorum.
 |
| Arduino buton ile led kontrolü |
Programlama
Burada yazacak çok fazla bir şey yok gerekli açıklamalar kod içersin de mevcut.
int buton = 9; // butonun bağlandığı pin
int led = 13; // ledin bağladığı pin dahili pin ile beraber çalışır
// durumu değişecek değişken tanımı
int butonDurumu = 0; // buton durumu 0 olarak bağlayacak
void setup() {
// led pinini çıkış olarak ayarlıyoruz
pinMode(led, OUTPUT);
// buton pinini giriş olarak kuruyoruz
pinMode(buton, INPUT);
}
void loop(){
// buton durumunu okuyoruz
butonDurumu = digitalRead(buton);
// butonun basılı olup olmadığını kontrol ediyoruz
// eğer basılı ise
if (butonDurumu == HIGH) {
// led yanıyor
digitalWrite(led, HIGH);
}
// basılı değilse
else {
// led kapalı
digitalWrite(led, LOW);
}
}
Merhaba arkadaşlar uzun bir süredir yazı yazamadım. Daha önce Arduino kartları hakkında bilgiler vermiştim inan bunlar led yakmak yada uzunluk ölçmekten daha önemli çünkü hiç bir şey kapasitesini bilmeden tam verimle çalışmaz zorlarsak yakarız zorlamazsak ziyan ederiz. Tabi buradan led yada sensörleri gereksiz sanmayın.
Projeye başlayalım zaten bu sırada led kullanmayı öğreneceğiz. Ancak daha öncesinde led ve direnç hakkında kısa bilgi verelim.
LED ve Direnç
Led elektroniğin lambasıdır, ışık gereken yerde ledler kunlanılır. Çeşitli renkleri vardır ve genelde 3-5 vold arası çalışır düşük güç ile çalışmaz veya az ışık verir, çok fazla güç verirsek yanarlar. Uzun bacağı artı kısa bacağı eksi uçlardır.
Dirençlerin ise artı eksi uçları yoktur ve uçlar arası gerilimi düşürmek için kullanılır. Farklı değerleri vardır ve bu değerler direnç üzerindeki renkli halkalar ile belli olur.
MALZEMELER
1 * Arduino ( proje UNO üzerinden ilerleyecek)
1'er adet sarı, yeşil, kırmızı led
3 adet direnç ( 0 ohm - 2 kohm arası istersek hiç olmaz bu led e bağlı biz 220 kullanıcaz)
Yeteri kadar kablo yada jumper
Breadboard ( bu olmadan olur(zorlar) ama bu bize neredeyse her zaman yardımcı olur)
Arduinoyu çalıştıracak güç ( bilgisayar, pil yada adaptör)
Devre Kurulumu
Devreyi breadbord üzerine kuracağız kodlarda yeşil ledi 5, sarı ledi 6, kırmızı ledi 7 nolu pinlere bağlanmış olarak ayarladık ledleri Arduino ya bağlarken pinlerin ucuna önce direnç bağlıyoruz direncin diğer ucunu ledin artı ucuna ( uzun bacak) bağlıyoruz ledin diğer bacağınıda Arduino da bulunan GND( ground - toprak - eksi) pinine bağlıyoruz devre aşağıdaki görsele benzeyecek.
 |
| Devre kurulumu |
Programlama
Devremizi kurduk sıra elektriği kontrol etmekte buzu Arduino kartımızı programlayarak yapacağız bu kısmı uzatmadan kodları ekliyorum zaten gerekli açıklama kodlarda mevcut .
int yesil = 5;
int sari = 6;
int kirmizi = 7;
//Üst tarafta ledlerin hangi pinlere bağlanacağını tanımladık eğer bu işlemi yapmasaydık "sari" yazacağımız yerlere 6 yazardık ancak bu karışıklığa sebep olabilir bu yüzden bu tanımlamaları yapmaya alışmak iyi olur
void setup(){ // bu blok kodları sadece bir defa başlangıçta çalışır adı üstünde Arduino kartımızı kuruyoruz
pinMode(yesil, OUTPUT);
pinMode(sari, OUTPUT);
pinMode(kirmizi, OUTPUT);
// üst tarafta ise ledleri taktığımız pinleri çıkış olarak ayarladık bu sayede bu pinleri bir güç kaynağı gibi kullanıp ledlere gerekli gücü göndereceğiz
}
void loop(){ // bu blok içine yazılan kodlar devamlı olarak bitip başa döner Arduinoya güç geldiği sürece devam eder
digitalWrite(yesil, HIGH); // yeşil ışık yanıyor
delay(5000); // yeşil ışık 5 saniye boyunca açık kalıyor
digitalWrite(yesil, LOW); // yesil ışığı kapatıyoruz
digitalWrite(sari, HIGH); // sarı ışığı yakıyoruz
delay(750); // 0.75 sn bekliyoruz
digitalWrite(sari, LOW); // sari ışık sönüyor
digitalWrite(kirmizi, HIGH); // kırmızı ışık yanıyor
delay(3500); // 3.5 sn bekliyoruz
digitalWrite(kirmizi, LOW); // kırmızı ışık sönüyor
// sistem buradan sonra yeşil ışığı yazdığımız koda döner
}
Işık sürelerini pin yerlerini filan değiştirerek devreyi tekrar kurmanızı öneririm. Herhangi bir sorunuz olursa alta yorum olarak ekleyebilirsiniz.
Arduino ile uğraşanlar daha önce bu terimi duymuştur ancak birçoğumuz bunun ne anlama geldiğini bilmez. EEPROM aslında Arduino kartlarının sahip olduğu mikrokontrolörlerin özelliğidir. Bu özellik sayesinde Arduino kapalı olduğu zamanda bile bir takım değerleri hafızasında tutmasını sağlar yani EEPROM Arduinonun bir nevi küçük bir sabit disk gibi davranmasını sağlar.
Arduino bu özellik için EEPROM kütüphanesine sahiptir ve write() ile read() komutları ile kullanılır.
Write() komutu EEPROM a veri yazmak için kullanılır. EEPROM.write(adres, değer) şeklinde kullanılır. Adres 0 dan başlayan integer(sayı) değeri alırken değer kısmı ise 0 dan 255 arasında değer alır. Bu komutun tamamlanma süresi 3.3 mili saniyedir ve veriyi belli bir süre kayıtlı tutar bu yüzden bu komutu kullanırken hangi amaç ile kullanacağınıza dikkat edin. Aşağıdaki gibi kullanılır.
#include <EEPROM.h>
void setup()
{
for (int i = 0; i < 255; i++)
EEPROM.write(i, i);
}
void loop()
{
}
Read() komutu ise EEPROM da tutulan değeri çağırmamızı sağlar ve EEPROM.read(adres) şeklinde kullanılır ve bize istediğimiz değeri byte olarak gönderir. Kullanımını daha iyi anlamanız için aşşağıya örnek bir kod ekliyorum.
#include <EEPROM.h>
int a = 0;
int value;
void setup()
{
Serial.begin(9600);
}
void loop()
{
value = EEPROM.read(a);
Serial.print(a);
Serial.print("\t");
Serial.print(value);
Serial.println();
a = a + 1;
if (a == 512)
a = 0;
delay(500);
}
EEPROM Nerede Kullanılır
Yukarıdaki tanımlar bazılarımız için havada kalmış olabilir bu yüzden nerede kullanıldığını dair birkaç örnek verelim. EEPROM sistem resetlense yada fabrika ayarlarına dönülse dahi silinmeyen veri depolamak için kullanılır. Mesala kablosuz modelleri fabrika ayarlarına döndürdüğümüzde tekrar bağlanmak için kutuda yazan ve her sefer aynı olan bir şifreyi kullanırız işte bu şifre gibi elektronik cihazların sabit bilgileri EEPROM da tutulur. Arduino ile kullanımı için ise Arduino tabanlı kilit sistemi örnek verilebilir, en az bir şifreyi EEPROM da tutarındaki olumsuz durumlarda şifre değiştirmek zorunda kalmayalım.
Hangi Arduino kartının ne kadarlık bir EEPROM a sahip olduğunu öğrenmek için bu linke tıklayarak tabloyu inceleyebilirsiniz.