Gebruikmakend van arrays, binaire data en bitRead

Dit is mijn eerste handmatig getypte code. Ik weet zeker dat er enkele flagrante schooljongenfouten in zitten, dus vroeg ik me af of mensen het de once-over zouden kunnen geven. In het bijzonder heb ik nog nooit C ++ arrays gebruikt, binaire gegevens erin opgeslagen en vervolgens geprobeerd ze bit te lezen Bij beetje. In perl, veel gemakkelijker; je zou gewoon een multidimensionaal iets als dit gebruiken:

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

Dus dit is mijn Arduino-code. Welkom bij suggesties .

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

Heb zojuist de splitsing gewijzigd omdat gerealiseerd bit7 het meest linkse cijfer is. In splitsen voeg ik 2 toe aan de waarde. Moet dit worden ingesloten in haakjes, dwz (split + 2)?

Reacties

  • Uw inspringingen zijn verwarrend. Druk op Ctrl + T
  • Wanneer ik schrijf mijn code in de teksteditor, ik gebruik de tab-toets om de code te laten inspringen, zodat de " voor " haakjes openen / sluiten enz. zijn in dezelfde kolom (die correct lijkt te worden weergegeven in mijn desktopbrowser – misschien onjuist op de telefoon – dus zal CRTL + t worden gebruikt in f uture bij het plaatsen. (Ik weet dat CODE1 niet ' dezelfde conventie volgt, maar dan probeer ik open / dicht op dezelfde regel te houden, zodat ' t ' ' de volgende array tegenkomen, rekening houdend met het feit dat ik 14 van dergelijke arrays zal hebben) Dit is niet ' t bedoeld om ' smerig ' voor jou te zijn, aangezien ik het op prijs stel dat je de tijd neemt om behulpzaam te zijn, alleen maar te laten zien mijn persoonlijke ' naamgevingsconventie '
  • Ctrl-T is slechts een snelle manier om de code correct te laten inspringen wat dan ook de IDE ' s standaardstijl is. U hoeft het echter niet ' te gebruiken. U kunt elke gewenste inspringingsstijl gebruiken als u deze handmatig afhandelt. Als alternatief kunt u de IDE configureren voor uw favoriete stijl . Zorg ervoor dat u één inspringingsstijl aanneemt en deze consequent toepast.

Answer

Er zijn slechts twee fouten I kunt u in uw programma vinden:

  1. Een codeblok moet worden gescheiden door accolades:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Als een functie verwacht dat argumenten worden doorgegeven, moeten deze als parameters worden gedeclareerd in het functie-prototype:

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

Anders dan dat, hier een paar suggesties om de code eruit te laten zien leuker en hopelijk beter te onderhouden:

  • consistent inspringen
  • gebruik const om constanten te kwalificeren
  • gebruik benoemde constanten in plaats van magische getallen
  • houd variabelen indien mogelijk lokaal
  • merk op dat een int die ofwel 0 of 1 is, equivalent is aan een boolean
  • gebruik pinArray[] voor toegang tot de pinnen

Toepassen als ik die suggesties krijg, krijg ik het volgende:

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

Reacties

  • Voor een keer zou ik echt willen dat ik de mogelijkheid had om een antwoord upvote. Je hebt me heel constructief advies gegeven, in plaats van hier en daar een aanwijzer. (De "] " was slechts een typefout, maar bedankt dat je erop wijst) Ik vind ook de booleaanse opmerking leuk, die een extra paar bytes. Ik zal nu " const " onderzoeken om te zien wat dat precies doet … Nogmaals, ik ben oprecht zeer dankbaar voor uw diepgaande feedback

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *