UTILIZAND matrici, date binare și bitRead

Acesta este primul meu cod tastat manual. Sunt sigur că pot apărea unele „erori școlare” evidente în el, așa că m-am întrebat dacă oamenii ar putea să-i dea „o dată peste”. În special, nu am folosit niciodată matricele C ++, stocând date binare și apoi încercând să le citesc bit pe bit. În perl, mult mai ușor; ați folosi pur și simplu un astfel de lucru multidimensional:

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

Deci acesta este codul meu Arduino. Bine ați venit la sugestii .

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

Tocmai am modificat divizarea, deoarece bit7 realizat este cea mai stângă cifră. În divizare, adaug 2 la valoare. Trebuie să fie inclus în paranteze, adică (split + 2)?

Comentarii

  • Indentele dvs. sunt confuze. Apăsați Ctrl + T
  • Când I scrieți codul în editorul de text, folosesc tasta tab pentru a indenta codul, astfel încât " pentru " paranteze de deschidere / închidere etc. în aceeași coloană, (care pare să se afișeze corect în browserul meu de pe desktop – poate poate incorect pe telefon – așa că va folosi CRTL + t în f uture la postare. (Știu că CODE1 nu ' nu respectă aceeași convenție, dar apoi încerc să păstrez deschiderea / închiderea pe aceeași linie, așa că nu ' t ' rulează în ' următoarea matrice, având în vedere că voi avea 14 astfel de matrice) Aceasta nu este ' este menit să fie ' urât ' pentru tine, așa că apreciez că ți-ai luat timpul pentru a fi de ajutor, arătând doar ' convenția mea personală de numire '
  • Ctrl-T este doar o modalitate rapidă de a obține codul corect indentat în oricare ar fi stilul implicit al IDE '. ' nu trebuie să-l folosiți. Puteți utiliza orice stil de indentare doriți dacă îl gestionați manual. Alternativ, puteți configura IDE pentru stilul dvs. preferat . Asigurați-vă că adoptați un stil de liniuță și îl aplicați în mod consecvent.

Răspuns

Există doar două erori I poate localiza în programul dvs.:

  1. Un bloc de cod ar trebui delimitat de acolade:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Dacă o funcție așteaptă să fie transmise argumente, acestea ar trebui declarate ca parametri în prototipul funcției:

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

În afară de asta, aici câteva sugestii pentru a face codul să arate mai frumos și, sperăm, mai ușor de întreținut:

  • indentare constantă
  • utilizați const pentru a califica constantele
  • utilizați constante numite în loc de numere magice
  • păstrează variabilele locale dacă este posibil
  • rețineți că un int care este fie 0, fie 1 este echivalent cu un boolean
  • utilizați pinArray[] pentru accesarea pinilor

Aplicare În urma acestor sugestii, primesc următoarele:

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

Comentarii

  • Pentru o dată, sincer îmi doresc să am capacitatea de a susține un răspuns. Mi-ați dat sfaturi foarte constructive, mai degrabă decât doar un indicator aici și acolo. ("] " a fost doar o greșeală de tipar, dar mulțumesc că l-ați subliniat) și mie îmi place comentariul boolean, care va salva un puțini octeți în plus. Acum voi cerceta " const " pentru a vedea exact ce face asta … Din nou, sincer sunt foarte recunoscător pentru feedback-ul tău profund

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *