Nach dem Debuggen und einigen widersprüchlichen Deklarationen zu analogen Pins dachte ich schließlich, dass dies getan wurde. Nach dem Kompilieren bekam ich den folgenden Fehler:

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

Ich kann nicht verstehen, was dies bedeutet. Was ist mit meinem Code hier unten falsch?

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

Es soll sich um einen Code für eine Uhr handeln (wenn dies nicht offensichtlich genug war), die an 4 7-Segment-Decoder angeschlossen ist, die auch an 4 7-Segment-LED-Anzeigen angeschlossen sind.

Kommentare

  • Im Allgemeinen sollte „Makro“ beim Schreiben in C ein großer Hinweis darauf sein, dass Sie ein Problem mit #define haben . Bizzare Fehler, die Dinge sagen, die nicht das sind, was Sie geschrieben haben: Problem mit #define.

Antwort

Pech. In Arduino gibt es eine Datei namens „binary.h“, die eine Definition namens „B1“ enthält. Das heißt, Sie dürfen „B1“ nicht als Variable verwenden. Meiner Meinung nach ist diese Datei „binary.h“ völlig unnötig.

In den Einstellungen können Sie zusätzliche Ausgaben für den Compiler aktivieren und Zeilennummern aktivieren. Der Compiler wird sagen, was falsch ist, aber Sie müssen wissen, wie der Compiler das macht. Der erste Compilerfehler ist der wichtigste.

… / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: Fehler: erwartete unqualifizierte ID vor numerisch Konstante #define B1 1 „bedeutet, dass der Compiler die Datei“ binary.h „gelesen hat und in Zeile 31 etwas bemerkt hat, das er nicht verstanden hat und das mit“ B1 „zu tun hat.

Kommentare

  • Also muss ich einfach nicht B1 verwenden?
  • Richtig. Das führende B mit 0 ' s und 1 ' s wird für binäre Konstanten verwendet: arduino.cc/en/Reference/IntegerConstants Da es sich um eine PIN-Nummer handelt, können Sie die Variable " const B1Pin = 1; oder sogar " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • Ich erwähne: " const int B1Pin = 1; ". Entschuldigung, ich habe die ' int ' vergessen. Das Schlüsselwort ' const ' wird nicht benötigt. Es teilt dem Compiler mit, dass es eine konstante Zahl ist und sich nicht ändert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.