Ошибка "Expected unqualified ID before numeric constant"

После отладки и наличия нескольких противоречивых объявлений об аналоговых выводах я, наконец, решил, что это сделано, после компиляции я получил эту ошибку:

32:0,
1:
31:12: error: expected unqualified-id before numeric constant


2:5: note: in expansion of macro 'B1'

Я не понимаю, что это значит. Что не так с моим кодом?

// не судите меня, если это слишком длинно и сложно :P Я все еще новичок xD
int AA1 = 0;
int B1 = 1;
int C1 = 2;
int D1 = 3;
int AA2 = 4;
int B2 = 5;
int C2 = 6;
int AA3 = 8;
int B3 = 9;
int C3 = 10;
int D3 = 11;
int B4 = 12;
int C4 = 13;
int sec = 0;
int min1 = 0;
int min2 = 0;
int hour1 = 8;
bool hour2 = 0;

void setup() {
  pinMode(AA1, OUTPUT);
  pinMode(B1, OUTPUT);
  pinMode(C1, OUTPUT);
  pinMode(D1, OUTPUT);
  pinMode(AA2, OUTPUT);
  pinMode(B2, OUTPUT);
  pinMode(C2, OUTPUT);
  pinMode(AA3, OUTPUT);
  pinMode(B3, OUTPUT);
  pinMode(C3, OUTPUT);
  pinMode(D3, OUTPUT);
  pinMode(B4, OUTPUT);
  pinMode(C4, OUTPUT);
}

void loop() {
  OutputOn();
  delay(1000);
  sec++;
  if(sec == 60) {
    sec = 0;
    min1++;
      if(min1 == 10) {
      min1 = 0;
      min2++;
        if(min2 == 6) {
        min2 = 0;
        hour1++;
          if(hour1 == 10) {
          hour1 = 0;
          hour2 = 1;
        }
        if(hour2 == 1, hour1 == 3) {
          hour1 = 1;
          hour2 = 0;
        }
      }
    }
  }
}

void OutputOn() {
  digitalWrite(B1, LOW);
  digitalWrite(C1, LOW);
  digitalWrite(D1, LOW);
  digitalWrite(A2, LOW);
  digitalWrite(B2, LOW);
  digitalWrite(C2, LOW);
  digitalWrite(A3, LOW);
  digitalWrite(B3, LOW);
  digitalWrite(C3, LOW);
  digitalWrite(D3, LOW);
  digitalWrite(B4, LOW);
  digitalWrite(C4, LOW);
  if(min1 == 1) { digitalWrite(AA1, HIGH); }
  if(min1 == 2) { digitalWrite(B1, HIGH); }
  if(min1 == 3) { digitalWrite(B1, HIGH); digitalWrite(AA1, HIGH); }
  if(min1 == 4) { digitalWrite(C1, HIGH); }
  if(min1 == 5) { digitalWrite(C1, HIGH); digitalWrite(AA1, HIGH); }
  if(min1 == 6) { digitalWrite(D1, HIGH); digitalWrite(B1, HIGH); }
  if(min1 == 7) { digitalWrite(D1, HIGH); digitalWrite(AA1, HIGH); digitalWrite(B1, HIGH); }
  if(min1 == 8) { digitalWrite(D1, HIGH); }
  if(min1 == 9) { digitalWrite(D1, HIGH); digitalWrite(AA1, HIGH); }
  if(min2 == 1) { digitalWrite(AA2, HIGH); }
  if(min2 == 2) { digitalWrite(B2, HIGH); }
  if(min2 == 3) { digitalWrite(B2, HIGH); digitalWrite(AA1, HIGH); }
  if(min2 == 4) { digitalWrite(C2, HIGH); }
  if(min2 == 5) { digitalWrite(C2, HIGH); digitalWrite(A2, HIGH); }
  if(min2 == 6) { digitalWrite(C2, HIGH); digitalWrite(B2, HIGH); }
  if(hour1 == 1) { digitalWrite(AA3, HIGH); }
  if(hour1 == 2) { digitalWrite(B3, HIGH); }
  if(hour1 == 3) { digitalWrite(B3, HIGH); digitalWrite(AA3, HIGH); }
  if(hour1 == 4) { digitalWrite(C3, HIGH); }
  if(hour1 == 5) { digitalWrite(C3, HIGH); digitalWrite(AA3, HIGH); }
  if(hour1 == 6) { digitalWrite(C3, HIGH); digitalWrite(B3, HIGH); }
  if(hour1 == 7) { digitalWrite(C3, HIGH); digitalWrite(AA3, HIGH); digitalWrite(B3, HIGH); }
  if(hour1 == 8) { digitalWrite(D3, HIGH); }
  if(hour1 == 9) { digitalWrite(D3, HIGH); digitalWrite(C3, HIGH); }
  if(hour2 == 1) { digitalWrite(B4, HIGH); digitalWrite(C4, HIGH); }
}

Предполагалось, что это код для часов (если это было недостаточно очевидно), подключенный к 4 7-сегментным дешифраторам, также подключенным к 4 7-сегментным светодиодным дисплеям.

, 👍6

Обсуждение

В общем, при написании на C слово «макрос» должно быть большим намеком на то, что у вас есть проблема, связанная с #define. Странные ошибки, говорящие о том, что вы не написали: проблема с #define., @JDługosz


1 ответ


Лучший ответ:

6

Не повезло. В Arduino есть файл с именем «binary.h», и он содержит определение с именем «B1». Это означает, что вы не можете использовать «B1» в качестве переменной. На мой взгляд, этот файл "binary.h" совершенно не нужен.

В настройках вы можете включить дополнительный вывод для компилятора и включить нумерацию строк. Компилятор скажет, что не так, но вы должны знать, как он это делает. Первая ошибка компилятора самая важная.

".../hardware/arduino/avr/cores/arduino/binary.h:31:12: ошибка: ожидается неполный идентификатор перед числовой константой #define B1 1" означает, что компилятор читал файл "binary.h" и в строке 31 заметил что-то не понятное и связанное с "B1".

,

Значит, мне просто нужно не использовать B1?, @Dudamesh 192

Правильный. Ведущая B с 0 и 1 используется для двоичных констант: https://www.arduino.cc/en/Reference/IntegerConstants Поскольку это номер контакта, вы можете вызвать переменную «const B1Pin = 1;» или даже «const TheyToldMeAtStackExchangeNotToCallThisB1 = 1;», @Jot

Я говорю: «const int B1Pin = 1;». Извините, я забыл «int». Ключевое слово const не требуется, оно сообщает компилятору, что это постоянное число и оно не изменяется., @Jot