디버깅하고 아날로그 핀에 대해 충돌하는 선언이있는 후 마침내 완료되었다고 생각했습니다. 컴파일 후 다음 오류가 발생했습니다.

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

이해할 수 없습니다. 여기에있는 내 코드에 어떤 문제가 있습니까?

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

그것은 (분명하지 않은 경우) 4 개의 7- 세그먼트 디코더와 4 개의 7- 세그먼트 LED 디스플레이에 연결된 시계 용 코드로되어 있습니다.

댓글

  • 일반적으로 C로 작성할 때 “매크로”는 #define와 관련된 문제가 있다는 큰 힌트 여야합니다. . 작성한 내용이 아닌 것을 말하는 Bizzare 오류 : #define 관련 문제.

답변

불운. Arduino 내에 “binary.h”라는 파일이 있으며 “B1″이라는 정의가 포함되어 있습니다. 즉, “B1″을 변수로 사용할 수 없습니다. 제 생각에는 “binary.h”파일은 완전히 불필요합니다.

환경 설정에서 컴파일러에 대한 추가 출력을 켜고 줄 번호를 켤 수 있습니다. 컴파일러는 무엇이 잘못되었는지 알려줄 것이지만 컴파일러가이를 어떻게 수행하는지 알아야합니다. 첫 번째 컴파일러 오류가 가장 중요합니다.

… / hardware / arduino / avr / cores / arduino / binary.h : 31 : 12 : 오류 : 숫자 앞에 정규화되지 않은 ID가 필요합니다. constant #define B1 1 “은 컴파일러가”binary.h “파일을 읽고 있고 31 행에서 이해하지 못한 것을 발견했으며”B1 “과 관련이 있음을 의미합니다.

댓글

  • 그래서 B1을 사용하면 안되나요?
  • 맞습니다. 0 ' 및 1 '가있는 선행 B는 이진 상수에 사용됩니다. arduino.cc/en/Reference/IntegerConstants 핀 번호이므로 " const B1Pin = 1; 또는 " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment : " const int B1Pin = 1; ". 죄송합니다. ' int '를 잊어 버렸습니다. ' const ' 키워드는 필요하지 않으며 컴파일러에게 상수이며 변경되지 않음을 알려줍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다