int ledPin = 13; // 13 Numaralı pin arduino mega üzerinde bir lede bağlı
int analogPin = 3; // potansiyometre bağlı pin
int val = 0; // deger
void setup()
{
pinMode(ledPin, OUTPUT); // led pini çıkış olarak ayarlandı
}
void loop()
{
val = analogRead(analogPin); // analog okuma yapılıyor
analogWrite(ledPin, val / 4); // analog okunan değer led pini üzerine yazılıyor.
}
int pin = 10;
unsigned long beklemeSuresi;
void setup()
{
pinMode(pin, INPUT);
}
void loop()
{
beklemeSuresi = pulseIn(pin, LOW);
}
pulseIn() Komutu
pulseIn() Belirlenen bir pin üzerindeki HIGH veya LOW sürelerini okur. Yani pin üzerindeki değer HIGH ise bu değer LOW olana kadar bekler ve darbenin mikrosaniye cinsinden uzunluğunu verir. Ayrıca Timeout süresi vardır. Eğer bu süre içerisinde belirtilen pin üzerinde bir değişiklik yoksa sonucu 0 olarak gerek döndürür.
pulseIn() Kullanımı
pulseIn()(pin,deger) veya
pulseIn()(pin,deger,zamanAsimi) şeklindedir.
Parametreler
pin: Darbenin okunmak istediği pin numarası.
value: Okunacak darbenin türü HIGH veya LOW
timeout: Bu parametre isteğe bağlıdır. Darbenin başlamasını beklemek isterseniz mikrosaniye türünden bir değer girebilirsiniz.
Operator adı Operator sembolü
Tanımı
Örnek
atama operatörü
=
Operatörün sağındaki değeri solundaki değişkene aktarır.
A = B
toplama
+
İşlenen iki değeri toplar
A + B sonuç: 30
fark
–
İlk değerden ikincisini çıkarır
A – B sonuç: -10
çarpma
*
iki değeri çarpar
A * B sonuç: 200
bölme
/
Bölme işlemi yapar
B / A sonuç: 2
mod
%
Kalan alma operatörüdür. B’nin A’ya bölümünden kalını verir.
B % A sonuç: 0
Örnek:
void loop () {
int a = 9,b = 4,c;
c = a + b;
c = a - b;
c = a * b;
c = a / b;
c = a % b;
}
Arduino Karşılaştırma Operatörleri
Operator adı
Operator sembolü
Tanımı
Örnek
eşitlik
==
İki değerin bir birine eşit olup olmadığına bakar. Değeler bir birine eşitse sonuç trueolur.
(A == B) sonuç: false
eşitsizlik
!=
İki değerin bir birinden farklı olup olmadığını bakar. Değerler bir birindenf farklı ise sonuç true olur.
(A != B) sonuç: true
küçüktür
<
Soldaki değerin sağdakinden küçük olup olmadığına bakar. Soldaki değer küçükse sonuç true olur.
(A < B) sonuç: true
büyüktür
>
Soldaki değerin sağdakinden büyük olup olmadığına bakar. Soldaki değer büyükse sonuç true olur.
(A > B) sonuç: false
küçük eşittir
<=
Soldaki değerin sağdakinden küçük-eşit olup olmadığına bakar. Soldaki değer küçük-eşitse sonuç true olur.
(A <= B) sonuç: true
büyük eşittir
>=
Soldaki değerin sağdakinden büyük-eşit olup olmadığına bakar. Soldaki değer büyük-eşitse sonuç true olur.
(A >= B) sonuç: false
Örnek:
void loop () {
int a = 9,b = 4
bool c = false;
if(a == b)
c = true;
else
c = false;
if(a != b)
c = true;
else
c = false;
if(a < b)
c = true;
else
c = false;
if(a > b)
c = true;
else
c = false;
if(a <= b)
c = true;
else
c = false;
if(a >= b)
c = true;
else
c = false;
}
Arduino Mantıksal Operatörler
Operator adı
Operator sembolü
Tanımı
Örnek
ve
&&
Lojik VE işlemi yapar. İşlenen iki değer de sıfırdan farklı ise sonuç true olur.
(A && B) -> true
veya
||
Lojik VEYA işlemi yapar. İşlenen iki değerden biri sıfırdan farklı ise sonuç true döner.
(A || B) -> true
değil
!
Lojik DEĞİL işlemi yapar. Bu operand işlenen değerin tersini alır. İşlenen değer true ise false, false ise true yapar.
Örnek
int a = 9,b = 4
bool c = false;
if((a > b)&& (b < a))
c = true;
else
c = false;
if((a == b)|| (b < a))
c = true;
else
c = false;
if( !(a == b)&& (b < a))
c = true;
else
c = false;
Operator adı
Operator sembolü
Tanımı
Örnek
ve
&
Binary VE operatörü işlenen iki değerde de var olan biti kopyalar.
(A & B) -> 01010 & 10100 = 0, Onluk: 0
veya
|
Binary VEYA Operatorü işlenen iki değerden birinde de var olan biti kopyalar.
(A | B) -> 01010 | 10100 = 11110, Onluk: 30
özel veya
^
Binary ÖZEL VEYA Operatorü işlenen iki değerden sadece birinde var olan biti kopyalar.
(A ^ B) -> 01010 ^ 10100 = 11110, Onluk: 30
değil
~
İşlenen bitlerin değilini alır.
(~A ) ( ~10 = -11)
binary sola kaydır
<<
Binary sola kaydır operatörü işlenen bitleri sağdan sola doğru kaydırır.
A << 2 (1010 << 2 = 101000)
binary sağa kaydır
>>
Binary sağakaydır operatörü işlenen bitleri soldan sağa doğru kaydırır.
A >> 2 ( 1010 >> 2 = 10)
Örnek
void loop () {
int a = 10,b = 20
int c = 0;
c = a & b ;
c = a | b ;
c = a ^ b ;
c = a ~ b ;
c = a << b ;
c = a >> b ;
}
Operator adı
Operator sembolü
Tanımı
Örnek
artırma
++
Artırma operatörü sayının değerini bir arttırır.
A++ sonuç: 11
azaltma
—
Azaltma operatörü sayının değerini bir azaltır.
A– sonuç: 9
birleşik toplama
+=
Sağ işlenenini sol işlenene ekler ve sonucu sol işlenene atar
B += A eş değeri sonuç : B = B+ A
birleşik çıkarma
-=
Sağ işlenenini sol işlenenden çıkarır ve sonucu sol işlenene atar
B -= A eş değeri sonuç : B = B – A
birleşik çarpma
*=
Sağ işleneni sol işlenen ile çarpar ve sonucu sol işlenene atar
B*= A eş değeri sonuç : B = B* A
birleşik bölme
/=
Sol işleneni sağ işlenen ile böler ve sonucu sol işlenene atar
B /= A eş değeri sonuç : B = B / A
birleşik mod alma
%=
İki işlenen kullanarak modulus alır ve sonucu sol işlenene atar
B %= A eş değeri sonuç : B = B % A
birleşik bitsel veya
|=
bitwise dahil VEYA atama operatörü
A |= 2 eş değeri sonuç : A = A | 2
birleşik bitsel ve
&=
Bitsel VE görevlendirme operatörü
A &= 2 eş değeri sonuç : A = A & 2
Örnek
void loop () {
int a = 10,b = 20
int c = 0;
a++;
a--;
b += a;
b -= a;
b *= a;
b /= a;
a %= b;
a |= b;
a &= b;
}
Karşılaştırma ve Mantıksal Operatörler
x == y; // x eşittir y
x != y; // x eşit değildir y
x < y; // x değeri y değerinden küçük
x > y; // x değeri y değerinden büyük
x <= y; // x değeri y değerinden eşit veya küçük
x >= y; // x değeri y değerinden eşit veya büyük
Mantık Operatörleri:
Mantık Ve Operatörü :
if ( x > 0 && x < 5 )
Yukarıdaki kodun gerçekleşebilmesi için 2 şart vardır . Bunların ikisininde sağlanması durumunda istenen komuta geçilir. Yani x sayısı 0 ile 5 arasında ise kod bir alt satıra geçebilir.
Mantık Veya Operatörü :
if ( x > 0 || y > 0 )
Mantık veya komutunda şartlardan biri sağlanması kodun devam etmesi sağlanır. Yani x değeri sıfırdan büyükse veya y değeri sıfırdan büyükse şart sağlanır.
Mantık Değil Operatörü :
if ( !x < 0 )
Burada diğerlerinden farklı bir durum vardır. İfade doğru ise sonuç yanlıştır. Yani x değeri sıfırdan büyükse doğrudur ve istenilen şart sağlanır.
void setup()
{
pinMode(13, OUTPUT); // 13 Numaralı pin çıkış olarak ayarlandı
}
void loop()
{
digitalWrite(13, HIGH); // dijital 13 pin Açık
delay(1000); // 1 saniye bekleme
digitalWrite(13, LOW); // dijital 13 pin Kapalı
delay(1000); // 1 saniye bekleme
}
int ledPin = 13; // LED 13 numaralı pine bağlandı
int inPin = 7; // Buton 7 numaralı pine bağlandı
int val = 0; // Okunan değerin saklanacağı değişkenimiz
void setup()
{
pinMode(ledPin, OUTPUT); // Dijital 13 Numaralı pin çıkış olarak ayarlandı
pinMode(inPin, INPUT); // Dijital 7 Numaralı pin giriş olarak ayarlandı
}
void loop()
{
val = digitalRead(inPin); // Giriş pinimizin değeri okunuyor.
digitalWrite(ledPin, val); // Giriş pininden okunan değer ledPinine yazılıyor.
}
Fonksiyon Tanımı
Değer Döndürmeyen Fonksiyonlar
Değer Döndüren Fonksiyonlar
Çok Parametreli Fonksiyonlar
Değişken Kapsamları
Çok Fonksiyonlu Programlar
if( A == 1 ){
A_fonk();
}
else if( A == 2){
B_fonk();
}
else
{
C_fonk();
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
}
/* Bu programda buton1 e basınca displeyde 1, buton2 ye basınca 2, buton3 e basınca 3,
1 ve 2 ye basınca displeyde 4, 2 ve 3 e basınca 5, 1 ve 3 e basınca 6 gösterilecektir.
fonksiyon kullanımının ve if komutunda and operatörü kullanımının anlaşılması için tasarlanmıştır
robotkursu başlangıç modülüne göre yazılmıştır.
www.robotkursu.com 26.02.2016
*/int a=A5; // 7 segmentli displeyin a segmenti arduinonun A5 pinine bağlıdır
int b=A4;
int c=A3;
int d=5; //7 segmentli displeyin d segmenti arduinonun 5 nolu pinine bağlıdır
int e=4;
int f=2;
int g=3;
int buton1=8; // butonlar arduinonun 8-9-10 nolu pinlerine bağlıdır
int buton2=9;
int buton3=10;
void setup()
{
pinMode(a, OUTPUT);pinMode(b, OUTPUT);pinMode(c, OUTPUT);pinMode(d, OUTPUT);
pinMode(e, OUTPUT);pinMode(f, OUTPUT);pinMode(g, OUTPUT);
pinMode(buton1,INPUT_PULLUP); pinMode(buton2,INPUT_PULLUP); pinMode(buton3,INPUT_PULLUP);
// butonlara 10 k direnç bağlı olmadığından dahili pullup dirençleri aktif ediliyor.
}
void loop()
{
//———– Yalnızca buton 1 e basılmışsa ———————
if((digitalRead(buton1)==0) && (digitalRead(buton2)==1) && (digitalRead(buton3)==1)) // basılan butondan arduinoya 0 bilgisi gelir. basılı değilse gelen değer 1 dir.
{ bir();sondur(); }
if((digitalRead(buton1)==1) && (digitalRead(buton2)==0) && (digitalRead(buton3)==1)) // sadece buton2 ye basılmışsa
{ iki();sondur(); }
if((digitalRead(buton1)==1) && (digitalRead(buton2)==1) && (digitalRead(buton3)==0)) // sadece buton3 e basılmışsa
{ uc();sondur(); }
if((digitalRead(buton1)==0) && (digitalRead(buton2)==0) && (digitalRead(buton3)==1)) // buton1 ve buton2 ye basılmışsa
{ dort();sondur(); }
if((digitalRead(buton1)==1) && (digitalRead(buton2)==0) && (digitalRead(buton3)==0)) // buton2 ve buton3 ye basılmışsa
{ bes();sondur(); }
if((digitalRead(buton1)==0) && (digitalRead(buton2)==1) && (digitalRead(buton3)==0)) // buton1 ve buton3 e basılmışsa
{ alti();sondur(); }
}
//————— ANA PROGRAM SONU ————–
void bir()
{
digitalWrite(b,HIGH);digitalWrite(c,HIGH); // dipleyde 1 yandı
delay(500);
}
void iki()
{
digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(d,HIGH);
digitalWrite(e,HIGH);digitalWrite(g,HIGH);
delay(500);
}
void uc()
{
digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
digitalWrite(d,HIGH);digitalWrite(g,HIGH);
delay(500);
}
void dort()
{
digitalWrite(b,HIGH); digitalWrite(c,HIGH);
digitalWrite(f,HIGH); digitalWrite(g,HIGH);
delay(500);
}
void bes()
{
digitalWrite(a,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(f,HIGH); digitalWrite(g,HIGH);
delay(500);
}
void alti()
{
digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH);
digitalWrite(f,HIGH); digitalWrite(g,HIGH);
delay(500);
}
void sondur()
{
digitalWrite(a,LOW); digitalWrite(b,LOW); digitalWrite(c,LOW); digitalWrite(d,LOW);
digitalWrite(e,LOW); digitalWrite(f,LOW); digitalWrite(g,LOW);
}
Örnek 1: Ekrana Yazı Yazdırma Fonksiyonu
void EkranaYaz()
{
Serial.println("Arduino Projem");
}
Yukarıdaki kodları yazdıktan sonra EkranaYaz(); komutunu yazdıktan sonra Arduino Projem yazısı serial monitorde yazılır.
Örnek 2: Belli Bir Sayının Karesini Alma Fonksiyonu
int KareHesapla7()
{
return 7*7;
}
Yukarıdaki kodları yazdıktan sonra sonuc= KareHesapla7(); yazılırsa sonuc değişkenine 49 sayısı atılır.
Örnek 3: Faktoriyel Alma Fonksiyonu
void FaktoriyelHesapla(int sayi)
{
int sonuc=1;
for(int i = sayi; i>0; i--)
{
sonuc = sonuc*i;
}
Serial.println(sonuc);
}
Yukarıda kodlar yazıldıktan sonra FaktoriyelHesapla(3); yazılırsa serial monitörde 6 sonucu çıkar çünkü 3*2*1=6 dır .
pinMode(2, INPUT); // 2 numaralı dijital pini giriş olarak ayarladık
Serial.begin(9600); // seri haberleşme hızı 9600 BaudRate
}
void topla(int sayi1, int sayi2){ // toplama adında fonksiyon tanımladık
int sonuc = sayi1 + sayi2; // toplam adında tamsayı türü değişken tanımladık ve
// fonksiyona gönderdiğimiz 2 ve 3 sayısının toplamını değişkene atadık
Serial.print(sonuc); // sonuc değişkeni değerini seri porta yazdırdık
}
void loop() { // sonsuz döngümüze girdik
if(digitalRead(2)){ // eğer 2 numaralı pindeki butona basılı ise
topla(2,3); // toplama fonksiyonuna 2 ve 3 değerini gönder
}
}
pinMode(2, INPUT); // 2 numaralı dijital pini giriş olarak ayarladık
Serial.begin(9600); // seri haberleşme hızı 9600 BaudRate
}
int toplama(){ // toplama adında fonksiyon tanımladık
int toplam = 12+13; // toplam adında tamsayı türü değişken tanımladık ve
// 12 ile 13 sayısının toplamını değişkene atadık
return toplam;
}
void loop() { // sonsuz döngümüze girdik
if(digitalRead(2)){ // eğer 2 numaralı pindeki butona basılı ise
Serial.print(toplama()); // toplama fonksiyonunu çağır ve dönen değeri seri porta yaz
}
}