The Circuit Maker
Arduino8 min पढ़ने का समय

Arduino में Array की Length कैसे निकालें

Learn how to find the length or number of elements of an array in Arduino using sizeof() with code examples and explanations.

·

Arduino में upload करने वाले code के हिस्से के रूप में arrays का उपयोग करना आम बात है। कई बार ऐसा होता है कि आपने array declare किया है बिना explicitly उसका size define किए, बल्कि array को तुरंत populate कर दिया है जैसे निम्नलिखित example में:

int digitalPins[] = {2, 3, 4, 5, 6};

आपके code में किसी point पर, आप array के हर element के लिए logic run करना चाहते हैं। इसलिए, आप for loop का उपयोग करने के बारे में सोचते हैं। Array के हर element पर iterate करने के लिए loop का उपयोग करने का मतलब है कि हमें array के total elements की संख्या जानना चाहिए, जैसे निम्नलिखित example में:

for (int i = 0; i < totalDigitalPins; i++) {
    // digitalPins[i] पर logic apply करें
  }

आप totalDigitalPins की value पाने के लिए array के elements की संख्या को dynamically determine करना चाहते हैं। Arduino documentation में आपको सबसे पहले sizeOf() utility function का उपयोग करना मिलता है बिना पूरी तरह समझे कि वह वास्तव में क्या करता है।

int digitalPins[] = {2, 3, 4, 5, 6};
int totalDigitalPins = sizeOf(digitalPins);

for (int i = 0; i < totalDigitalPins; i++) {
    // digitalPins[i] पर logic apply करें
}

दुर्भाग्य से, आप जल्दी महसूस करते हैं कि sizeOf utility function का उपयोग वास्तव में array के elements की संख्या नहीं देता।

इस article में, मैं detail में explain करूंगा कि array के elements की संख्या कैसे निकालें, बताऊंगा कि क्यों array की length पाने के लिए कोई built-in function नहीं है, कुछ recommendations share करूंगा और साथ ही अपना experience share करूंगा कि मुझे array का size dynamically पाने की जरूरत क्यों पड़ी।

Arduino में array के elements की संख्या कैसे निकालें?

Arduino code C++ में लिखा जाता है, और C++ में array के elements की संख्या पाने का formula यह है कि array का size bytes में लें और उसे array के एक single element के size से divide करें।

array का size bytes में / array के single element का size

Array में elements की संख्या निकालने का Formula

हमारे initial example में, हमने digitalPins नाम का array declare किया था। इसलिए, यदि हम totalDigitalPins की value पाने के लिए इस formula को apply करें, तो code इस तरह होगा:

int digitalPins[] = {2, 3, 4, 5, 6};
int totalDigitalPins = sizeOf(digitalPins) / sizeOf(digitalPins[0]);

for (int i = 0; i < totalDigitalPins; i++) {
    // digitalPins[i] पर logic apply करें
}

इस तरह, हम for loop का उपयोग करते समय array के हर element पर iterate कर सकते हैं।

व्याख्या

Arduino में, हम sizeOf function का उपयोग करके determine कर सकते हैं कि जब भी हम data type का उपयोग करके कोई variable declare करते हैं तो memory में कितने bytes का उपयोग होता है।

bool bo;
boolean boo;
byte byt;
char cha;
double doubl;
float floa;
int in;
long lon;
short shor;
size_t size_;

void setup() {
  Serial.begin(9600);

  Serial.println("bool Data Type के कुल BYTES");
  Serial.println(sizeof(bo));

  Serial.println("boolean Data Type के कुल BYTES");
  Serial.println(sizeof(boo));

  Serial.println("byte Data Type के कुल BYTES");
  Serial.println(sizeof(byt));

  Serial.println("char Data Type के कुल BYTES");
  Serial.println(sizeof(cha));

  Serial.println("double Data Type के कुल BYTES");
  Serial.println(sizeof(doubl));

  Serial.println("float Data Type के कुल BYTES");
  Serial.println(sizeof(floa));

  Serial.println("int Data Type के कुल BYTES");
  Serial.println(sizeof(in));

  Serial.println("long Data Type के कुल BYTES");
  Serial.println(sizeof(lon));

  Serial.println("short Data Type के कुल BYTES");
  Serial.println(sizeof(shor));

  Serial.println("size_t Data Type के कुल BYTES");
  Serial.println(sizeof(size_));
}

यदि आप Serial Monitor open करके Serial.println() function का उपयोग करके logs read करते हुए Arduino में पिछला logic run करें, तो आप जल्दी समझ जाएंगे कि ये data types memory में कितनी जगह occupy करते हैं। उदाहरण के लिए, bool, boolean, byte, और char data types एक byte use करते हैं, जबकि double, float, और long data types Arduino UNO R3 में 4 bytes use करते हैं।

Arduino में विभिन्न data types के bytes में size का output
Arduino में विभिन्न data types के bytes में size का output

इसी तरह, हम array के साथ भी यह कर सकते हैं।

int digitalPins[] = {2, 3, 4, 5, 6};

void setup() {
  Serial.begin(9600);

  Serial.println("digitalPins array के कुल BYTES");
  Serial.println(sizeof(digitalPins));
}

इस case में, array के अंदर 5 elements के साथ digitalPins में उपयोग होने वाले bytes 10 हैं।

int array के bytes में size को log करना
int array के bytes में size को log करना

यदि आप और elements add करें या remove करें, तो इस array में occupied bytes vary होंगे। लेकिन यदि हमारे पास same number के elements के साथ दूसरा array है लेकिन different data type के साथ, मान लीजिए char data type। क्या यह digitalPins जितने ही bytes use करेगा?

char letters[] = {'a', 'r', 'd', 'u', 'c'};

void setup() {
  Serial.begin(9600);

  Serial.println("letters array के कुल BYTES");
  Serial.println(sizeof(letters));
}

इस पर निर्भर करता है कि दोनों arrays में कौन से data types use किए गए हैं, answer yes या no हो सकता है। इस case में, answer no है।

char array के bytes में size को log करना
char array के bytes में size को log करना

यह क्यों हो रहा है?

याद रखें, हर data type अलग-अलग संख्या के bytes use कर सकता है। जैसा कि हमने पहले देखा, एक int data type दो bytes use करता है, और एक char data type एक byte use करता है।

Arduino में विभिन्न data types के bytes में size का output
Arduino में विभिन्न data types के bytes में size का output

इसलिए, array में bytes की संख्या calculate करने के लिए, आपको उस array के elements की संख्या को array में use किए गए data type के byte size से multiply करना होगा।

data type का size x array में elements की संख्या

Array का size bytes में

इसलिए, digitalPins के case में, हम जानते हैं कि इसमें 5 elements हैं और इसका data type int है, और int data type 2 bytes use करता है। यदि हम इन दो numbers को multiply करें, तो हमें 10 मिलता है।

digitalPins bytes = 5 x 2 = 10

यदि हम letters array के लिए भी same करें, तो हमें निम्नलिखित calculation मिलता है:

letters bytes = 5 x 1 = 5

हालांकि, हम जानते हैं कि sizeOf पहले से ही किसी भी variable के bytes get करता है, और हमें array के bytes का size calculate करने की जरूरत नहीं होगी।

int digitalPins[] = {2, 3, 4, 5, 6};
char letters[] = {'a', 'r', 'd', 'u', 'c'};

void setup() {
  Serial.begin(9600);

  Serial.println(sizeof(digitalPins));
  Serial.println(sizeof(letters));
}

हालांकि, इस information का उपयोग करके, हम array के elements की संख्या determine कर सकते हैं यदि आप dynamically उस value को पाना चाहते हैं।

char letters[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int totalLetters = sizeOf(letters) / sizeOf(letters[0]);

Arduino में array की length पाने के लिए built-in function क्यों नहीं है?

यदि आप software engineer, software developer, या programmer हैं, तो आपने probably अन्य programming languages जैसे JavaScript, PHP, C#, Java, आदि के साथ काम किया होगा। C/C++ के समान, वे programming languages भी arrays का उपयोग करती हैं।

हालांकि, इन languages में array की length पाने के लिए built-in methods या properties होती हैं। उदाहरण के लिए, Javascript में, array के elements की संख्या पाना इस तरह होगा:

const myArray = [1,2,3,4,5,6,7];
const totalElementsOfArray = myArray.length;

C/C++ में array की length पाने के लिए built-in function क्यों नहीं है?

इसका बहुत कुछ इस बात से संबंध है कि ये दो programming languages उस समय में उपयोग की जाती थीं जब computers में limited resources थे। यदि आप इसके बारे में सोचें, तो Arduino phone या computer जितना powerful नहीं है, और memory storage के मामले में भी इसकी limitations हैं। Built-in functions add करने का मतलब है उस extra space का उपयोग करना जो Arduino में logic लिखने के लिए use किया जा सकता है।

दूसरा अच्छा कारण यह है कि C/C++ में JavaScript जैसी higher-level programming languages के विपरीत, आप array में elements append नहीं कर सकते। इसलिए, यदि आप JavaScript में array create करते हैं बिना declare किए कि array में कितने elements हो सकते हैं, तो आप array में और elements append कर सकते हैं, और array size से constraint नहीं होते। दूसरी ओर, C/C++ में fixed-sized array में और elements add करने का कोई तरीका नहीं है।

सिफारिश

सामान्य सिफारिश यह है कि array declare करने से पहले array का size define करें। इस तरह, आप array के elements की संख्या calculate करने की कोशिश से बच सकते हैं।

int arraySize = 5;
int digitalPins[arraySize] = {2, 3, 4, 5, 6};
char letters[arraySize] = {'a', 'r', 'd', 'u', 'c'};

Use Cases

दूसरे दिन, मैं multiple Arduino pins का उपयोग करके multiple LEDs connect करने के लिए एक simple circuit build करने पर काम कर रहा था। Code में led pins का array define करना और सभी digital pins को OUTPUT mode में configure करने के लिए for loop का उपयोग करना शामिल था ताकि उन Arduino pins से HIGH या LOW signals भेजकर multiple LED lights को on और off किया जा सके। Code यह था:

/*
    Multiple Arduino Pins का उपयोग करके Multiple LEDs Connect करें।
    अधिक guides और tutorials के लिए: https://www.thecircuitmaker.com
*/
// LEDs को turn on करने वाले सभी pin numbers को store करने के लिए array variable set up करें
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int totalPins = sizeof(ledPins) / sizeof(int);
// 1 second delay
int delayTime = 1000;
void setup() {
  // LED pins को OUTPUT mode में behave करने के लिए configure करें ताकि HIGH या LOW signals भेज सकें
  for (int i = 0; i < totalPins; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}
void loop() {
  blinkRandomLED();
}
void blinkAllLeds() {
  for (int i = 0; i < totalPins; i++) {
    // LED को turn on करें
    digitalWrite(ledPins[i], HIGH);
  }
  // 1 second के लिए wait करें
  delay(delayTime);
  for (int i = 0; i < totalPins; i++) {
    // LED को turn off करें
    digitalWrite(ledPins[i], LOW);
  }
  // एक second के लिए wait करें
  delay(delayTime);
}
void blinkOneLEDAtATime() {
  for (int i = 0; i < totalPins; i++) {
    // LED को turn on करें
    digitalWrite(ledPins[i], HIGH);
    // 1 second के लिए wait करें
    delay(delayTime);
    // LED को turn off करें
    digitalWrite(ledPins[i], LOW);
    // एक second के लिए wait करें
    delay(delayTime);
  }
}
void blinkRandomLED() {
  // random pin number select करें
  int randomIndex = random(totalPins);
  int pinSelected = ledPins[randomIndex];
  
  // LED को turn on करें
  digitalWrite(pinSelected, HIGH);
  // 1 second के लिए wait करें
  delay(delayTime);
  // LED को turn off करें
  digitalWrite(pinSelected, LOW);
  // एक second के लिए wait करें
  delay(delayTime);
}

Notice करें कि मैं LEDs को blink करने के लिए logic run करने के लिए totalPins या ledPins के elements की संख्या का उपयोग कैसे कर रहा हूं।

निष्कर्ष

इस article में, आपने सीखा कि C++ में array के elements की संख्या कैसे calculate करें, जो Arduino में उपयोग की जाने वाली programming language है। जबकि array की length calculate करने वाला कोई built-in function नहीं है, हम अभी भी sizeOf का उपयोग करके array के कुल elements की संख्या determine कर सकते हैं। हालांकि, कोई additional calculations से बचने के लिए array के size को variable में define करने की सिफारिश की जाती है।

क्या आपको यह article पसंद आया?

मुझे उम्मीद है कि यह article न केवल helpful था बल्कि educational भी था। यदि आपको यह पसंद आया, तो इस article को उन friends के साथ share करें जो electronics में interested हैं और Arduino का उपयोग करके fun projects करने में enjoy करते हैं।

यदि आपके कोई doubts, questions हैं, या इस tutorial को follow करते समय कोई issues आते हैं, तो नीचे section में comment लिखने में संकोच न करें।

Note करें कि spam को prevent करने के लिए comments moderation के लिए hold किए जाते हैं।