După depanare și am avut câteva declarații contradictorii despre pinii analogici, în cele din urmă am crezut că s-a făcut, după compilare am primit această eroare: / p>

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

Nu pot să înțeleg ce înseamnă acest lucru. Ce e în neregulă cu codul meu aici?

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

Se presupune că este un cod pentru un ceas (dacă nu era suficient de evident) conectat la 4 decodificatoare cu 7 segmente, conectate, de asemenea, la 4 afișaje LED cu 7 segmente.

Comentarii

  • În general, atunci când scrieți în C, „macro” ar trebui să fie un indiciu important că aveți o problemă care implică #define . Erori bizzare spunând lucruri care nu sunt ceea ce ați scris: problemă care implică #define.

Răspuns

Ghinion. Există un fișier în Arduino numit „binary.h” și conține o definiție numită „B1”. Ceea ce înseamnă că nu puteți utiliza „B1” ca variabilă. În opinia mea, acel fișier „binary.h” este total inutil.

În preferințe puteți activa o ieșire suplimentară pentru compilator și activa numerele de linie. Compilatorul va spune ce este greșit, dar trebuie să știți cum face acest lucru. Prima eroare a compilatorului este cea mai importantă.

… / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: error: așteptat unqualified-id înainte de numeric constant #define B1 1 „înseamnă că compilatorul citea fișierul” binary.h „și la linia 31 a observat ceva ce nu înțelegea și are legătură cu” B1 „.

Comentarii

  • Deci trebuie doar să nu folosesc B1?
  • Corect. B-ul principal cu 0 ' s și 1 ' s este utilizat pentru constantele binare: arduino.cc/en/Reference/IntegerConstants Deoarece este un număr PIN, puteți apela variabila " const B1Pin = 1; " sau chiar " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • Am menționat: " const int B1Pin = 1; ". Ne pare rău, am uitat ' int '. Cuvântul cheie ' const ' nu este necesar, îi spune compilatorului că este un număr constant și nu se modifică.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *