ANVÄNDA matriser, binär data och bitRead

Det här är min första manuellt skrivna kod. Jag är säker på att det kan finnas några skarpa ”skolpojkfel” i det, så undrade om folk kunde ge det ”en gång över”. Jag har aldrig använt C ++ – matriser, lagrat binär data i och försökt sedan läsa dem lite för bit. I perl, mycket lättare; du skulle helt enkelt använda ett flerdimensionellt sådant:

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

Så det här är min Arduino-kod. Välkommen till förslag .

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 just modifierat split eftersom realiserad bit7 är siffran längst till vänster. I split lägger jag till 2 till värdet. Behöver detta ingå i parentes, dvs (split + 2)?

Kommentarer

  • Dina indrag är förvirrande. Tryck på Ctrl + T
  • När jag skriv min kod i textredigeraren, jag använder tabbtangenten för att dra in koden så att " för " öppnings- / stängningsfästen etc är i samma kolumn, (som verkar se korrekt i min skrivbordsbläddrare – kanske kanske felaktig på telefonen – så kommer CRTL + t att användas i f uture när du publicerar. (Jag vet att CODE1 ' inte följer samma konvention, men sedan försöker jag hålla öppet / stänga på samma rad så att det inte ' t ' stöter på ' nästa array, med tanke på att jag kommer att ha 14 sådana matriser) Detta är inte ' t menade att vara ' otäck ' för dig eftersom jag uppskattar att du tog dig tid att vara hjälpsam, bara visa min personliga ' namnkonvention '
  • Ctrl-T är bara ett snabbt sätt att få koden korrekt indragen i vad som helst är IDE ' standardstil. Du behöver dock inte '. Du kan använda vilken indragningsstil du vill om du hanterar den manuellt. Alternativt kan du konfigurera IDE för din favoritstil . Se bara till att använda en indragstil och tillämpa den konsekvent.

Svar

Det finns bara två fel jag kan upptäcka i ditt program:

  1. Ett kodblock bör avgränsas med lockiga hakparenteser:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Om en funktion förväntar sig att skickas argument bör dessa deklareras som parametrar i funktionsprototypen:

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

Utöver det, här några förslag för att få koden att se ut trevligare och förhoppningsvis mer underhållbart:

  • indrag konsekvent
  • använd const för att kvalificera konstanter
  • användning namngivna konstanter istället för magiska siffror
  • håll variablerna lokala om möjligt
  • notera att ett int som antingen är 0 eller 1 motsvarar en boolean
  • använd pinArray[] för åtkomst till stiften

Apply ing dessa förslag får jag följande:

 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

  • För en gångs skull önskar jag ärligt att jag har möjlighet att rösta upp ett svar. Du har gett mig mycket konstruktiva råd, snarare än bara en pekare här och där. ("] " var bara ett stavfel, men tack för att du påpekade det) Jag gillar också den booleska kommentaren, som kommer att spara en några extra byte. Jag ska nu undersöka " const " för att se vad det gör exakt … Återigen är jag ärligt tacksam för din djupgående feedback

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *