Çözüldü Arduino " 'else' without a previous 'if' " hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

T-Bad

Hectopat
Katılım
4 Haziran 2019
Mesajlar
502
Çözümler
4
Yer
Eskişehir
Daha fazla  
Cinsiyet
Erkek
Meslek
Mühendis
Kurduğum Arduino devresinde buton basılınca buzzer ötmesi ve LED yanmasını basmayınca ise susmasını istiyorum fakat nedense else kısmında bir sorun yaşıyorum. Else kullanımında hata var sanırsam. Else yerine else if gibi şeyler denedim ama fayda etmedi. Kodu aşağıya bırakayım. Sizlerden ricam hatamın neden kaynaklı olduğunu söylerseniz çok mutlu olurum amacım hatamın düzelmesi değil hatamı nasıl kendim düzelteceğimi öğrenmek.
#define Led 11. #define Buzzer 7. #define Buton 8. void setup() { pinMode(Buzzer, OUTPUT); pinMode(Buton, INPUT); pinMode(Led, OUTPUT); } void loop() { if (digitalRead (Buton) == 1) digitalWrite(Buzzer, HIGH); digitalWrite(Led, HIGH); else if. digitalWrite(Buzzer, LOW); digitalWrite(Led, LOW); }
 
Çözüm
Noktalı virgülü unutmuşum:

Kod:
int Led = 11;
int Buzzer = 7;
int Buton = 8;

int state;

void setup() {

    pinMode(Buzzer, OUTPUT);
    pinMode(Buton, INPUT);
    pinMode(Led, OUTPUT);
}

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

    if (state == 1){
        digitalWrite(Buzzer, HIGH);
        digitalWrite(Led, HIGH);
    }
    
    else{
        digitalWrite(Buzzer, LOW);
        digitalWrite(Led, LOW);
    }
}

Define yerine neden int kullandığınızı sorabilir miyim?

Tercih meselesi ama port tanımlamaları için genelde int kullanıyorum ben. #define da kullanılabilir.

Ayrıca oraya eklediğiniz state komutunu da açıklarsanız sevinirim.

Pinden okuduğu değeri State değişkenine yazıyorum. if ifadelerinde direkt digitalRead fonksiyonunu kullanmaktansa bu şekilde değeri, değişkene atayıp kullanmak daha sağlıklıdır.
İnsanlar neden #define'dan sonra nokta kullanıyor anlamıyorum.

Öncelikle o hata İngilizce olarak size diyor ki, else kullandın ama öncesinde if yok.
Kodu ve muhtemelen hatayı düzeltip atacağım birazdan.

Arduino'dan anlamam ama C++ ile çalışıyor diye biliyorum ve bu kod C/C++ kodu, onu biliyorum.
if'ten sonra küme parantezi kullanmazsanız blok açmamış olursunuz, bu durumda sadece sonraki state (ifade) çalışır.
Aynı şey else, else if vb. şeyler için geçerli.

Bu şekilde deneyin. Olup olmadığını belirtin.

Kod:
#define Led 11
#define Buzzer 7
#define Buton 8

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

void loop() {
    if (digitalRead(Buton) == 1){
        digitalWrite(Buzzer, HIGH);
        digitalWrite(Led, HIGH);
    }
    else if{
        digitalWrite(Buzzer, LOW);
        digitalWrite(Led, LOW);
    }
}
 
İnsanlar neden #define'dan sonra nokta kullanıyor anlamıyorum.

İnsanlar kodu kod olarak neden paylaşmıyor ben de onu anlamıyorum... :( Debug olarak hata mesajı da yok...

Kodun böyle olmalı:

Kod:
#define Led 11

#define Buzzer 7

#define Buton 8

void setup() {

pinMode(Buzzer, OUTPUT);

pinMode(Buton, INPUT);

pinMode(Led, OUTPUT);

}



void loop() {

if (digitalRead (Buton) == 1)

digitalWrite(Buzzer, HIGH);

digitalWrite(Led, HIGH);

else

digitalWrite(Buzzer, LOW);

digitalWrite(Led, LOW);

}

Satırlardan sonra nokta koymamalısın. Ayrıca bir if varsa ve iki durum varsa, else if değil else kullanmalısın.
 
Satırlardan sonra nokta koymamalısın. Ayrıca bir if varsa ve iki durum varsa, else if değil else kullanmalısın.
Else if'i görünce aklıma ilk o geldi. Kodu Technopat'a yapıştırınca düzeltecektim. Sonra belki başka şart istiyordur dedim de şimdi baktığımda içi yokmuş 😄
 
Hocam maalesef yazılan iki kod da çalışmadı. Ayrıca satır sonlarına nokta koymamıştım sanırım foruma yüklerken tiki işaretledim ondan dolayı böyle oldu.
 
Dener misin? if parantezleri de yanlışmış, yeni fark ettim.

Kod:
int Led = 11;
int Buzzer = 7;
int Buton = 8;

int state

void setup() {

    pinMode(Buzzer, OUTPUT);
    pinMode(Buton, INPUT);
    pinMode(Led, OUTPUT);
}

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

    if (state == 1){
        digitalWrite(Buzzer, HIGH);
        digitalWrite(Led, HIGH);
    }
    
    else{
        digitalWrite(Buzzer, LOW);
        digitalWrite(Led, LOW);
    }
}
 
Bu sefer de aşağıdaki hataları alıyorum. Define yerine neden int kullandığınızı sorabilir miyim ? Ayrıca oraya eklediğiniz state komutunu da açıklarsanız sevinirim. Ayrıca şimdiye kadar ilgilendiğiniz için çok teşekkür ederim

Arduino:1.8.13 (Windows Store 1.8.42.0) (Windows 10), Kart:"Arduino Uno"

bankaalarm:3:15: error: expected initializer before 'setup'

int Buton = 8;

^

bankaalarm:6:1: error: expected initializer before 'void'

void setup() {

^~~~

C:\Users\Emre\Documents\Arduino\bankaalarm\bankaalarm.ino: In function 'void loop()':

bankaalarm:14:5: error: 'state' was not declared in this scope

state = digitalRead (Buton);

^~~~~

C:\Users\Emre\Documents\Arduino\bankaalarm\bankaalarm.ino:14:5: note: suggested alternative: 'static'

state = digitalRead (Buton);

^~~~~

static

exit status 1

expected initializer before 'setup'



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
 
Noktalı virgülü unutmuşum:

Kod:
int Led = 11;
int Buzzer = 7;
int Buton = 8;

int state;

void setup() {

    pinMode(Buzzer, OUTPUT);
    pinMode(Buton, INPUT);
    pinMode(Led, OUTPUT);
}

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

    if (state == 1){
        digitalWrite(Buzzer, HIGH);
        digitalWrite(Led, HIGH);
    }
    
    else{
        digitalWrite(Buzzer, LOW);
        digitalWrite(Led, LOW);
    }
}

Define yerine neden int kullandığınızı sorabilir miyim?

Tercih meselesi ama port tanımlamaları için genelde int kullanıyorum ben. #define da kullanılabilir.

Ayrıca oraya eklediğiniz state komutunu da açıklarsanız sevinirim.

Pinden okuduğu değeri State değişkenine yazıyorum. if ifadelerinde direkt digitalRead fonksiyonunu kullanmaktansa bu şekilde değeri, değişkene atayıp kullanmak daha sağlıklıdır.
 
Çözüm
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı