Después de depurar y tener algunas declaraciones contradictorias sobre pines analógicos, finalmente pensé que estaba hecho, después de compilar recibí este error:

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

No puedo entender lo que esto significa. ¿Qué pasa con mi código aquí abajo?

// 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 supone que es un código para un reloj (si no fuera lo suficientemente obvio) conectado a 4 decodificadores de 7 segmentos, también conectados a 4 pantallas LED de 7 segmentos.

Comentarios

  • En general, cuando se escribe en C, «macro» debería ser un gran indicio de que tiene un problema relacionado con #define . Errores extraños al decir cosas que no son lo que escribiste: problema relacionado con #define.

Responder

Mala suerte. Hay un archivo dentro de Arduino llamado «binary.h», y contiene una definición llamada «B1». Lo que significa que no puede utilizar «B1» como variable. En mi opinión, ese archivo «binary.h» es totalmente innecesario.

En las preferencias puede activar la salida adicional para el compilador y activar los números de línea. El compilador dirá qué está mal, pero debes saber cómo lo hace el compilador. El primer error del compilador es el más importante.

« … / hardware / arduino / avr / cores / arduino / binary.h: 31: 12: error: esperado unqualified-id antes de numérico constante #define B1 1 «significa que el compilador estaba leyendo el archivo» binary.h «y en la línea 31 notó algo que no entendía y tiene que ver con» B1 «.

Comentarios

  • ¿Entonces no debo usar B1?
  • Correcto. La B inicial con 0 ' sy 1 ' s se usa para las constantes binarias: arduino.cc/en/Reference/IntegerConstants Como es un número pin, puede llamar a la variable " const B1Pin = 1; " o incluso " const TheyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment: " const int B1Pin = 1; ". Lo siento, olvidé el ' int '. La palabra clave ' const ' no es necesaria, le dice al compilador que es un número constante y no cambia.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *