Używanie tablic, danych binarnych i bitRead

To jest mój pierwszy ręcznie wpisany kod. Jestem pewien, że mogą być w nim rażące „błędy szkolne”, więc zastanawiałem się, czy ludzie mogliby dać mu „raz na zawsze”. W szczególności, nigdy nie używałem tablic C ++, przechowując w nich dane binarne, a następnie próbując je odczytać po bicie. W perlu, o wiele łatwiej; po prostu użyłbyś wielowymiarowego czegoś takiego:

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

Więc to jest mój kod Arduino. Witamy w sugestiach .

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

Właśnie zmodyfikowałem podział, ponieważ zrealizowany bit7 jest lewą cyfrą. W przypadku podziału dodaję 2 do wartości. Czy to musi być zawarte w nawiasy, np. (split + 2)?

Komentarze

  • Twoje wcięcia są mylące. Naciśnij Ctrl + T
  • Kiedy ja napisz mój kod w edytorze tekstu, używam klawisza tabulatora do wcięcia kodu, tak aby " dla " nawiasy otwierające / zamykające itp. były w tej samej kolumnie (która wydaje się być wyświetlana poprawnie w mojej przeglądarce na komputerze – może być może niepoprawna na telefonie – więc użyje CRTL + t w f uture podczas wysyłania. (Wiem, że KOD1 nie ' nie przestrzega tej samej konwencji, ale potem staram się pozostawić otwieranie / zamykanie w tej samej linii, więc nie ' t ' wpadnij na ' następną tablicę, pamiętając, że będę mieć 14 takich tablic) To nie jest ' to dla Ciebie ' nieprzyjemne ', ponieważ doceniam, że poświęcasz czas na pomoc, pokazując moja osobista ' konwencja nazewnictwa '
  • Ctrl-T to po prostu szybki sposób na uzyskanie poprawnego wcięcia kodu cokolwiek jest domyślnym stylem IDE '. Jednak nie ' nie musisz go używać. Jeśli robisz to ręcznie, możesz użyć dowolnego stylu wcięć , jaki lubisz. Alternatywnie możesz skonfigurować IDE dla swojego ulubionego stylu . Po prostu upewnij się, że przyjmujesz jeden styl wcięć i stosujesz go konsekwentnie.

Odpowiedź

Są tylko dwa błędy I można znaleźć w twoim programie:

  1. Blok kodu powinien być oddzielony nawiasami klamrowymi:

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. Jeśli funkcja oczekuje, że zostaną przekazane argumenty, należy je zadeklarować jako parametry w prototypie funkcji:

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

Poza tym, oto kilka sugestii dotyczących wyglądu kodu ładniejszy i, miejmy nadzieję, łatwiejszy w utrzymaniu:

  • konsekwentne wcięcie
  • użyj const, aby zakwalifikować stałe
  • użyj nazwane stałe zamiast magicznych liczb
  • jeśli to możliwe, zachowuj zmienne lokalne
  • zwróć uwagę, że wartość typu int równa 0 lub 1 jest równoważna wartości logicznej
  • użyj pinArray[] w celu uzyskania dostępu do pinezek

Zastosuj podczas tych sugestii otrzymuję następujące informacje:

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

Komentarze

  • Choć raz szczerze żałuję, że nie mogę zagłosować za odpowiedzią. Dałeś mi bardzo konstruktywną radę, a nie tylko wskazówkę tu i tam. ("] " to była tylko literówka, ale dziękuję za wskazanie). Również podoba mi się komentarz logiczny, który zapisze dodatkowe kilka bajtów. Zbadam teraz " const ", aby zobaczyć, co to dokładnie robi … Ponownie, jestem bardzo wdzięczny za dogłębną opinię

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *