Na debuggen en enkele tegenstrijdige verklaringen over analoge pinnen, dacht ik dat het klaar was, na het compileren kreeg ik deze foutmelding:

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

Ik kan “niet begrijpen wat dit betekent. Wat is er mis met mijn code hier beneden?

// 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); } } 

Het zou code moeten zijn voor een klok (als het niet duidelijk genoeg was) aangesloten op 4 7-segment decoders, ook verbonden met 4 7-segment LED displays.

Opmerkingen

  • In het algemeen zou “macro” bij het schrijven in C een grote hint moeten zijn dat je een probleem hebt met #define . Bizzare-fouten die dingen zeggen die niet zijn wat je hebt geschreven: probleem met #define.

Antwoord

Pech. Er is een bestand in Arduino met de naam “binary.h”, en het bevat een definitie met de naam “B1”. Dit betekent dat u “B1” niet als variabele mag gebruiken. Naar mijn mening is dat bestand “binary.h” totaal niet nodig.

In de voorkeuren kun je extra output aanzetten voor de compiler en regelnummers aanzetten. De compiler zal vertellen wat er mis is, maar je moet weten hoe de compiler dat doet. De eerste compilatiefout is de belangrijkste.

… / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: error: verwachte ongekwalificeerde-id voor numeriek constante #define B1 1 “betekent dat de compiler het bestand” binary.h “aan het lezen was en op regel 31 merkte het iets dat het niet begreep en het heeft te maken met” B1 “.

Opmerkingen

  • Dus ik hoef B1 gewoon niet te gebruiken?
  • Correct. De voorloop B met 0 ' s en 1 ' s wordt gebruikt voor binaire constanten: arduino.cc/en/Reference/IntegerConstants Omdat het een pincode is, kun je de variabele " const B1Pin = 1; of zelfs " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment: " const int B1Pin = 1; ". Sorry, ik ben de ' int ' vergeten. Het ' const ' sleutelwoord is niet nodig, het vertelt de compiler dat het een constant getal is en niet verandert.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *