Po ladění a konfliktních deklaracích o analogových pinech jsem si konečně myslel, že je hotovo, po kompilaci jsem dostal tuto chybu:

32:0, 1: 31:12: error: expected unqualified-id before numeric constant 2:5: note: in expansion of macro "B1" 

Nechápu, co to znamená. Co se děje s mým kódem dole?

// don"t judge me if it"s too long and overcomplicated :P I"m still new 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); } } 

Předpokládá se, že to bude kód hodin (pokud to nebylo dostatečně zřejmé) napojených na 4 7segmentové dekodéry, také připojené ke 4 7segmentovým LED displejům.

Komentáře

  • Obecně při psaní v jazyce C by „makro“ mělo být velkým náznakem, že máte problém s #define . Bizzare chyby, které říkají věci, které nejsou to, co jste napsali: problém zahrnující #define.

Odpovědět

Smůla. V Arduinu je soubor s názvem „binary.h“ a obsahuje definici nazvanou „B1“. Což znamená, že nesmíte použít „B1“ jako proměnnou. Podle mého názoru je tento soubor „binary.h“ naprosto zbytečný.

V předvolbách můžete zapnout další výstup kompilátoru a zapnout čísla řádků. Kompilátor řekne, co se děje, ale musíte vědět, jak to kompilátor dělá. Nejdůležitější je první chyba kompilátoru.

… / hardware / arduino / avr / cores / arduino / binary.h: 31:12: error: expect unqualified-id before numeric konstanta #define B1 1 „znamená, že překladač četl soubor„ binary.h „a na řádku 31 si všiml něčeho, čemu nerozuměl, a má to co do činění s„ B1 „.

Komentáře

  • Takže prostě musím nepoužívat B1?
  • Správně. Přední B s 0 ' sa 1 ' s se používá pro binární konstanty: arduino.cc/cs/Reference/IntegerConstants Protože se jedná o číslo PIN, můžete volat proměnnou " const B1Pin = 1; " nebo dokonce " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment: " const int B1Pin = 1; ". Lituji, zapomněl jsem ' int '. Klíčové slovo ' const ' není nutné, říká kompilátoru, že je konstantní číslo a nemění se.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *