Arduino Buton ile LED yakma projesi devre ve kodları

VenomSnake

Hectopat
Katılım
4 Nisan 2020
Mesajlar
2.880
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Buton ile LED yakmayı başardım ama kodlarından ve devreden hiçbir şey anlamadım. Yardım lütfen. @SideWinder @cengover_ekin
İlgili video

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
 
pinMode ile o çıkışın ne iş yapmasını seçiyoruz. Örneğin pinMode(13. OUTPUT); bu 13. dijital pini çıkış olarak kullanacağımız anlamına geliyor. INPUT yazsaydık okuma yapmak için kullanacaktık.
digitalWrite komutu seçtiğimiz pine dijital olarak güç verir 1 ve 0 mantığı ile çalıştığı için ya 5V ya da 0V verir. digitalRead ise seçtiğimiz pinde elektrik akımına göre true yada false olarak değişken atamamızı sağlar.
 
pinMode ile o çıkışın ne iş yapmasını seçiyoruz. Örneğin pinMode(13. OUTPUT); bu 13. dijital pini çıkış olarak kullanacağımız anlamına geliyor. INPUT olsaydı okumam için kullanacaktık.
digitalWrite komutu seçtiğimiz pine dijital olarak güç verir 1 ve 0 mantığı ile çalıştığı için ya 5V ya da 0V verir.
int kodu ne oluyor hocam?
 
int değişken atamamızı sağlar. "Integer"den gelir. Burda 1 ve 0 tamsayıları atamak için kullanmışlar.
Burada arkadaş biraz karmaşık anlatmış.
Kod:
if (digitalRead(x) == true) {digitalWrite(y, OUTPUT);}
Gibi de değişkensiz kullanılabilir.
 
Son düzenleme:
C:
#define Buton 8
#define Led 10

int buton_durumu = 0;

void setup() {
  pinMode(Buton, INPUT);
  pinMode(Led, OUTPUT);
}

void loop() {
  buton_durumu = digitalRead(Buton);

  if(buton_durumu == 1)
  digitalWrite(Led,HIGH);
  else
  digitalWrite(Led,LOW);
}

#define genellikle pin gibi sabit değişkenleri tanımlamak için kullanılır. Burada da Button ve Led değişkenleri, ilgili devre elemanlarının bağlandığı portları temsil etmek için kullanılmış.

int değişken tanımlamak için kullanılır. 3 temel değişken vardır:
  • String
  • Integer
  • Float
int buton_durumu = 0; kodu, buton_durumu adında bir değişken oluşturuyor. Bu değişkenin amacı, butonun basılı olup olmadığını kontrol etmek ve kaydetmek.


void setup() kısmında, pin giriş ve çıkışlarını ayarlıyoruz. GPIO pinlerinin veri mi alacağı yoksa veri mi göndereceğini belirtmemiz gerek. Bu durumda, Buton pini giriş, Led pini çıkış oluyor. Çünkü butondan veri gelecek, LED'i yakmak içinse enerji göndermemiz gerekecek.

Gelelim void loop() kısmına:

void loop(), genellikle en son çalışan ve sonsuza kadar tekrarlayan master fonksiyondur. Yani kartın yapmak istediği şeyi buraya yazarsın.

Butonlar, anahtarlardan farklıdır. Zira anahtarlar, statiktir. Yani gücü keser ya da sağlar.

Butonlar ise farklı çalışırlar. Zira güç vereceğin şeyi butona değil direkt karta bağlarsın. Butonu ise sensör gibi kullanman gerekir.

Yani butondan bir şekilde karta veri gitmeli, giden veriye göre de kart üzerindeki LED açılıp kapanmalı.

Dikkat ettiysen digital... adlı iki fonksiyon var: digitalWrite ve digitalRead.

Port numaralarından bahsederken, pinlerin giriş ve çıkış olabildiğinden bahsetmiştim digitalWrite çıkış olarak ayarlanmış pine veri göndermeyi sağlarken, digitalRead giriş olarak ayarlanmış pinden gelen veriyi okumayı sağlar.

Buton ile LED Yakma 3_bb.png


Butonun bir bacağı GND, diğer bacağı ise 5V portuna bağlanmış.

Şimdi, digitalRead fonksiyonu temelde iki değer döner: HIGH ya da LOW. Eğer okunan portta akım varsa bu HIGH olur, eğer yoksa LOW.

Buton basılı değilken 5V ve GND uçları birleşmez. Okuma yapacağımız port ise GND'ye bağlı. GND, - porttur kabaca, yani buton basılı değilken okuma yaptığımızda, GND'yi okuyacağız yani LOW olarak dönecek.

Butona bastığında ise, GND ve 5V hattı birleşecek, aynı zamanda okuma yaptığımız porta da akım gidecek. Böyle olunca da HIGH olarak okumuş olacağız.

Yani butona basıldığında, HIGHdeğeri okunacak ve LED yanacak, basılı değilken LOWdeğeri okunacak ve LED yakılmayacak.

Kodda 0 ve 1 olarak kullanmış, HIGH'ın int karşılığı 1, LOW'un int karşılığı 0'dır.
 
Temel kod elemanlarına buradan bakabilirsin. Buton, basit görünse bile karmaşık bir koddur. Birden fazla teknik içerir.


Mesela mevcut kodda, butona basılıyken yanar LED, elini çektiğinde söner. Ama bu kodla bastığın zaman açılır, tekrar basınca söner:

C-like:
#define LED 10
#define Button 8

int buttonState = 0;

void setup() {                               
  pinMode(LED, OUTPUT);

  pinMode(Button, INPUT_PULLUP);
}

void loop() {

  buttonState = digitalRead(Button);

  if (buttonState == LOW) {                   
    digitalWrite(LED, LOW);                 
    delay (1000);                               
  } else {                                     
    digitalWrite(LED, HIGH);                 
  }
}
 
Temel kod elemanlarına buradan bakabilirsin. Buton, basit görünse bile karmaşık bir koddur. Birden fazla teknik içerir.


Mesela mevcut kodda, butona basılıyken yanar LED, elini çektiğinde söner. Ama bu kodla bastığın zaman açılır, tekrar basınca söner:

C-like:
#define LED 10
#define Button 8

int buttonState = 0;

void setup() {                              
  pinMode(LED, OUTPUT);

  pinMode(Button, INPUT_PULLUP);
}

void loop() {

  buttonState = digitalRead(Button);

  if (buttonState == LOW) {                  
    digitalWrite(LED, LOW);                
    delay (1000);                              
  } else {                                    
    digitalWrite(LED, HIGH);                
  }
}
Hocam vallahi Robotistan derslerinden hiçbir şey anlamadım. Benim için Arduino öğrenebileceğim türkçe kaynak ve kanal önerileri yapar mısınız?
@cengover_ekin hocam sizin de yorumlarınızı görmek isterim.
 
Son düzenleme:

Geri
Yukarı