Matriisien, binaaritietojen ja bitRead

-toiminnon käyttö on ensimmäinen manuaalisesti kirjoitettu koodi. ”Olen varma, että siinä voi olla joitain räikeitä” koulupoikavirheitä ”, joten ihmettelin, voisivatko ihmiset antaa sille” kerran ”.Erityisesti en ole koskaan käyttänyt C ++ – taulukoita, tallentanut binääritietoja sisälle ja yrittänyt sitten lukea niitä vähän bitillä. Perlissä paljon helpompaa; sinun tarvitsee yksinkertaisesti käyttää moniulotteista jotain tällaista:

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

Joten tämä on minun Arduino-koodini. Tervetuloa ehdotuksiin .

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

Oletko juuri muuttanut jakoa, koska toteutunut bitti on vasemmanpuoleisin luku. Jaossa lisäämään arvoon 2. Onko tämä liitettävä suluissa, ts. (split + 2)?

Kommentit

  • Sisältösi ovat hämmentäviä. Paina Ctrl + T
  • Kun minä kirjoita koodi tekstieditoriin, käytän sarkainnäppäintä koodin sisennykseen, jotta " " -sulkeissa jne. samassa sarakkeessa (joka näyttää näyttävän oikein työpöydän selaimessani – ehkä ehkä väärin puhelimessa – joten käyttää CRTL + t: tä f uture lähetettäessä. (Tiedän, että CODE1 ei noudata samaa käytäntöä, mutta yritän pitää auki / kiinni samalla rivillä, jotta se ei ' t ' törmää ' seuraavaan ryhmään, pitäen mielessä, että minulla on 14 tällaista taulukkoa) Tämä ei ole ' t tarkoitus olla ' ilkeä ' sinulle, koska arvostan sitä, että viittit aikaa avuksi, vain näytät henkilökohtainen ' nimeämistapa '
  • Ctrl-T on vain nopea tapa saada koodi oikein sisennetty mikä tahansa on IDE ': n oletustyyli. Sinun ei kuitenkaan tarvitse käyttää sitä '. Voit käyttää mitä tahansa haluamaasi sisennystyyliä , jos käsittelet sitä manuaalisesti. Vaihtoehtoisesti voit määrittää IDE: n suosikkityylillesi . Varmista vain, että omistat yhden luetelmakohdan tyylin ja käytät sitä johdonmukaisesti.

Vastaa

Virheitä on vain kaksi voi havaita ohjelmasi:

  1. Koodilohko tulisi rajata kiharoilla aaltosulkeilla:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Jos funktio odottaa saavansa argumentteja, ne on ilmoitettava parametreina funktion prototyypissä:

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

Tämän lisäksi tässä muutama ehdotus koodin näyttämiseksi mukavampi ja toivottavasti ylläpidettävämpi:

  • sisennä johdonmukaisesti
  • käytä const vakioiden määrittämiseen
  • käytä nimettyjä vakioita maagisten numeroiden sijaan
  • pidä muuttujat paikallisena, jos mahdollista
  • huomaa, että int, joka on joko 0 tai 1, vastaa loogista arvoa
  • käytä pinArray[] nastojen käyttämistä varten

Käytä Näiden ehdotusten perusteella saan seuraavan:

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

Kommentit

  • Toivon kerran rehellisesti, että minulla olisi kyky äänestää vastausta. Olet antanut minulle erittäin rakentavia neuvoja sen sijaan, että osoittaisit vain täällä tai siellä. ("] " oli vain kirjoitusvirhe, mutta kiitos huomautuksesta) Pidän myös boolen kommentista, joka tallentaa muutama tavu. Tutkin nyt " const " nähdäksesi, mitä se tarkalleen tekee … Jälleen, olen rehellisesti kiitollinen syvällisestä palautteestasi / li>

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *