Utilizzo di array, dati binari e bitRead

Questo è il mio primo codice digitato manualmente. Sono sicuro che potrebbero esserci degli evidenti “errori da scolaro”, quindi mi chiedevo se le persone potessero dare una “volta finita” In particolare, non ho mai usato array C ++, memorizzando dati binari allinterno, e poi cercando di leggerli un po a poco a poco. In perl, molto più semplice; useresti semplicemente un multi-dimensionale simile a questo:

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

Quindi questo è il mio codice Arduino. Benvenuto ai suggerimenti .

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

Ho appena modificato la divisione perché mi sono reso conto che il bit7 è la cifra più a sinistra. Nella divisione, aggiungo 2 al valore. Deve essere racchiuso tra parentesi quadre, ad esempio (divisione + 2)?

Commenti

  • I tuoi rientri creano confusione. Premi Ctrl + T
  • Quando ho scrivi il mio codice nelleditor di testo, utilizzo il tasto Tab per far rientrare il codice, in modo che le " per " parentesi di apertura / chiusura ecc. nella stessa colonna, (che sembra visualizzare correttamente nel mio browser desktop – forse forse non è corretto sul telefono – quindi userò CRTL + t in f uture durante la pubblicazione. (So che CODE1 non ' segue la stessa convenzione, ma poi cerco di tenere aperto / chiuso sulla stessa riga in modo che non ' t ' incappare in ' il prossimo array, tenendo presente che avrò 14 di questi array) Questo non è ' t significava essere ' brutto ' per te perché apprezzo il tuo tempo per essere utile, solo per mostrare la mia ' convenzione di denominazione '
  • Ctrl-T è solo un modo rapido per ottenere il codice correttamente rientrato qualunque sia lo stile predefinito dellIDE '. Tuttavia, ' non è necessario utilizzarlo. Puoi utilizzare qualsiasi stile di rientro che preferisci se lo gestisci manualmente. In alternativa, puoi configurare lIDE per il tuo stile preferito . Assicurati solo di adottare uno stile di rientro e di applicarlo in modo coerente.

Risposta

Ci sono solo due errori I può individuare nel tuo programma:

  1. Un blocco di codice dovrebbe essere delimitato da parentesi graffe:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Se una funzione prevede che vengano passati argomenti, questi dovrebbero essere dichiarati come parametri nel prototipo della funzione:

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

Oltre a questo, ecco alcuni suggerimenti per far sembrare il codice più bello e, si spera, più gestibile:

  • indenta in modo coerente
  • usa const per qualificare le costanti
  • usa costanti con nome invece di numeri magici
  • mantieni le variabili locali se possibile
  • nota che un int che è 0 o 1 è equivalente a un booleano
  • usa pinArray[] per accedere ai pin

Applica Con questi suggerimenti, ottengo quanto segue:

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

Commenti

  • Per una volta, sinceramente vorrei avere la possibilità di votare una risposta. Mi hai dato consigli molto costruttivi, piuttosto che solo un suggerimento qua e là. (Il "] " era solo un errore di battitura, ma grazie per averlo sottolineato) Mi piace anche il commento booleano, che salverà un pochi byte in più. Ora cercherò " const " per vedere cosa fa esattamente … Di nuovo, sono onestamente molto grato per il tuo feedback approfondito

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *