BRUKE matriser, binær data og bitRead

Dette er min første manuelt skrevet kode. Jeg er sikker på at det kan være noen skarpe «skoleguttfeil» i den, så lurte på om folk kunne gi den «en gang over». Spesielt har jeg aldri brukt C ++ – matriser, lagret binære data i og deretter prøvd å lese dem litt for bit. I perl, mye enklere; du vil ganske enkelt bruke et flerdimensjonalt sånt som dette:

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

Så dette er min Arduino-kode. Velkommen til forslag .

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

Har nettopp modifisert split da realisert bit7 er tallet til venstre. I split legger jeg til 2 til verdien. Må dette legges inn i parentes, dvs. (delt + 2)?

Kommentarer

  • Innrykkene dine er forvirrende. Trykk Ctrl + T
  • Når jeg skriv koden min i tekstredigerer, jeg bruker tabulatortasten til å innrykk kode, slik at " for " åpnings- / lukkeparenteser etc i samme kolonne, (som ser ut til å se riktig ut i datamaskinens nettleser – kanskje kanskje feil på telefonen – så vil bruke CRTL + t i f uture når du legger ut. (Jeg vet at CODE1 ikke følger ', men så prøver jeg å holde åpent / lukke på samme linje slik at det ikke ' t ' løp inn i ' neste array, med tanke på at jeg vil ha 14 slike matriser) Dette er ikke ' t ment å være ' ekkel ' for deg da jeg setter pris på at du tok deg tid til å være nyttig, bare å vise min personlige ' navnekonvensjon '
  • Ctrl-T er bare en rask måte å få koden riktig innrykket i uansett hvilken standard IDE ' er. Du trenger ikke ' det. Du kan bruke hvilken innrykkstil du vil hvis du håndterer den manuelt. Alternativt kan du konfigurere IDE for din favorittstil . Bare vær sikker på at du bruker en innrykkstil og bruker den konsekvent.

Svar

Det er bare to feil jeg kan få øye på i programmet ditt:

  1. En blokk med kode bør avgrenses av krøllete bukseseler:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Hvis en funksjon forventer å bli sendt argumenter, bør disse deklareres som parametere i funksjonsprototypen:

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

Annet enn det, her noen forslag for å få koden til å se ut finere, og forhåpentligvis mer vedlikeholdsrikt:

  • innrykk konsekvent
  • bruk const for å kvalifisere konstanter
  • bruk navngitte konstanter i stedet for magiske tall
  • holder variabler lokale hvis mulig
  • legg merke til at en int som enten er 0 eller 1 tilsvarer en boolsk
  • bruk pinArray[] for å få tilgang til pinnene

Bruk på disse forslagene får jeg følgende:

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

Kommentarer

  • For en gangs skyld skulle jeg ærlig ønske at jeg hadde muligheten til å stemme opp et svar. Du har gitt meg veldig konstruktive råd, i stedet for bare en pekepinn her og der. ("] " var bare en skrivefeil, men takk for at du påpekte det) Jeg liker også den boolske kommentaren, som vil redde en ekstra få byte. Jeg skal nå undersøke " const " for å se hva det gjør akkurat … Igjen, jeg er ærlig talt veldig takknemlig for din dype tilbakemelding

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *