const int led = 13;
यह सही तरीका है। या और भी:
const byte led = 13;
आपके पास कितने पिन हैं?
कुछ ट्यूटोरियल काफी गुणवत्ता नियंत्रण के माध्यम से नहीं गए थे, क्योंकि वे हो सकते हैं।
प्रदर्शन बेहतर होगा const byte
, तुलना करें, int
हालांकि कंपाइलर स्मार्ट हो सकता है यह महसूस करने के लिए कि आप क्या कर रहे हैं।
आप जो कर सकते हैं, वह लोगों को अपने कोड में उपयोग करके अधिक कुशल तकनीकों का उपयोग करने के लिए धीरे से प्रोत्साहित करना है।
टिप्पणियों के लिए प्रतिक्रियाएँ
एक टिप्पणीकार ने सुझाव दिया है कि byte
मानक सी नहीं है। यह सही है, हालांकि यह एक Arduino StackExchange साइट है, और मेरा मानना है कि Arduino IDE द्वारा आपूर्ति किए गए मानक प्रकारों का उपयोग स्वीकार्य है।
Arduino.h में यह रेखा है:
typedef uint8_t byte;
ध्यान दें कि यह बिल्कुल वैसा नहीं है जैसा कि है unsigned char
। देखें बनाम अहस्ताक्षरित चार uint8_t और जब uint8_t ≠ अहस्ताक्षरित चार है? ।
एक अन्य टिप्पणीकार ने सुझाव दिया है कि बाइट का उपयोग करने से प्रदर्शन में सुधार जरूरी नहीं होगा, क्योंकि इससे छोटी संख्या int
को बढ़ावा दिया जाएगा int
(यदि आप इस पर अधिक चाहते हैं तो इंटीगर प्रमोशन रूल्स देखें)।
हालांकि एक कास्ट आइडेंटिफ़ायर के संदर्भ में , कंपाइलर किसी भी मामले में कुशल कोड उत्पन्न करेगा। उदाहरण के लिए, "ब्लिंक" को अलग करने से यह मूल रूप में मिलता है:
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
कंपाइलर जानता है कि यह एक नंबर को एक रजिस्टर में कब फिट कर सकता है और कब नहीं। हालांकि यह कोडिंग का उपयोग करने के लिए अच्छा अभ्यास है जो आपके इरादे को इंगित करता है । इसे बनाने const
से यह स्पष्ट होता है कि संख्या नहीं बदलेगी, और इसे बनाने byte
(या uint8_t
) यह स्पष्ट करता है कि आप एक छोटी संख्या की उम्मीद कर रहे हैं।
भ्रामक त्रुटि संदेश
#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);
}
सतह पर यह ठीक दिखता है, लेकिन यह इन त्रुटि संदेशों को उत्पन्न करता है:
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 रेखाएं और नीचे हो जाती हैं, तो यह स्पष्ट नहीं है कि समस्या एलईडी के परिभाषित होने के तरीके के साथ है।
मैंने लोगों को कई बार इसके लिए (अपने सहित) गिरते देखा है।