const int led = 13;
それが正しい方法です。あるいは:
const byte led = 13;
ピンはいくつありますか?
一部のチュートリアルでは、品質管理が十分ではありませんでした。
const byte
に比べて、を使用した方がパフォーマンスは向上しますint
が、コンパイラは何をしているのかを認識できるほどスマートです。
あなたができることは、あなた自身のコードでそれらを使用することにより、人々がより効率的なテクニックを使うように優しく奨励することです。
コメントへの回答
コメンターがあることを示唆しているbyte
C.これが正しい標準ではありませんが、これはArduinoのStackExchangeサイトです、と私はArduinoのIDEによって供給される標準タイプを使用することが許容されると考えています。
Arduino.hには次の行があります。
typedef uint8_t byte;
これはとまったく同じではないことに注意してくださいunsigned char
。uint8_t vs unsigned charおよびuint8_t≠unsigned charを参照してください。。
別のコメンターは、バイトを使用してもパフォーマンスが必ずしも向上しないことを示唆しています。これよりも小さい数値int
は昇格するためですint
(これについては、整数昇格規則を参照してください)。
ただし、const識別子のコンテキストでは、コンパイラはどのような場合でも効率的なコードを生成します。たとえば、「点滅」を分解すると、元の形式でこれが得られます。
00000086 <loop>:
86: 8d e0 ldi r24, 0x0D ; 13
88: 61 e0 ldi r22, 0x01 ; 1
8a: 1b d1 rcall .+566 ; 0x2c2 <digitalWrite>
実際、次のいずれの場合でも同じコードが生成されます13
。
- リテラルです
- は
#define
- は
const int
- は
const byte
コンパイラは、いつ1つのレジスタに数値を収めることができ、いつできないかを認識します。しかし、良い練習それはあなたを示しコーディングを使用する意図を。それは作るconst
ことは番号が変更されないことが明らかになり、それを作ることはbyte
(またはuint8_t
)、それはあなたが少数を期待していることが明らかになります。
紛らわしいエラーメッセージ
避けるべきもう1つの主な理由#define
は、間違えた場合に表示されるエラーメッセージです。エラーがあるこの「点滅」スケッチを考えてみましょう。
#define LED = 13;
void setup() {
pinMode(LED, OUTPUT); // <---- line with error
}
void loop() {
digitalWrite(LED, HIGH); // <---- line with error
delay(1000);
digitalWrite(LED, LOW); // <---- line with error
delay(1000);
}
表面上はOKに見えますが、次のエラーメッセージが生成されます。
Blink.ino: In function ‘void setup()’:
Blink:4: error: expected primary-expression before ‘=’ token
Blink:4: error: expected primary-expression before ‘,’ token
Blink:4: error: expected `;' before ‘)’ token
Blink.ino: In function ‘void loop()’:
Blink:8: error: expected primary-expression before ‘=’ token
Blink:8: error: expected primary-expression before ‘,’ token
Blink:8: error: expected `;' before ‘)’ token
Blink:10: error: expected primary-expression before ‘=’ token
Blink:10: error: expected primary-expression before ‘,’ token
Blink:10: error: expected `;' before ‘)’ token
最初に強調表示された行(行4)を見ると、「=」記号さえ表示されていません。さらに、線は正常に見えます。ここで問題が何であるかはかなり明らかです(= 13
に置き換えられていますLED
)が、行がコードのさらに400行下にある場合、問題がLEDの定義方法にあることは明らかではありません。
私はこれまで何度も(自分自身を含む)人が落ちるのを見てきました。