Arduino'da klasik butonla LED yakma projesi

Sseptik

Hectopat
Katılım
12 Ocak 2020
Mesajlar
29
Arduino öğrenmeye çalışıyorum. Klasik buton ile LED yakma projesini yapıyorum ancak kafama programlama konusunda bir şey takıldı. Aşağıya tüm kodları yazacağım ancak aklıma takılan şey "int buton_durum = 0" burada buton_durum adlı int değişkenimiz var ama neden eşit sıfır diyoruz? Yazılım konusunda çok kısıtlı bilgim var, mantıksız bir şey ise kusura bakmayın.

#define buton 8 #define led 10 int buton_durum = 0; void setup() { pinMode(8, INPUT); pinMode(10, OUTPUT); } void loop() { buton_durum = digitalRead(8); if(buton_durum == 1){ digitalWrite(10,HIGH); } else{ digitalWrite(10,LOW); } }
 
int buton_durum = 0;
Bunu deme amacımız muhtemelen butona basmadığımız sıradaki değeri göstermek için tanımlamamız gereken koddur.
buton_durum = digitalRead(8);
Buradakinde ise Girişten gelen değeri okuyunca ona göre tepki vermesini sağlıyor. (Geçen dönem görmüştüm az buz bilgimle anlatabilmişimdir umarım)
 
Bende butona basmadığımızda acaba değerini 0 a eşitlemek için mi yazdık diye diye düşünerek int buton_durum = 1 sonra 2 yaptım ve sistem yine hatasız çalıştı.
 
Arduino öğrenmeye çalışıyorum. Klasik buton ile LED yakma projesini yapıyorum ancak kafama programlama konusunda bir şey takıldı. Aşağıya tüm kodları yazacağım ancak aklıma takılan şey "int buton_durum = 0" burada buton_durum adlı int değişkenimiz var ama neden eşit sıfır diyoruz? Yazılım konusunda çok kısıtlı bilgim var, mantıksız bir şey ise kusura bakmayın.

#define buton 8 #define led 10 int buton_durum = 0; void setup() { pinMode(8, INPUT); pinMode(10, OUTPUT); } void loop() { buton_durum = digitalRead(8); if(buton_durum == 1){ digitalWrite(10,HIGH); } else{ digitalWrite(10,LOW); } }

buradaki 0 ve 1 ler aslında ilgili girişe veya çıkışa elektrik akımının gelmesi veya verilmesi ile alakalı. Başlangıçta butondan elektrik sinyali gelmeyeceği için değişken direkt sıfıra eşitlenmiş, eşitlenmese ne olur diye sorarsanız hiçbirşey olmaz devre düzgün çalışır. "Butona basmadığımızda 0 olsun" gibi bir anlamı yok yani zaten aksini belirtmediğiniz sürece butona basmadığınızda 0 olur değeri. 2 yapmanız da birşeyi değiştirmez 2 de yazsanız 3 de yazsanız 10 da yazsanız oraya 1 yazmıssınız gibi çalışır.

buradaki 0 ve 1 ler aslında ilgili girişe veya çıkışa elektrik akımının gelmesi veya verilmesi ile alakalı. Başlangıçta butondan elektrik sinyali gelmeyeceği için değişken direkt sıfıra eşitlenmiş, eşitlenmese ne olur diye sorarsanız hiçbirşey olmaz devre düzgün çalışır. "Butona basmadığımızda 0 olsun" gibi bir anlamı yok yani zaten aksini belirtmediğiniz sürece butona basmadığınızda 0 olur değeri. 2 yapmanız da birşeyi değiştirmez 2 de yazsanız 3 de yazsanız 10 da yazsanız oraya 1 yazmıssınız gibi çalışır.
bunların herbirinin sebebini açıklayabilirim isterseniz ama kafanız karışabilir.

Ek olarak " https://www.tinkercad.com/ " bu siteyi şiddetle öneriyorum size. arduino ile kurabileceğiniz devreleri burada sanal olarak çok basit bir şekilde kurabilirsiniz.
 
Arduino öğrenmeye çalışıyorum. Klasik buton ile LED yakma projesini yapıyorum ancak kafama programlama konusunda bir şey takıldı. Aşağıya tüm kodları yazacağım ancak aklıma takılan şey "int buton_durum = 0" burada buton_durum adlı int değişkenimiz var ama neden eşit sıfır diyoruz? Yazılım konusunda çok kısıtlı bilgim var, mantıksız bir şey ise kusura bakmayın.

#define buton 8 #define led 10 int buton_durum = 0; void setup() { pinMode(8, INPUT); pinMode(10, OUTPUT); } void loop() { buton_durum = digitalRead(8); if(buton_durum == 1){ digitalWrite(10,HIGH); } else{ digitalWrite(10,LOW); } }
digitalRead fonksiyonunun kaynak koduna bakalım.
C:
int digitalRead(uint8_t pin)
{
    uint8_t timer = digitalPinToTimer(pin);
    uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);

    if (port == NOT_A_PIN) return LOW;

    // If the pin that support PWM output, we need to turn it off
    // before getting a digital reading.
    if (timer != NOT_ON_TIMER) turnOffPWM(timer);

    if (*portInputRegister(port) & bit) return HIGH;
    return LOW;
}

Biraz detaya iniyoruz ama daha iyi böyle. Bu Arduino'nun işlemcisi olan Atmega 328P'deki pinler aslında portlara ayrılıyor, her porta da 8 pin düşüyor. Her portun bir register'ı var. Oraya 8 bitlik bir sayı giriyorsun, mesela A portuna 00000001 girdiğinde A portundaki 1 pininin lojik 0 mı 1 mi olduğunu görüyorsun. (A portunu analog pinlerle karıştırma.) Bu fonksiyon da ona göre HIGH veya LOW döndürüyor. Bu değerler de 1 ve 0'a eşit.
C:
#define HIGH 0x1
#define LOW  0x0
 
digitalRead fonksiyonunun kaynak koduna bakalım.
C:
int digitalRead(uint8_t pin)
{
    uint8_t timer = digitalPinToTimer(pin);
    uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);

    if (port == NOT_A_PIN) return LOW;

    // If the pin that support PWM output, we need to turn it off
    // before getting a digital reading.
    if (timer != NOT_ON_TIMER) turnOffPWM(timer);

    if (*portInputRegister(port) & bit) return HIGH;
    return LOW;
}

Biraz detaya iniyoruz ama daha iyi böyle. Bu Arduino'nun işlemcisi olan Atmega 328P'deki pinler aslında portlara ayrılıyor, her porta da 8 pin düşüyor. Her portun bir register'ı var. Oraya 8 bitlik bir sayı giriyorsun, mesela A portuna 00000001 girdiğinde A portundaki 1 pininin lojik 0 mı 1 mi olduğunu görüyorsun. (A portunu analog pinlerle karıştırma.) Bu fonksiyon da ona göre HIGH veya LOW döndürüyor. Bu değerler de 1 ve 0'a eşit.
C:
#define HIGH 0x1
#define LOW  0x0
Yanıtınız için teşekkürler son bi özetleme yapabilir misiniz yani ben int buton_durum = 0,1 veya 2 yaptığımda tam olarak neyi değiştirmiş oluyorum.Belirttiğim gibi yazılım konusunda bilgim yetersiz kusura bakmayın.
 
Yanıtınız için teşekkürler son bi özetleme yapabilir misiniz yani ben int buton_durum = 0,1 veya 2 yaptığımda tam olarak neyi değiştirmiş oluyorum.Belirttiğim gibi yazılım konusunda bilgim yetersiz kusura bakmayın.
0 = voltaj yok. 1 = voltaj var. 2 vs geçici değer yaparsın, ya 0 ya 1 olacak o digitalRead değer döndürdüğünde.
 

Technopat Haberler

Yeni konular

Geri
Yukarı