IF deyim neden genel olarak göremiyor?


14

Arduino programlamasında yeniyim. Aşağıdaki kod bit derleme bir sorun var:

const int relay1 = 10;  //Power Relay 1
const int relay2 = 11;  //Power Relay 2
const int relay3 = 12;  //Toggle Relay
const int button1 = 3;  
const int button2 = 4;
const int button3 = 5;

//---Button States---\\
int button1State;   //Current state of Button 1
int button2State;   //Current state of Button 2
int button3State;   //Current state of Button 3
int button1State_prev = LOW;  //Previous state of Button 1
int button2State_prev = LOW;  //Previous state of Button 2
int button3State_prev = LOW;  //Previous state of Button 3

//---General Variables---\\
int userSelection = 0;
int interlockState = 0;
int platformState = 0;

//---Interval-Tracking Variables---\\
unsigned long lastTime_Debounce1 = 0;   //Button 1 debounce time
unsigned long lastTime_Debounce2 = 0;   //Button 2 debounce time

//---Activity Delays---\\
const unsigned int relayDelay = 10;           //Delay between relay actions (ms)
const unsigned int debounceDelay = 60;        //Delay for button de-bouncing (ms)

void setup() {
  //Configure Pins
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);

  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
}

void loop() {
  //Read value of each input pin
  int button1Reading = digitalRead(button1);  //Current reading of Button 1
  int button2Reading = digitalRead(button2);  //Current reading of Button 2
  int button3Reading = digitalRead(button3);  //Current reading of Button 3

  //Debounce Button1
  if (button1Reading != button1State_prev) {
    lastTime_Debounce1 = millis();
  }
  button1State_prev = button1Reading;
  if ((millis() - lastTime_Debounce1) > debounceDelay) {
    if (button1Reading != button1State) {
      button1State = button1Reading;
    }
  }

  //Debounce Button2
  if (button2Reading != button2State_prev) {
    lastTime_Debounce2 = millis();
  }
  button2State_prev = button2Reading;
  if ((millis() - lastTime_Debounce2) > debounceDelay) {
    if (button2Reading != button2State) {
      button2State = button2Reading;
    }
  }

Herhangi bir nedenle derleyici, lastTime_Debounce154 numaralı satırdaki ikinci IF-ifadesindeki değişkenin kapsam içinde bildirilmediğine inanmaktadır . Söz konusu değişken tanımlanmış ve başlatılmış bir global olduğundan bunun nasıl mümkün olduğunu anlamıyorum.

IF-ifadelerinin ilk üçlüsünü (Düğme 1'i ele alırken) yorumlarsam, ikinci üçlü (işlem düğmesi 2'yi) aynı şeyi tam olarak aynı şekilde yapsa bile derleme sorunu yoktur.

Her zamanki şüphelileri kontrol ettim: yazım, kaşlı ayraçlar, noktalı virgüller, hatta kod bloklarını teker teker yorumladım, ama sorunun kaynağını bulamıyorum. Arduino 1.8.2 IDE kullanıyorum.

Birisi lütfen eksik olduğum hatayı gösterebilir mi?


1
Sözdizimi vurgulamanın sorunu daha açık hale getirip getirmeyeceğini görmek için sorunuzu C ++ etiketi ile etiketledim, ancak maalesef değil.
Nick Gammon

Yanıtlar:


28

Yorumlarınızdaki ters eğik çizgi sorun. C ++ dil tanımlarına \göre, satırın sonundaki a "satır devam" olarak yorumlanır. Böylece, yorumunuz bir sonraki satırda devam eder ve değişken beyanınız ve başlatmanız yorumlanır.

Bu, kodunuzu Notepad ++ gibi iyi bir sözdizimi vurgulama programıyla açarken belirgindir.

resim açıklamasını buraya girin

\\Yorum satırının sonundan kaldırılması sorununuzu çözer.

Yan not: Daha fazla bilgi için /programming//a/30290133/5296568 adresine bakın . Bir satırın sonundaki ters eğik çizgiler, çok satırlı makro tanımlarında kullanıldığında gerçekten yararlıdır.


1
Kod vurgulayıcı burada yakalamak değil şaşırdım.
WernerCD

2
@WernerCD Stack Exchange kod işaretlemesi, kod bloğunda hangi dilin kullanıldığını akıllıca tespit etmeye çalışır, ancak bazen bunu yapamaz ve bunun bir şey olmadığını düşünür. pasajdan önce <! - dil: insert-lang-here -> belirterek düzeltebilirsiniz.
Nzall

1
@Nzall yukarıdaki NickGammon yorumuna bakın; C / C ++ moduna (C ++ etiketi ekleyerek) yerleştirildiğinde StackOverflow sözdizimi vurgulayıcı bile doğru şekilde vurgulamaz.
Maximilian Gerhardt

Neden çalışıyor? Birincisi ikincisini yok etmemeli ve böylece yeni çizgiyi yorumlamamalı mı?
Nova

Bir yorumda \ 'ın bir karakter dizesine yerleştirilmiş gibi sonraki karakterden kaçabildiğinin farkında değilim.
Maximilian Gerhardt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.