1 Ekim 2013 Salı

1.2 ) DİJİTAL

OUTPUT (LED ÖRNEKLERİ)

1) arduino uno üzerindeki pin13'e bağlı olan led'i bir saniye aralıklarla yakıp söndürme yapalım ve bu esnada arduinonun her hangi bir bacağını (pin) nasıl çıktı (output) olarak ayarladığımızı da öğrenmiş olacağız.


void setup(){

  pinMode(13,OUTPUT);  //pin13'ü çıkış olarak ayarladık
}
void loop(){
  digitalWrite(13,HIGH);   //pin 13'den 5V çıkış sağladık yani lambayı çalışır hale getirdik
  delay(1000);                 //en son işlemleri 1000 mili saniye yani 1 saniye bekletmiş oluyoruz 
  digitalWrite(13,LOW);   //pin 13'den voltaj çıkışını durdurmuş olduk yani lambayı söndürdük
  delay(1000);
}

2) Şimdi de pin 8'e bağlı led'i bir saniye aralıklarla yakıp, söndürelim ve bu sayede ilk devremizi kurmuş olacağız.  (R1=220 ohm) Dijital pinine bağlanan cihazları direk pin numarası ile yönetebiliriz.


void setup(){
  pinMode(8,OUTPUT);  //pin 8'i çıkış olarak ayarladık
}
void loop(){
  digitalWrite(8,HIGH);   //pin 8'den 5V çıkış sağladık
  delay(1000);                 //en son işlemleri 1000 milisaniye yani 1 saniye bekletmiş oluyoruz 
  digitalWrite(8,LOW);   //pin 8'den voltaj çıkışını durdurmuş olduk
  delay(1000);
}

3) Aynı programı bu kezde pin numarası ile değilde kullanacağımız pine verdiğimiz isim ile çalıştıralım ve pin'e isim atama işlemini de öğrenmiş olalım.

int led=8;                          //pin 8'e led isim vermiş bulunmaktayız. Bundan sonra 8 diye değilde led ismi ile çağıracağız.
void setup(){
pinMode(led,OUTPUT);  // önceden 8 diye çağırdığımız pin'i artık led ismi ile çağırıyoruz
}
void loop(){
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}

4) Aynı devrede delay() komutu kullanmadan pin8 deki led'i millis() komutu ile çalıştıralım. Bu program çok karmaşık gelebilir fakat üzerinde fazla durmayın bir kaç ders sonra daha iyi kavrayacaksınız. Şimdilik örnek olması için yazdım. Buradaki amacım programlama yapan kişilerin farklı kodlar ile aynı işi yapan  uygulamalar yapabildiklerini göstermek.

const int led = 8;
int ledDurumu = LOW;
long gecenZaman = 0;
  // gecenZaman isimli değişken oluşturmuş olduk ve buna 0 değerini atadık
long sure = 1000;// sure isimli değişken oluşturmuş olduk ve buna 1000 değerini atadık

void setup(){
  pinMode(led,OUTPUT);
}
void loop(){
  unsigned long gecerliZaman = millis();  // gecerliZaman isimli değişkene o ana kadar gecen süre bilgisini atamak
  if (gecerliZaman - gecenZaman > sure){
    gecenZaman = gecerliZaman;
    if(ledDurumu == LOW) ledDurumu = HIGH;
    else ledDurumu = LOW;
    digitalWrite(led,ledDurumu);
  }
}

5) Basit trafik lambası her gün sokakta gördüğümüz trafik ışıklarını basit bir şekilde çalışma mantığını öğrenmiş olacağız. Tabi sizler bununla yetinmeyiz daha karmaşık devreler kurup deneyin. ( 3 adet 220 ohm direnç ve 3 adet led )

int kirmizi = 5;
int sari = 6;
int yesil = 7;

void setup(){
  pinMode(kirmizi,OUTPUT);
  pinMode(sari,OUTPUT);
  pinMode(yesil,OUTPUT);
}
void loop(){
  digitalWrite(kirmizi,HIGH);
  digitalWrite(sari,LOW);
  digitalWrite(yesil,LOW);
  delay(5000);
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,HIGH);
  digitalWrite(yesil,LOW);
  delay(500);
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,LOW);
  digitalWrite(yesil,HIGH);
  delay(3000);

}

6) Yürüyen led bu devremizde de digital bağlantı pinlerine bağladığımız ledleri sırayla yakmaya çalışacağız.


void setup(){
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
}

void loop(){
  digitalWrite(0,HIGH);
  delay(1000);
  digitalWrite(0,LOW);
  digitalWrite(1,HIGH);
  delay(1000);
  digitalWrite(1,LOW);
  digitalWrite(2,HIGH);
  delay(1000);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(1000);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  delay(1000);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(1000);
  digitalWrite(5,LOW);
  digitalWrite(6,HIGH);
  delay(1000);
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  delay(1000);
  digitalWrite(7,LOW);
}

7) Şimdi de yukarıda yaptığımız devreyi daha kolay ve kısa kodlar ile yazalım

void setup() {
  for(int i=0; i<=7; i++){
    pinMode(i,OUTPUT);
  } 
}
void loop() {
  for(int i =0; i<=7; i++){
  digitalWrite(i,HIGH);
  delay(1000);
  digitalWrite(i,LOW);
  }
}

8) Şimdi de yukarıda yaptığımız devreyi daha farklı kodlar ile yazalım. Bu koda dikkat edin ileride çok işinize yarayacağından çok eminim ve farklı led yakma uygulamalarını deneyin. Binary sayı nedir, nasıl yazılır nasıl, hesaplanır araştırın ve öğrenin.

void setup() {
  DDRD = B11111111;  // 1 -> ÇIKIŞ ( output ) ,  0 -> GİRİŞ ( input )
}
void loop() {
  PORTD = B00000001;   // 1 -> HIGH ,  0 -> LOW dijital 0 bacağı açık diğerleri kapalı
  delay(1000);
  PORTD = B00000010;  // dijital 1 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B00000100;// dijital 2 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B00001000;// dijital 3 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B00010000;// dijital 4 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B00100000;// dijital 5 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B01000000;// dijital 6 pini açık diğerleri kapalı
  delay(1000);
  PORTD = B10000000;// dijital 7 pini açık diğerleri kapalı
  delay(1000);
}

9) Şimdi de yukarıda yaptığımız devreyi daha farklı kodlar ile yazdım. Buradaki kodlara dikkat edin ileride çok işinize yarayacağından çok eminim ve farklı led yakma uygulamalarını da deneyin. Hexadecimal sayı nedir, nasıl yazılır nasıl, hesaplanır araştırın ve öğrenin.

void setup() {
  DDRD = 0xFF;
}
void loop() {
  PORTD = 0x01;
  delay(1000);
  PORTD = 0x02;
  delay(1000);
  PORTD = 0x04;
  delay(1000);
  PORTD = 0x08;
  delay(1000);
  PORTD = 0x10;
  delay(1000);
  PORTD = 0x20;
  delay(1000);
  PORTD = 0x40;
  delay(1000);
  PORTD = 0x80;
  delay(1000);
}

10) Şimdi de yukarıda yaptığımız devreyi daha farklı kodlar ile deneyelim. Buradaki kodlara dikkat edin ileride çok işinize yarayacağından çok eminim ve farklı led yakma uygulamalarını da deneyin. Özellikle buradaki amacım dizi ( array ) nasıl kullanılır onu öğretmeye çalıştım.

int dizi[]={ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
void setup() {
  DDRD = 0xFF;
}
void loop() {
  for( int i = 0; i <= 7; i++ ){
    PORTD  =  dizi[i];
    delay(1000);
  }
}

Hiç yorum yok:

Yorum Gönder