배열, 바이너리 데이터 및 bitRead 사용

이것은 제가 처음으로 수동으로 입력 한 코드입니다. 눈에 띄는 “schoolboy 오류”가있을 수 있으므로 사람들이 “한 번만 반복”할 수 있는지 궁금했습니다. 특히 C ++ 배열을 사용하여 바이너리 데이터를 저장 한 다음 비트를 읽으려고 시도한 적이 없습니다. Perl에서는 훨씬 더 쉽습니다. 다음과 같은 다차원적인 것을 사용하면됩니다.

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

그래서 이것은 제 Arduino 코드입니다. 제안에 오신 것을 환영합니다. .

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

비트 7이 가장 왼쪽의 숫자임을 깨달았 기 때문에 분할을 수정했습니다. 분할에서는 값에 2를 더합니다.이 값을 묶어야합니까? 대괄호, 즉 (split + 2)?

댓글

  • 들여 쓰기가 혼란 스럽습니다. Ctrl + T를 누르세요.
  • 텍스트 편집기에서 코드를 작성하고 탭 키를 사용하여 코드를 들여 쓰면 " "여 / 닫는 대괄호 등이 같은 열에서 (데스크톱 브라우저에서 올바르게 보이는 것처럼 보임-아마도 전화에서는 올바르지 않을 수 있습니다. 따라서 f에서 CRTL + t를 사용합니다. 게시 할 때. (CODE1이 ' 동일한 규칙을 따르지 않는다는 것을 알고 있지만 동일한 행에서 열기 / 닫기를 유지하려고합니다. ' t ' 다음 배열로 실행 ' 14 개의 배열이있을 것임을 염두에 두십시오.) 이것은 ' 불쾌한 '가 아닙니다. 시간을내어 도움을 주셔서 감사합니다. 내 개인 ' 이름 지정 규칙 '
  • Ctrl-T는 코드를 올바르게 들여 쓰는 빠른 방법입니다. IDE '의 기본 스타일은 무엇입니까? 하지만 ' 사용할 필요는 없습니다. 수동으로 처리하는 경우 원하는 들여 쓰기 스타일 을 사용할 수 있습니다. 또는 원하는 스타일에 맞게 IDE를 구성 할 수 있습니다. 하나의 들여 쓰기 스타일을 채택하고 일관성있게 적용해야합니다.

답변

오류가 두 개뿐입니다. 프로그램에서 찾을 수 있음 :

  1. 코드 블록은 중괄호로 구분해야합니다.

     for (count=0; count<8; count++){ pinMode(pinArray[count],OUTPUT); } // ← ‘}’ instead of ‘]’  
  2. 함수에 인수가 전달 될 것으로 예상하는 경우 함수 프로토 타입에서 매개 변수로 선언해야합니다.

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

그 외에 코드를보기위한 몇 가지 제안 사항이 있습니다. 더 멋지고 유지 관리가 더 용이합니다.

  • 일관되게 들여 쓰기
  • 상수를 한정하려면 const 사용
  • 사용 매직 넘버 대신 명명 된 상수
  • 가능한 경우 변수를 로컬로 유지
  • 0 또는 1 인 정수는 부울과 동일합니다.

핀 액세스 용

적용 이러한 제안에 따라 다음과 같은 내용이 표시됩니다.

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

댓글

  • 한 번은 답변에 찬성 할 수있는 권한이 있었으면합니다. 당신은 여기저기서 단순한 지침이 아니라 매우 건설적인 조언을 해주셨습니다. ("] "는 오타 였지만 지적 해주셔서 감사합니다.) 부울 주석도 마음에 듭니다. 여분의 몇 바이트. 이제 " const "를 조사하여 정확히 무엇을하는지 살펴볼 것입니다 … 다시 말씀 드리지만, 깊이있는 피드백에 대해 진심으로 감사드립니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다