POUŽITÍ polí, binárních dat a bitRead

Toto je můj první ručně napsaný kód. Jsem si jistý, že v tom mohou být nějaké do očí bijící „školácké chyby“, tak mě zajímalo, jestli by tomu lidé mohli dát „jednou za sebou“. Zejména jsem nikdy nepoužíval pole C ++, ukládal do nich binární data a pak se je snažil číst kousek po kousku. V Perlu mnohem jednodušší; jednoduše byste použili vícerozměrné něco podobného:

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

Takže toto je můj Arduino kód. Vítejte v návrzích .

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

Právě jsem upravil rozdělení, protože si uvědomil, že bit7 je číslice nejvíce vlevo. V rozdělení přidávám k hodnotě 2. Musí to být uzavřeno v závorky, tj. (rozdělit + 2)?

Komentáře

  • Vaše odsazení je matoucí. Stiskněte Ctrl + T
  • Když jsem napište svůj kód do textového editoru, k odsazení kódu používám klávesu tab, takže " pro " otevírací / zavírací závorky atd. jsou ve stejném sloupci ((zdá se, že se v mém prohlížeči na ploše zobrazuje správně – možná v telefonu možná nesprávný – takže použije CRTL + t ve f při zveřejňování příspěvků. (Vím, že CODE1 ' n nedodržuje stejnou konvenci, ale pak se pokusím zachovat otevření / zavření na stejném řádku, takže to ' t ' narazit na ' další pole s ohledem na to, že budu mít 14 takových polí) Toto není ' To pro vás nemělo být ' ošklivé ', protože si vážím toho, že jste si našli čas, abyste byli nápomocní, stačí ukázat moje osobní ' konvence pojmenování '
  • Ctrl-T je jen rychlý způsob, jak kód správně odsadit jakýkoli je výchozí styl IDE '. Nemusíte to však ' používat. Pokud s ním manipulujete ručně, můžete použít jakýkoli styl odsazení , který se vám líbí. Případně můžete nakonfigurovat IDE pro svůj oblíbený styl . Nezapomeňte přijmout jeden styl odsazení a důsledně ho použít.

Odpověď

Existují pouze dvě chyby, může ve vašem programu spatřit:

  1. Blok kódu by měl být ohraničen složenými závorkami:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Pokud funkce očekává předání argumentů, měly by být v prototypu funkce deklarovány jako parametry:

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

Kromě toho zde uvádíme několik návrhů, jak kód vypadat hezčí a snad snadněji udržovatelné:

  • odsazení důsledně
  • použití const ke kvalifikaci konstant
  • použití pojmenované konstanty namísto magických čísel
  • pokud je to možné, udržujte proměnné lokální
  • všimněte si, že int, který je buď 0 nebo 1, je ekvivalentní booleovské
  • použití pinArray[] pro přístup k pinům

Použít Při těchto návrzích dostanu následující:

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

Komentáře

  • Pro jednou si upřímně přeji, abych měl možnost hlasovat pro odpověď. Dal jste mi velmi konstruktivní rady, spíše než jen tu a tam ukazatel. ("] " byl jen překlep, ale děkuji, že jste na něj upozornili) Líbí se mi i booleovský komentář, který uloží pár bytů navíc. Nyní prozkoumám " const ", abych zjistil, co to dělá přesně … Znovu jsem upřímně vděčný za vaši hlubokou zpětnou vazbu

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *