Ynt: Çok basit, C dilinde bilmediğim bir yer.

Başlatan veliusta, 31 Mayıs 2014, 02:22:27

veliusta

Programlamada Yeniyim.
void looptan sonrasını anlamadım, Anlatırmısınız?

const int BUTTON_PIN = 8;
const int LED_PIN = 13;


void setup(){
  pinMode(BUTTON_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop(){
  digitalWrite(LED_PIN, led_state());
}

int led_state(){
  int button_state = digitalRead(BUTTON_PIN);
  int led_state = (button_state == HIGH) ? HIGH : LOW;
  return led_state;
}


Arduino: Turn on and off a led with a button (part 2)

mesaj birleştirme:: 31 Mayıs 2014, 16:27:39

birde neden iki kez int led_state tanımlıyor.




const int BUTON = 2;
const int LED = 13;
int BUTON_KONUMU;

void setup(){
  pinMode(BUTON, INPUT);
  pinMode(LED, OUTPUT);
}

void loop(){
  digitalWrite(LED, LED_KONUMU());
}

int LED_KONUMU(){
  BUTON_KONUMU = digitalRead(BUTON);
  int LED_KONUMU = (BUTON_KONUMU == HIGH) ? HIGH : LOW;
  return LED_KONUMU;
}


Birde LED_KONUMU 'nu Yukarı int olarak ekleyemiyorum hata veriyor.

Gökhan BEKEN

#1
void setup(){
  pinMode(BUTTON_PIN, INPUT); //8. pini giriş yap
  pinMode(LED_PIN, OUTPUT); //13. pini çıkış yap
}

void loop(){ //anlaşılan o ki  bu fonksiyon sürekli, tekrar işletiliyor
  digitalWrite(LED_PIN, led_state()); //led_state() fonksiyonunu çağır, dönen sonucu 13. pine aktar.
}

int led_state(){ //dönüş türü integer olan bir fonksiyon deklare et
  int button_state = digitalRead(BUTTON_PIN); //8. pini oku, okuduğun değeri "button_state" değişkenine yaz
  int led_state = (button_state == HIGH) ? HIGH : LOW; //button_state durumu high ise "led_state" ye high değerini yükle. Değilse "led_state" ye low değerini yükle
  return led_state; //led_state'nin değerini dönder.(bu değer integerdir çünkü fonksiyonu int ile tanımladık)
}


Not: bu satırda
int led_state = (button_state == HIGH) ? HIGH : LOW;

Conditional Operator kullanılmış.

if(a==b){
  x=c;
}
else{
  x=d;
}

demek yerine,

x=(a==b ? c : d);

demek daha kısa bir yazım şeklidir. Anlamı: a , b'ye eşitse c değerini dönder, değilse d değerini dönder, dönen değeri x'e ata
http://gokhanbeken.com/conditional-operator

Not2: int led_state() fonksiyonunu int ile tanımlamak biraz abes kaçmış. Altı üstü "0" ya da "1" değerini döndereceksin. 1 bitlik olması yeterli iken 32 bitlik değişken tanımlamak gereksiz. Bool türü bir çok C derleyicisinde desteklenmiyor. Bu yüzden char kullanmakta fayda var.
Özel mesaj okumuyorum, lütfen göndermeyin.

Klein

İki kez led state tanımlamıyor aslında. Kafa karışıklığına sebep olan şey ,  led_state() fonksiyonu içerisinde tanımladığı yerel değişkenin adının fonksiyon ismiyle aynı olması.

int led_state(...)
{
int a;
int b;
}

gibi tanımlanış fonksiyondan bir farkı yok.  Sadece a, b yerine fonksiyon ismi ile aynu olan bir değişken ismi kullanmış o kadar.

bunun dışında anlamadığın yer
int led_state = (button_state == HIGH) ? HIGH : LOW;


satırı ise,  eşdeğeri aşağıdaki gibi.   

if( button_state == HIGH)
{
  led_state = HIGH;
}else {
  button_state = LOW;
}


? operatörü , basit koşul testlerinde yazımı kolaylaştıran bir operatör.  Eğer bir şart  ifadesi sonrası , şartın gereklenme durumuna göre bir değişkene değer atanacak ve başka hiç bir işlem yapılmayacaksa, bu operatör kullanılabilir.
değişken = (şart) ? şart doğru ise değişkene yazılacak değer : şart yanlış ise değişkene yazılacak değer; şeklinde özetlenebilir.

veliusta