Ez az első manuálisan beírt kódom. “Biztos vagyok benne, hogy van néhány kirívó” iskolás hiba “benne, ezért arra gondoltam, hogy az emberek megadhatják-e neki az” egyszeri “-t. Különösen soha nem használtam C ++ tömböket, bináris adatokat tároltam belül, majd megpróbáltam biteket olvasni bitenként. Perl-ben sokkal könnyebb; egyszerűen használjon egy többdimenziós ilyesmit:
@code1=("10101010", "01010101"); $bit=$code1[0][0] (..through to..) code1[0][7] $bit=$code1[1][0] ... code1[1][7]
Tehát ez az én Arduino kódom. Üdvözöljük a javaslatokban .
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); } } }
Éppen módosítottad a felosztást, mivel a megvalósult bit7 a bal szélső számjegy. A felosztásban 2-et adok az értékhez. Ezt be kell zárni zárójelben, azaz (split + 2)?
Megjegyzések
- A behúzások zavaróak. Nyomja meg a Ctrl + T
- Amikor I írd be a kódomat a szövegszerkesztőbe, a tab billentyűvel behúzom a kódot, hogy a " " zárójelek stb. ugyanabban az oszlopban (amely úgy tűnik, hogy az asztali böngészőmben megfelelően néz ki – talán a telefonon helytelen), ezért a CRTL + t uture postázáskor. (Tudom, hogy a CODE1 nem ' nem követi ugyanazt a konvenciót, de aztán megpróbálok nyitva / bezárni ugyanazon a vonalon, így nem ' t ' befut ' a következő tömbbe, szem előtt tartva, hogy 14 ilyen tömböm lesz) Ez nem ' t ' csúnya ' jelentette neked, mivel nagyra értékelem, hogy időt szántál hasznosnak, csak megmutattad személyes ' elnevezési szokásom '
- A Ctrl-T csak egy gyors módja a kód helyes behúzásának bármi is legyen az IDE ' alapértelmezett stílusa. Nem kell azonban ' használni. Bármely kívánt behúzási stílust használhat, ha kézzel kezeli. Alternatív megoldásként beállíthatja az IDE-t a kedvenc stílusához . Csak győződjön meg róla, hogy elfogad egy behúzási stílust, és következetesen alkalmazza azt.
Válasz
Csak két hiba van észreveheti a programjában:
-
A kódblokkot göndör zárójelekkel kell elválasztani:
for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’
-
Ha egy függvény argumentumok átadására számít, ezeket paraméterként kell deklarálni a függvény prototípusában:
void ledDisplay(byte x){ // ← mind the “byte x” // ... }
Ettől eltekintve, itt néhány javaslat a kód kinézetéhez szebb és remélhetőleg karbantarthatóbb:
- következetes behúzás
- az
const
használata az állandók minősítésére - használat megnevezett konstansok mágikus számok helyett
- a változókat lehetőség szerint tartsák helyi szinten
- vegye figyelembe, hogy egy 0 vagy 1 int megegyezik egy logikai értékkel id = “44149e89fd”>
a csapok eléréséhez
Jelentkezés Ezen javaslatok alapján a következőket kapom:
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); } } }
Megjegyzések
- Egyszerre őszintén azt kívánom, bárcsak képesek lennék feleletet adni a válaszra. Nagyon építő tanácsokat adtál nekem, nem csak itt-ott mutatót. (A "] " csak elírás volt, de köszönöm, hogy rámutattál) Tetszik a logikai megjegyzés is, amely ment extra néhány bájt. Most megvizsgálom a következőt: " const ", hogy lássam, mit csinál ez pontosan … Ismételten őszintén szólva nagyon hálás vagyok mélységes visszajelzéséért / li>