Usando matrices, datos binarios y bitRead

Este es mi primer código escrito manualmente. Estoy seguro de que puede haber algunos «errores de colegial» evidentes, así que me preguntaba si la gente podría darle un «una vez más». En particular, nunca he usado matrices de C ++, almacenando datos binarios dentro y luego tratando de leerlos un poco. en perl, mucho más fácil; simplemente usarías algo multidimensional como esto:

@code1=("10101010", "01010101"); $bit=$code1[0][0] (..through to..) code1[0][7] $bit=$code1[1][0] ... code1[1][7] 

Este es mi código Arduino. Bienvenido a sugerencias .

int pinArray[]={2,3,4,5,6,7,8,9}; int code1[]={B10101010, B01010101,B10101010, B01010101,B10101010, B01010101}; int count=0; int split=0; // Counter for the bit loop int led; // Store bit data byte x; // Used to store the binary data in code1 void setup(){ for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); // Sets pinMode as output on pinArray pins ] } void loop(){ for (count=0; count<6; count++){ x=code1[count]; ledDisplay(x); } } void ledDisplay(){ for (split=7; split>=0; split--){ led=bitRead(x,split); if (led == 1){ digitalWrite(split+2,HIGH); } else{ digitalWrite(split+2,LOW); } } } 

Acabo de modificar la división, ya que me di cuenta de que el bit7 es el dígito más a la izquierda. En la división, estoy agregando 2 al valor. ¿Debe incluirse esto corchetes, es decir, (dividir + 2)?

Comentarios

  • Sus sangrías son confusas. Presione Ctrl + T
  • Cuando escribo mi código en el editor de texto, uso la tecla de tabulación para sangrar el código, de modo que los " para " corchetes de apertura / cierre, etc. en la misma columna, (que parece verse correctamente en mi navegador de escritorio, tal vez tal vez incorrecto en el teléfono, por lo que usaré CRTL + t en f uture al publicar. (Sé que CODE1 no ' sigue la misma convención, pero luego trato de mantener abierto / cerrado en la misma línea para que no ' t ' ejecutar ' la siguiente matriz, teniendo en cuenta que tendré 14 de estas matrices) Esto no es ' t pretendía ser ' desagradable ' para ti, ya que aprecio que te tomes el tiempo para ser útil, solo mostrando mi ' convención de nomenclatura '
  • Ctrl-T es solo una forma rápida de sangrar correctamente el código Cualquiera que sea el estilo predeterminado del IDE '. Sin embargo, no ' no tiene que usarlo. Puede usar cualquier estilo de sangría que desee si lo maneja manualmente. Alternativamente, puede configurar el IDE para su estilo favorito . Solo asegúrese de adoptar un estilo de sangría y aplicarlo de manera coherente.

Responder

Solo hay dos errores que puede detectar en su programa:

  1. Un bloque de código debe estar delimitado por llaves:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Si una función espera que se le pasen argumentos, estos deben declararse como parámetros en el prototipo de la función:

     void ledDisplay(byte x){ // ← mind the “byte x” // ... }  

Aparte de eso, aquí algunas sugerencias para hacer que el código se vea más agradable y, con suerte, más fácil de mantener:

  • sangría consistente
  • use const para calificar las constantes
  • use constantes con nombre en lugar de números mágicos
  • mantenga las variables locales si es posible
  • tenga en cuenta que un int que sea 0 o 1 es equivalente a un booleano
  • use pinArray[] para acceder a los pines

Aplicar Al aplicar esas sugerencias, obtengo lo siguiente:

 const int PIN_COUNT = 8; const int pinArray[PIN_COUNT] = { 2, 3, 4, 5, 6, 7, 8, 9 }; const int CODE_COUNT = 6; const int code1[CODE_COUNT] = { B10101010, B01010101, B10101010, B01010101, B10101010, B01010101 }; void setup() { for (int count = 0; count < PIN_COUNT; count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (int count = 0; count < CODE_COUNT; count++) { ledDisplay(code1[count]); } } void ledDisplay(byte x) { for (int split = 7; split >= 0; split--) { if (bitRead(x, split)) { digitalWrite(pinArray[split], HIGH); } else { digitalWrite(pinArray[split], LOW); } } }  

Comentarios

  • Por una vez, honestamente desearía poder votar a favor en una respuesta. Me ha dado un consejo muy constructivo, en lugar de solo un consejo aquí y allá. (El "] " fue solo un error tipográfico, pero gracias por señalarlo) También me gusta el comentario booleano, que guardará un unos pocos bytes extra. Ahora investigaré " const " para ver qué hace exactamente … Una vez más, sinceramente estoy muy agradecido por sus comentarios en profundidad

Deja una respuesta

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