配列、バイナリデータ、bitReadの使用

これは、手動で入力した最初のコードです。そこには明白な「男子生徒のエラー」があるかもしれないので、人々がそれを「もう一度」与えることができるかどうか疑問に思いました。特に、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が左端の桁であることがわかったため、splitを変更しました。splitでは、値に2を追加しています。これはで囲む必要がありますか?ブラケット、つまり(split + 2)?

コメント

  • インデントがわかりにくいです。Ctrl+ Tを押してください
  • テキストエディタでコードを記述し、タブキーを使用してコードをインデントします。これにより、"の開始/終了ブラケットなどの"同じ列にあります(これは私のデスクトップブラウザでは正しく表示されているようです-おそらく電話では正しくありません-したがって、fでCRTL + tを使用します投稿するときのuture。 (CODE1が'同じ規則に従わないことは知っていますが、同じ行で開閉を続けようとしているので、' t '次の配列に遭遇します。14個の配列があることを念頭に置いてください)これは tはあなたにとって'厄介な'であることを意味します。お役に立ててありがとうございます。私の個人的な'命名規則'
  • Ctrl-Tは、コードを正しくインデントするための簡単な方法です。 IDE 'のデフォルトスタイルは何でも。ただし、'使用する必要はありません。手動で処理する場合は、インデントスタイルを自由に使用できます。または、お好みのスタイルに合わせてIDEを構成することもできます。必ず1つのインデントスタイルを採用し、それを一貫して適用してください。

回答

2つのエラーのみがありますIプログラム内で見つけることができます:

  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のintはブール値と同等であることに注意してください
  • use

適用これらの提案を行うと、次のようになります。

 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 "を調べて、正確に何が行われるかを確認します…繰り返しになりますが、詳細なフィードバックに心から感謝しています

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です