Usando matrizes, dados binários e bitRead

Este é meu primeiro código digitado manualmente. Tenho certeza de que pode haver alguns “erros de estudante” gritantes nele, então me pergunto se as pessoas poderiam dar uma “olhada”. Em particular, nunca usei matrizes C ++, armazenando dados binários e tentando lê-los um pouco aos bits. Em perl, muito mais fácil; você simplesmente usaria algo multidimensional como este:

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

Portanto, este é o meu código do Arduino. Bem-vindo às sugestões .

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

Acabei de modificar a divisão, pois o bit7 realizado é o dígito mais à esquerda. Na divisão, estou adicionando 2 ao valor. Isso precisa ser colocado entre colchetes, isto é (dividir + 2)?

Comentários

  • Seus recuos são confusos. Pressione Ctrl + T
  • Quando eu escrever meu código no editor de texto, eu uso a tecla tab para recuar o código, de modo que os " para " colchetes de abertura / fechamento, etc. sejam na mesma coluna, (que parece ser visualizado corretamente no navegador do meu desktop – talvez incorreto no telefone – então usaremos CRTL + t em f uture ao postar. (Eu sei que o CODE1 não ' segue a mesma convenção, mas tento manter aberto / fechado na mesma linha para que não ' t ' execute ' a próxima matriz, tendo em mente que terei 14 dessas matrizes) Isso é n ' t pretendia ser ' desagradável ' com você, pois aprecio que dedique um tempo para ser útil, apenas mostrando minha ' convenção de nomenclatura '
  • Ctrl-T é apenas uma maneira rápida de obter o recuo correto do código qualquer que seja o estilo padrão do IDE ' s. Você não ' não precisa usá-lo. Você pode usar qualquer estilo de indentação que desejar, se você manuseá-lo manualmente. Como alternativa, você pode configurar o IDE para seu estilo favorito . Apenas certifique-se de adotar um estilo de indentação e aplicá-lo de forma consistente.

Resposta

Existem apenas dois erros I pode detectar em seu programa:

  1. Um bloco de código deve ser delimitado por chaves:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Se uma função espera receber argumentos, eles devem ser declarados como parâmetros no protótipo da função:

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

Fora isso, aqui estão algumas sugestões para fazer o código parecer melhor e, com sorte, mais sustentável:

  • indentação consistente
  • use const para qualificar constantes
  • use constantes nomeadas em vez de números mágicos
  • mantém variáveis locais se possível
  • observe que um int que é 0 ou 1 é equivalente a um booleano
  • use pinArray[] para acessar os pinos

Aplicar Com essas sugestões, recebo o seguinte:

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

Comentários

  • Pela primeira vez, eu sinceramente gostaria de poder votar positivamente em uma resposta. Você me deu um conselho muito construtivo, em vez de apenas uma indicação aqui e ali. (O "] " foi apenas um erro de digitação, mas obrigado por apontá-lo) Eu também gosto do comentário booleano, que salvará um alguns bytes extras. Vou agora pesquisar " const " para ver o que isso faz exatamente … Mais uma vez, honestamente sou muito grato por seus comentários detalhados

Deixe uma resposta

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