Depois de depurar e ter algumas declarações conflitantes sobre pinos analógicos, eu finalmente pensei que estava feito, depois de compilar, recebi este erro:

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

Não consigo entender o que isso significa. O que há de errado com o meu código aqui embaixo?

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

É suposto ser o código de um relógio (se não fosse óbvio o suficiente) conectado a 4 decodificadores de 7 segmentos, também conectados a 4 displays de LED de 7 segmentos.

Comentários

  • Em geral, ao escrever em C, “macro” deve ser uma grande dica de que você tem um problema envolvendo #define . Erros bizarros dizendo coisas que não são o que você escreveu: problema envolvendo #define.

Resposta

Má sorte. Existe um arquivo dentro do Arduino chamado “binary.h” e contém uma definição chamada “B1”. O que significa que você não pode usar “B1” como variável. Na minha opinião, esse arquivo “binary.h” é totalmente desnecessário.

Nas preferências você pode ativar a saída extra para o compilador e ativar os números das linhas. O compilador dirá o que está errado, mas você deve saber como o compilador faz isso. O primeiro erro do compilador é o mais importante.

… / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: erro: esperado não qualificado-id antes de numérico constante #define B1 1 “significa que o compilador estava lendo o arquivo” binary.h “e na linha 31 percebeu algo que não entendeu e tem a ver com” B1 “.

Comentários

  • Então, eu apenas tenho que não usar B1?
  • Correto. O B inicial com 0 ' se 1 ' s é usado para constantes binárias: arduino.cc/en/Reference/IntegerConstants Como é um número pin, você pode chamar a variável " const B1Pin = 1; " ou mesmo " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment: " const int B1Pin = 1; ". Desculpe, esqueci o ' int '. A palavra-chave ' const ' não é necessária, ela diz ao compilador que é um número constante e não muda.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *