Efter fejlretning og nogle modstridende erklæringer om analoge ben, troede jeg endelig, at det var gjort, efter kompilering fik jeg denne fejl:

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

Jeg kan ikke forstå, hvad dette betyder. Hvad er der galt med min kode her nede?

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

Det skulle være kode til et ur (hvis det ikke var åbenlyst nok) tilsluttet op til 4 7-segment dekodere, også forbundet til 4 7-segment LED-skærme.

Kommentarer

  • Generelt, når du skriver i C, skal “makro” være et stort antydning om, at du har et problem, der involverer #define . Bizzare-fejl, der siger ting, der ikke er, hvad du skrev: problem med #define.

Svar

Uheld. Der er en fil i Arduino kaldet “binary.h”, og den indeholder en definition kaldet “B1”. Hvilket betyder, at du muligvis ikke bruger “B1” som en variabel. Efter min mening er denne fil “binær.h” fuldstændig unødvendig.

I præferencerne kan du aktivere ekstra output til compileren og slå linjenumre til. Compileren vil fortælle, hvad der er galt, men du skal vide, hvordan compileren gør det. Den første kompilatorfejl er den vigtigste.

… / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: fejl: forventet ukvalificeret id før numerisk konstant #definer B1 1 “betyder, at kompilatoren læste filen” binær.h “og på linje 31 bemærkede den noget, den ikke forstod, og den har at gøre med” B1 “.

Kommentarer

  • Så jeg skal bare ikke bruge B1?
  • Korrekt. Den førende B med 0 ' s og 1 ' s bruges til binære konstanter: arduino.cc/da/Reference/IntegerConstants Da det er et pin-nummer, kan du kalde variablen " const B1Pin = 1; " eller endda " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • Jeg ment: " const int B1Pin = 1; ". Beklager, jeg har glemt ' int '. Nøgleordet ' const ' er ikke nødvendigt, det fortæller kompilatoren, at det er et konstant tal og ikke ændres.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *