Dette er min første manuelt indtastede kode. Jeg er sikker på, at der kan være nogle skarpe “skoledrengfejl” i det, så spekulerede på, om folk kunne give det “en gang over” Især har jeg aldrig brugt C ++ – arrays, gemt binære data inden i og derefter forsøgt at læse dem bit bit per bit. I perl meget lettere; du vil simpelthen bruge en flerdimensionel sådan noget:
@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 lige ændret split, da realiseret bit7 er cifferet til venstre. I split tilføjer jeg 2 til værdien. Skal dette være indeholdt i parenteser, dvs. (split + 2)?
Kommentarer
- Dine indrykninger er forvirrende. Tryk på Ctrl + T
- Når jeg skriv min kode i teksteditor, jeg bruger tabulatortasten til at indrykke kode, så " til " åbnings- / lukningsbeslag osv. i samme kolonne (som ser ud til at se korrekt i min desktopbrowser – måske måske forkert på telefonen – så bruger CRTL + t i f uure, når du sender. (Jeg ved, at CODE1 ikke følger ', men så prøver jeg at holde åbent / lukke på samme linje, så det ikke ' t ' løb ind i ' den næste matrix under hensyntagen til, at jeg vil have 14 sådanne arrays) Dette er ikke ' t menes at være ' grim ' for dig, da jeg sætter pris på at du tog dig tid til at være hjælpsom, bare vise min personlige ' navngivningskonvention '
- Ctrl-T er bare en hurtig måde at få koden korrekt indrykket i uanset hvad der er IDE ' s standardstil. Du behøver dog ikke bruge '. Du kan bruge den indrykningsstil , du vil, hvis du håndterer det manuelt. Alternativt kan du konfigurere IDE til din yndlingsstil . Bare sørg for at anvende en indrykningsstil og anvende den konsekvent.
Svar
Der er kun to fejl I kan få øje på dit program:
-
En blok kode skal afgrænses af krøllede seler:
for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’
-
Hvis en funktion forventer at blive sendt argumenter, skal disse erklæres som parametre i funktionsprototypen:
void ledDisplay(byte x){ // ← mind the “byte x” // ... }
Bortset fra det, her et par forslag til at få koden til at se ud pænere og forhåbentlig mere vedligeholdelig:
- indrykning konsekvent
- brug
const
til at kvalificere konstanter - brug navngivne konstanter i stedet for magiske tal
- holder variablerne lokale, hvis det er muligt
- bemærk, at en int, der enten er 0 eller 1, svarer til en boolsk
- brug
pinArray[]
for at få adgang til stifterne
Anvend på disse forslag 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 ville jeg ærligt ønske, at jeg havde evnen til at opstemme et svar. Du har givet mig meget konstruktive råd, snarere end blot en markør her og der. ("] " var bare en tastefejl, men tak fordi du påpegede det) Jeg kan også godt lide den boolske kommentar, som vil gemme en ekstra få byte. Jeg skal nu undersøge " const " for at se, hvad det gør nøjagtigt … Igen, jeg er ærlig talt meget taknemmelig for din dybe feedback