Ошибка "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-сегментным светодиодным дисплеям.
@Dudamesh 192, 👍6
Обсуждение1 ответ
Лучший ответ:
Не повезло. В 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
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
В общем, при написании на C слово «макрос» должно быть большим намеком на то, что у вас есть проблема, связанная с
#define
. Странные ошибки, говорящие о том, что вы не написали: проблема с#define
., @JDługosz