আরডুইনোতে এক সময় কার্যকর করার জন্য কোড


12

প্রশ্ন: আমি চাই যে কোডটি আমি আরডুইনো স্টার্টআপের জন্য একবার একবার কার্যকর করতে চাই?

পটভূমি: আমি আমার আরডুইনোগুলিকে বিদ্যুৎ চক্র প্রতি একবার সম্পাদন করা উচিত এমন কার্য সম্পাদন করতে ব্যবহার করি। (উদাহরণস্বরূপ, আমার রোবটটি প্রতিবার একবার চালু করলেই কেবল সামনে চালানো উচিত - এর চেয়ে আরও বেশি, এবং এটি টেবিল থেকে পড়ে যেতে পারে))

স্ট্যান্ডার্ড আরডুইনো আইডিই "টেম্পলেট" এ loop()এবং একটি setup()ফাংশন নিয়ে থাকে। setupকোড ক্ষমতা চক্র প্রতি একবার চালানো হয়, এবং loopপ্রত্যেক সময় এটা শেষ পুনরায় শুরু হয়।

আমি "1 সময় কাজগুলি:" কোডের দুটি পদ্ধতির মুখ দেখছি

পদ্ধতি 1: "একবার লুপ"

void setup() {
  //do setup stuff
}

void loop() {
  //do task

  while(1) ; //Repeat forever, preventing function from re-starting
}

পদ্ধতি 2: "কেবল সেটআপ করুন"

void setup() {
  //do setup stuff

  //do task
}

void loop() {
  //do nothing
}

প্রশ্নের আরও বিশদ রূপ: এই পদ্ধতিগুলির মধ্যে একটিটি কি একটি হার্ডওয়্যার / সফ্টওয়্যার অর্থে "ভাল"? (যেমন setupফাংশন সম্পর্কে কিছু "বিশেষ" আছে , যেমন এটি কেবলমাত্র এতক্ষণ চলতে পারে?)
এবং, তারা যদি হার্ডওয়্যার / সফ্টওয়্যার দৃষ্টিকোণ থেকে একই হয়, তবে সেখানে কোনও "সেরা অনুশীলন" বা লেখার মানক পদ্ধতি রয়েছে? আরডুইনো সম্প্রদায়ের এই পরিস্থিতিতে?


exitকমান্ডের কিছু ব্যবহার আলোচনা করা হয়েছে arduino.stackexchange.com/questions/188/…
TheDoctor

উত্তর:


13

আমি আপনার প্রশ্ন দ্বারা বিভ্রান্ত এক ধরনের। আপনি একবার-স্টার্টআপ সেটআপ ফাংশনগুলি কোথায় রাখতে চান তা জিজ্ঞাসা করুন এবং তারপরে সেটআপ ফাংশনটি নিয়ে আলোচনা করুন। সেটআপ ফাংশনটি এটাই।

যেমন, ওয়ান-টাইম সেটআপ কার্যকারিতা সেটআপ ফাংশনে যায়।

এফডব্লিউআইডাব্লু, আপনি যদি সেই ফাইলটি দেখেন যা কলsetup এবং loopফাংশনগুলিকে কল করে :

#include <Arduino.h>

int main(void)
{
    init();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();
    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }
    return 0;
}

সমস্ত অভিপ্রায় এবং উদ্দেশ্যে, দুটি বিকল্প সম্পূর্ণ একরকম are যে কোনও উপায়ে, আপনি একটি খালি ব্যস্ত-অপেক্ষা লুপ পাবেন। সত্যই, আমি দুটি ভিন্ন বিকল্প সম্ভবত একই মেশিন কোড নির্গত করতে আশা করব, সুতরাং পুরো জিনিসটি একটি নন-ইস্যু।

দ্রষ্টব্য:
if (serialEventRun) serialEventRun();আপনাকে এমন একটি ফাংশন সংযুক্ত করার অনুমতি দেওয়ার একটি সুবিধা বলে মনে হচ্ছে যা সিরিয়াল তথ্য গ্রহণের জন্য বলা হয়, তবে আপনি যদি আপনার কোডটিতে কোনও ফাংশন সংজ্ঞায়িত না করেন তবে void serialEvent(){}এটি সম্পূর্ণরূপে সংকলন করবে এবং উত্পাদিত মেশিন কোডে উপস্থিত থাকবে না।


এমন উত্তর গ্রহণ করা অদ্ভুত মনে হয় যা সর্বোচ্চ ভোট-প্রাপ্ত নয় (এখনও)। তবে, main()ফাংশন সংজ্ঞাটি আমার প্রশ্নের পক্ষে সত্যই সহায়ক ছিল। (এবং, আপনি এর setupপরিবর্তে ব্যবহার করে গ্রুপের সাথে indicateকমত্যের ইঙ্গিত দিচ্ছেন loop)। আপনার সাহায্যের জন্য ধন্যবাদ।
অ্যাপনোরটন

1
@ অ্যান্টারটন - সন্দেহ হলে, কভারগুলির নীচে দেখুন। আমি প্রোটোটাইপিংয়ের জন্য আরডুইনো প্ল্যাটফর্মটিকে সুবিধাজনক মনে করি তবে এটি মূলত কেবল বয়লারপ্লেট কোড। এটি কী করছে তা বোঝা কীভাবে কোনও কিছু স্থপতি করার সিদ্ধান্ত নেওয়ার ক্ষেত্রে মারাত্মক সহায়ক হতে পারে।
কনার ওল্ফ

6

আমি সাধারণত 2 পদ্ধতিটি নিয়ে যাই, তবে এটি শেষ করে:

void setup() {
  //do setup stuff

  //do task
  init(); //Do start-up initialization steps
}

void init() {
  // do tasks on startup
}

void loop() {
  //do looping code
}

উপরের সেটআপের সাথে এটি আমার কোডটিকে আরও সুসংহত করার অনুমতি দেয়।


এখন পর্যন্ত সেরা উত্তর +1, ধন্যবাদ বন্ধু আপনি আমাকে বাঁচিয়েছেন!
কাইল


3

সেটআপ ফাংশনে কোনও সময়সীমা নেই। আমি পদ্ধতি 2 পছন্দ করি কারণ লুপটি আপনার পরে যা প্রয়োজন তা পূরণ করা যায়।


1

অবশ্যই দুটি পদ্ধতি নিয়ে যান। সেটআপ ফাংশনটি এখানেই রয়েছে। এটি পড়াও অনেক সহজ। loop()বোঝা যাচ্ছে যে কোনও কিছু এটি লুপে চালানো হবে।


0

অন্যান্য উত্তর হিসাবে, আমি পদ্ধতি 2 যেতে হবে।

তবে আমি আড়ডিনো লাইব্রেরির দ্বারা কলটি এড়াতে চেষ্টা করব loop()যে কোনও শূন্যপদে এটিমেল কোনও কিছুর জন্য "প্রচুর" স্রোত গ্রহণ করে।

সম্পাদনা:

হিসাবে কিছু মন্তব্য যদিও নির্দিষ্ট ব্যবহার delay()মধ্যে loop()শক্তি খরচ কিছুই পরিবর্তন করতে হবে।

অতএব, আপনি setup()চালানোর পরে আপনি যদি বিদ্যুতের খরচ হ্রাস করতে চান তবে আপনাকে আট্মেল স্লিপ মোডের সাথে খেলতে হবে। আপনি এই নিবন্ধটি একবার দেখে নিতে পারেন যা দেখায় যে কীভাবে আপনার আরডুইনো স্কেচগুলি থেকে ঘুমের পদ্ধতিগুলি মোকাবেলা করতে হবে; এটি কেবল আতলে ঘুমানোর চেয়ে বেশি কিছু করে তবে আপনি ঘুমের মোডের সাথে খেলতে চাইলে এটি একটি ভাল (এবং সাধারণ) পড়া।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.