Cute, آردوینو arduino, توصیه شده, مقاله

آردوینو خوب، بد، زشت ! همه چیز درباره آردوینو

آردوینو خوب بد زشت

آردوینو ؛ چه کسی است که این سخت افزار متن باز و نرم افزارش رو نشناسه ! جنجالی که آردوینو تو الکترونیک پیش آورده به نظرم کم از انقلاب صنعتی نبوده است ! اول قرار بود این نوشته یاداشتی باشد در کانال تلگرام ولی فکر کردم بهتره یکم با جزییات بیشتری به مساله و فلسفه آردوینو بپردازم، باشد که خیلی از اختلاف نظر ها و کش مکش های موجود سر بودن یا نبودن آردوینو رو جواب منطقی بدیم !

واقعا درک‌ این مساله برای من سخته که طرفداران این مجموعه متن باز چنین افراطی با مساله وجودی آردوینو برخورد می‌کنند و البته جبهه مقابل هم همین‌طور برخورد می‌کنند. این گونه برخورد واقعا منو یاد بحث هایی می اندازه که هفت، هشت سال پیش طرفدارهای میکروکنترلر AVR با طرفدارهای PIC می کردند و اینقدی که بحث بالا می‌گرفت که گویی نفرات خود طراح و تولید کننده این مدل چیپ ها هستند! در واقع به شخصه فکر می‌کنم داشتن چنین تعصباتی بیشتر از آن که نشان آگاهی و دانش باشد بیشتر نشان از جهل و نا آگاهی دارد ! بگذارید پرحرفی را کنار بگذاریم و برویم سر بحث اصلی یعنی آردوینو ! توی این مقاله سعی می‌کنیم با رویکرد متفاوتی که تا کنون باهاش مواجه بودیم پدیده آردوینو رو بررسی کنیم ! یعنی خوب، بد و زشت (اشاره به فیلم The Good, the Bad, and the Ugly با بازی عالی کلینت ایستوود). توصیه می‌کنم حتی اگر چشم دیدن آردوینو رو هم ندارید این مقاله رو از دست ندید چون خواهیم گفت چرا آردوینو خوب است و حتی اگر عاشق آردوینو هستند باز این مقاله رو از دست ندید! چون می‌گوییم چرا آردوینو بد است و در اخر به زشت بودن مسائلی می‌پردازیم که چند وقته گریبان گیر جامعه الکترونیک شده است و زیاد هم بی ربط به آردوینو نیست.

بهتر است اول با خوب شروع کنم و بعد به سراغ بد و زشت برویم 🙂 . با سیسوگ همراه باشید.

THE GOOD

آردوینو خوب !

آردوینو Open Hardware است

آردوینو Open Hardware استاگر از کهنه سربازهای حوزه الکترونیک باشید به خوبی به یاد دارید تا قبل از این که آردوینو پا به عرصه وجودی بگذارد ؛ همیشه یک مدار نیم بند از یک میکروکنترلر معرف مثل ATmega8/32 یا PIC16/18 را بروی برردبرد یا بررابرد داشتیم تا در کمترین زمان ممکنه قادر باشیم تست های برنامه نویسی روشون داشته باشیم و بدترین قسمت کار هم این بود که قصد راه اندازی یک آیسی حافظه یا یک سنسور را داشتید که DIP نبود و نمی‌شد آن را روی برردبرد قرار داد، تازه باید وارد بازی پیچیده طراحی PCB و چاپ برد و … می‌شدید و فاجعه وقتی بود که می دیدید برد را برعکس (mirror) زده اید 😐 تازه این همه ماجرا نیست ، فکر کنید در یک شهر کوچک زندگی می‌کردید که دسترسی به قطعات و مراکز چاپ برد نداشتید!

به جرات میتوان گفت که آردوینو به این کابوس ها پایان داد !

در واقع طراحی ماژولار این مجموعه متن باز (Open Source) باعث شده که اگر امروز قصد کنید سنسور یا آیسی خاصی را راه اندازی کنید به سادگی با مراجعه به بازار الکترونیک ماژول آن را خریداری کنید. واقعا چی بهتر از این ! دیگر نیازی نیست برد طراحی کنید کلی داکیومنت مطالعه کنید تا قطعات جانبی و مدار راه انداز اولیه را طراحی کنید ؛ قبلا تمام این کارها انجام شده است، تنها کاری که لازم است انجام دهید تهیه و اتصال آن به میکروکنترلر محبوبتان است و در پله بعدی راه اندازی ماژول مورد نظر.

تا حالا فکر کردید این مساله نسبتا ساده و پیش پا افتاده چقدر می‌تواند در روند راه اندازی و طراحی پروژه کمک کند و پروژه را به لحاظ زمانی جلو بیندازد ؟

آردوینو Open Source است

آردوینو OpenSource استآردوینو نه تنها Open Hardware است بلکه Open Source نیز هست ؛ یعنی علاوه بر حوزه سخت افزار در حوزه نرم افزاری نیز متن باز است علاوه بر این نه تنها در قسمت سخت افزار به صورت ماژولار عمل کرده است بلکه در قسمت نرم‌افزار نیز به همین شکل عمل کرده است !

تعداد کتابخانه های موجود برای انواع پردازنده آنقدر زیاد است که قابل تصور نیست ؛ این‌ها همه از نعمات متن باز بودن است و مشارکت جهانی برای کامل کردن مجموعه آردوینو . مشخص و مسلم است پیاده سازی چنین مجموعه بزرگی از کتابخانه های نرم افزاری برای این طیف از سخت افزار از عهد یک تیم و چند تیم خارج است.

امروزه تقریبا برای هر چیزی که فکرشو بکنید توی آردوینو کتابخانه آماده وجود داره که به دلیل متن باز بودن آن به سادگی میتونید از آنها در پروژه های شخصی و تجاری استفاده کنید. فکر می‌کنید اگر قرار بود کتابخانه مربوط به شبکه tcp/ip رو برای atmega328 پورت کنید، دقت کنید! پورت کنید نه این که از اول بنوسید چقدر زمان لازم بود؟

یا فرض کنید کارفرمای شما نیاز به راه اندازی سنسوری داشت که حتی داکیومنت های آن (به دلیل تحریم ایران) در دسترس شما نیست ! چنین پروژه ای بدون وجود آردوینو حداقل چند ماه زمان برای راه اندازی نیاز داشت ؛ اما امروزه وقتی کتابخانه های پربار آردوینو وجود دارد به سادگی می‌توان نحوه عملکرد هر نوع سنسوری را متوجه شد.

البته امیدوارم سوء برداشت نشده باشد ابزار تعیین کننده مهارت نیست ! بدین معنا که

شخصی که به آردوینو مسلط است ؛ لزوما دلیل بر تسلط او در حوزه برنامه نویسی و الکترونیک نیست. همانطور که وجود چاقو در دست یک آشپز خوب نهایتا سوپ خوشمزه است و در دست جراح نجات دهنده جان آدمی است. اگر نه چاقو همان چاقو است و آردوینو هم همان آردوینو.

آردوینو Multi Platform است

اگر از بحث های سخت افزار و ماژول های نرم افزاری هم بگذریم قابلیت بعدی که نمایان می‌شود پشتیانی آردوینو از پلتفرم های متنوع است! احتمالا اگر طراح و توسعه دهنده سخت افزار باشید ؛ در حال حاظر مجبور به استفاده از AVR و ARM (اگر درگیر PIC و خانواده های کنترلر دیگر نباشید) هستید و برای توسعه هر کدام از پلتفرم‌های مختلفی استفاده می‌کنید ؛ خوب فرض کنید محیط یک پارچه توسعه Arduino زحمت کوچ از یک خانواده به خانواده دیگر را از دوش شما برمیدارد و تنها با سوییچ ساده نرم افزاری قادر خواهید بود کد خود را از AVR بر روی ARM اجرا کنید. خوب این گزینه برای افرادی که تازه شروع به برنامه نویسی با میکروکنترلر کرده اند قطعا جذاب است.

حتی برای افراد حرفه ای که تنها کنجکاوی در خصوص یک خانواده گریبان گیرشان است میتواند جالب باشد ؛ مثلا برای کار کردن با پردازنده های Xtensa دیگر نیاز نیست کلی کتابخانه های مربوطه اولیه را بارگذاری و به دنبال مستندات راه اندازی باشید ؛ با چند کلیک ساده به سادگی می‌توانید سمپل کد های مورد نظرتون رو روی این معماری تست کنید.

آردوینو جهانی است !

آردوینو جهانی است

قبلا هم اشاره کرده ام ؛ یکی از مزایای مهم هر سیستمی گستردگی جامعه استفاده کننده است. این گستردگی باعث می‌شود که به سادگی قادر باشید جواب مشکلات خود را پیدا کنید، یا اگر باگی در یکی از کتابخانه های برنامه وجود داشته باشد در سریعترین زمان ممکن کشف و رفع شود. شاید یکی از تاثیر گذار ترین موارد جهت انتخاب یا عدم انتخاب یک پلتفرم همین مورد باشد. مخصوصا برای ما ایرانی ها که از جامعه جهانی به گونه ای طرد شده ایم (از یک سو فیلترینگ داخلی و از طرفی تحریم های جهانی ).

با تقریب خوبی میشود گفت وقتی توی برنامه یا پروژه ای به مشکلی بر می‌خورید قبلا یکی در جهان به اون مشکل برخورده و احتمالا برای حلش تلاش کرده (البته یه احتمال خیلی ضعیف هم هست که شما اولین نفر باشید 😐 ) و اگر جامعه استفاده کننده از پلتفرم انتخابی شما بزرگ باشه زودتر به نتیجه دلخواه خواهید رسید!

و واقعا از این مهم نمیشه چشم پوشید.

THE BAD

آردوینو بد !

آردوینو بد است

 

تعداد افرادی که در مقابل استفاده از آردوینو جبهه می‌گیرند کم نیست و حتی عده ای پا را فراتر از خیال گذارده و آن را توطئه دشمن می‌دانند! و قصد دشمن برای از بین بردن عمق علم الکترونیک کشور و سطحی کردن آن! (کی میشه که این دشمن پنداری های بیمار گونه رو کنار بگذاریم) آیا واقعا چنین است؟ آیا آردوینو قادر به انجام چنین کاری است؟ اگر هست چرا پیش از ایران دیگر کشورهای جهان سوم دچار چنین بلایی نشده‌اند؟

از شوخی که بگذریم، باید به این سوال پاسخ داد که آیا آردینو بد است؟ ؛ و اگر بد است دقیقا به کدام دلیل بد است ؛ بگذارید تعدادی از استدلال های موجود در این خصوص را لیست کنیم و تک تک، هر کدام را بررسی کنیم:

  • آردوینو باعث سطحی شدن دانش الکترونیک می‌شود
  • آردوینو باعث بی سواد شدن قشر تحصیل کرده می‌شود
  • آردوینو باعث می‌شود هر کسی فکر کند طراح است

آردوینو باعث سطحی شدن دانش الکترونیک می‌شود

آیا واقعا علم الکترونیک را این گونه شناخته‌اید که همه چیز آن میکروکنترلر است؟ پس سخت در اشتباه هستید؛ بگذارید کمی اصول اولیه را بررسی کنیم الکترونیک به دو دسته کلی آنالوگ و دیجیتال قابل تقسیم است؛ از آنجایی که آردوینو نمی تواند کاری به بخش آنالوگ داشته باشد! احتمالا سراغ بخش دیجیتال می‌رود که خود باز به دو دسته مدارات منطقی و مدارات شامل پردازنده تقسیم می‌شود، از مدارات شامل پردازنده هم خود دسته‌هایی دارد که میکروکنترلر بخش کوچکی از آن است!

در ضمن تمام این حالات برای وقتی است که بپذیریم آردوینو واقعا به یاد گیری میکروکنترلر لطمه وارد می کند! که در گزاره بعد بیشتر به این موضوع خواهیم پرداخت.

حتی اگر این فرض صحیح باشد که آردوینو به یادگیری لطمه وارد می‌کند، این لطمه شامل علم الکترونیک نمی‌شود و تنها بخش کوچکی از آن را متاثر خواهد کرد. و البته لازمه اضافه کنم که آردوینو با هدف آموزش ساده به وجود آمده است چطور قادر است به آموزش لطمه وارد کند.

آردوینو باعث بی‌سواد شدن قشر تحصیل کرده می‌شود

در قسمت قبل گفتیم که میکروکنترلر بخش کوچکی از الکترونیک و دانش قشر تحصیل کرده را تشکل می‌دهد؛ با این حال آیا استفاده از آردوینو باعث بی‌سوادی یا سطحی شدن سواد قشر تحصیل کرده می‌شود؟ برای جواب به این سوال بگذارید نگاهی به سیستم آموزش عالی داشته باشیم. و بررسی کنیم که در حال حاظر میکروکنترلر از چه روشی در دانشگاه های ما تدریس می‌شود که وجود آردوینو باعث سطحی شدن آن می‌شود.

احتمالا برای آموزش میکروکنترلر از AVR یا نهایتا ARM استفاده می‌شود و احتمالا کامپایلر کدویژن یا نهایتا Keil ؛ کاربرد چند تا رجیستر رو توضیح می‌دهند و احتمالا چند تا پروتکل مثل Uart و SPI رو هم تشریح می‌کنند و در نهایت یه برنامه ترکیبی از چند پرفرال رو هم مثال می زنند و تمام! این می‌شود تمام دانش یک فرد تحصیل کرده از میکروکنترلر! البته اگر تنها به آموزش دانشگاهی اکتفا کند و خود به دنبال فراگیری فراتر از آن نباشد.

وجود آردوینو کجای این حلقه گسستگی ایجاد می‌کند؟ ؛ نرم افزار را هم می‌شود بدون کتابخانه های آردوینو در آردوینو نوشت واقعا فکر می‌کنید فرقی می‌کند ؟

چه از کتابخانه های آماده آردوینو استفاده کنید و چه از کدویزارد کدویژن – هر دو یک نتیجه را خواهند داشت ؛ لازم است که سیستم آموزشی اصلاح شود.

فکر می‌کنم برای آموزش صحیح میکروکنترلر لازم است میکروکنترلر به دو بخش سخت افزار و نرم افزار تفکیک شود؛ در بررسی های سخت افزاری عملکرد سخت افزاری بخش های مختلف مورد بررسی قرار گیرد فارغ از مباحث نرم‌افزاری! در واقع شاید این بخش واقعا کم رنگ شده و الان بیشتر تمرکز روی بخش برنامه نویسی میکروکنترلر گذاشته شده است و احتمالا به همین دلیل آردوینو را برای این سبک آموزش خطرناک می‌بینند؛ چرا که سعی می کنند سخت افزار را به کمک نرم افزار آموزش دهند.

آردوینو باعث می‌شود هر کسی فکر کند طراح است

بگذارید اشاره کنیم که آدم‌هایی که توانایی های خود و سیستم را نمی‌شناسند با فراگیری هر موضوع ساده‌ای از سیستم دچار توهوم دانش می‌شوند و از آن پس دیگر خدا را هم بنده نیستند! متاسفانه از این دست آدم ها در زمینه الکترونیک کنم نداریم. دقیقا مساله سر فهم ما از دانش خودمان است؛ کسی که فکر می‌کنید با کپی کردن چند کتابخانه و چسباندن آنها به هم پروژه ای راه اندازی کرده است یک طراح تمام عیار است دقیقا دچار توهوم دانستن است.

آیا به نظر شما فرقی می‌کند که این کتابخانه‌ها را از گیت هاب برداشته باشد و در کدویژن و keil کپی کرده باشد یا این که با چند کلیک در آردوینو نصب کرده باشد ؟ در واقع نمی‌شود همه تقصیر را به گردن آردوینو انداخت که نصب و استفاده از کتابخانه‌ها را ساده کرده است

THE UGLY

در واقع آردوینو نه چیز بدی است و نه چیز زشتی است ؛ چیزی که آن را در نظر ما بد و یا زشت می‌کند استفاده نامناسب از آن است. استفاده از آردوینو هیچ خطری برای هیچ کسی ایجاد نمی کند. آردوینو یک پلتفرم متن باز است که خیلی از کارها را ساده کرده است؛ آردوینو ایجاد شد تا هنرمندان بدون داشتن دانش الکترونیک قادر باشند ایده های طراحی خودشون رو پیاده سازی کنند فکر میکنم واقعا توی این رسالتش موفق هم بوده است.

اما وقتی شاهد این هستیم استادی پروژه های دانشگاهی رو بر اساس آردوینو می‌پذیره یا این که پروژهای تجاری براساس این پلتفرم طراحی می‌شوند (مخصوصا توی کشوری که شاهد رانت و رانت بازی هستیم) اصلا جای تعجب نداره که عده ای از این پلتفرم فوق العاده متنفر باشند.

یا این که دوره های آموزشی برای این پلتفرم متن باز ساده برگذار می‌کنند آن هم با چه شهریه های گزاف و ادعاهای مضحک! واقعا خنده‌دار است؛ پلتفرمی این چنین ساده که برای کار کردن با آن حتی نیازی به دانش الکترونیک ندارید و به سادگی هر شخصی قادر به درک و کار کردن با آن است ؛ اینطور باید مورد سوء استفاده قرار بگیرد و البته برخی از همکاران هم طوری ادعا می‌کنند گویا اینترنت اشیاء یا IOT د را نحصار آنها و آردوینو است.

امیدوارم که این کژ فهمی ها هم هرچه زودتر اصلاح شود تا شاهد استفاده صحیح و منطقی از این پلتفرم متن باز باشیم.


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

نوشته های مشابه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

18 دیدگاه

  1. Avatar امیر گفت:

    آردوینو یه پلتفرم خیلی خوب برای شروع به یادگیری هستش
    ولی استفاده از اون در پروژه های صنعتی اشتباه است
    به عنوان نمونه توابع milis, micros چون در پیاده سازی انها از یک تایمر 1us استفاده شده که intrrupt میده باعث می شه به ازای هر 16 کلاک که برنامه شما اجرای می شه 6 کلاک بعدی به اجرای شدن وقفه هدر بره که یعنی شما دارید فقط 72% درصد قدرت میکرو استفاده می کنید
    6 کلاک = 4 کلاک برای اجرا شدن وقفه+ 2کلاک ++ کردن متغییر های مربوط به توابع micros, milis

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      متشکرم برای نظرتون ؛ ولی لازم میدونم اصلاح کنم مطابق مستندات فنی آردوینو (سورس کد کتابخانه wiring.c)
      دقیقا توی خط 25 توضیح داده که کلاک ورودی تایمر در واقع 1/64 ام کلاک سیستم هست ؛ که توی هر 256 تیک تایمر صفر آورفلو میکنه ! یعنی هر 16384 کلاک یک بار اینتراپت خواهیم داشت نه هر میکروثانیه
      اما تابع micros چطور کار میکنه میتونید به خط 79 از سورس مراجعه کنید ؛ ولی خیلی مختصر بخوام بگم اینه که تعداد سرریز های تایمر ضرب در 256 بعلاوه مقدار کانتر تایمر صفر میشه 🙂
      روش هوشمندانه ای البته با مقداری خطای قابل پذیرش

      1. زئوس Zeus زئوس Zeus گفت:

        البته در مورد صنعتی بودن بیشتر شرایط سخت افزار مطرح هست نه در واقع نرم افزار
        چون شما برای برد های آردوینو میتونید از اتمل استودیو یا حتی کدویژن برنامه نویسی کنید و محدودیتی ندارید.

    2. Avatar Ali گفت:

      1.تابع millis هر 16384 کلاک یه دونه وقفه میده

      2.شما میتوانید با از کار انداختن تایمر یا در بعضی هسته ها در قسمت تنظیمات این این دو تابع را از کار بیندازید.

      3. در مورد سخت افزار و نویز پذیری باهاتون موافقم اما اما اما اگه اصول PCB زدن بلد باشی IDE آردوینو هم مثل کدویژن یه کامپایلره و کد هگز رو چه با بوت لودر و چه بدون بوت لودر در اختیار کاربر قرار میده که میشه اونو با یه پروگرمر عین کدویژن ریخت روی میکرو

  2. محسن کریمی خوشحال محسن کریمی خوشحال گفت:

    ممنون از مقاله جالب و خوبتون
    بنظر من آردینو خیلی خوبه چون باعث میشه افرادی مثل من که دانش لازم برای راه اندازی هر ماژولی رو نداره با تغییر کتابخانه آردینو برای سایر میکروکنترلرها استفاده میکنم
    بعد اینکه با مطالعه کتابخونه های آردینو میشه فهمید توسط یکسری حرفه ای برنامه نویسی درست شدن که آنقدر کامل و دقیق هستن
    بعد اینکه خدمتی که آردینو به سیستم آموزش الکترونیک ایران کرده اون سیستم قدیم آموزشی نکرده بنظر من مقاومت در برابر سیستم های ماژولار مقاومت در برابر پیشرفت هست

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز
      موافقم ؛ البته همه افراد حتی حرفه ای ها هم وقتی میخوان توی وقتشون صرفه جویی کنید به سراغ آردوینو و کتابخونه هاش میرن 🙂
      بله درسته ؛ کد های آردوینو و کتابخونه هاش (البته نه همشون) از کیفیت خیلی خوبی برخوردار هست !
      امیدارم که سیستم های نا کارآمد آموزشی هرچه زودتر اصلاح بشن 😐

  3. Safa Salimi صفا سلیمی گفت:

    سلام مهندس لذت بردم

    1. زئوس Zeus زئوس Zeus گفت:

      سلام – خواهش میکنم
      ممنون برای کامنت و انتقال فیدبک

  4. Avatar حسین گفت:

    با سلام.
    مقاله جالبی بود . مرسی .
    آردوینو قسمت سخت افزاریش خیلی خوبه …
    منتها قسمت بدش زبان برنامه نویسش هست و یک مقداری هم IDE ش .
    من عادت دارم وقتی میخوام برنامه بنویسم باید از جزئیات میکرو تا حدود زیادی سر در بیارم . وگرنه هزارتا سوال بی جواب توی ذهنم شکل میگیره .
    وقتی به زبان آردوینو ( که فکر میکنم یک لایه نرم افزاری روی c ست ) نگاه میکنم و بخوام طبق اون کاری رو انجام بدم انگار که دست و پاهام رو با طناب ببندن و یک مداد توی دهانم بگذارن و بهم بگن حالا یه پرتره طراحی کن !!!!!
    بعلاوه کلی باید وقت گذاشته بشه تا از اون لایه نرم افزاری ( که یک چیز بیخود و الکی هست ) و توابعش سر در آورد !!
    بیشتر به این درد میخوره که صرفا بخواهید کاری رو انجام بدید تا اینکه چیزی رو یاد بگیرید.
    حتی بعضی وقتها با c هم مشکل پیدا میکنم و به سرم میزنه اسمبلی بنویسم .
    اما در اینکه برای هر ماژولی کتابخانه ش نوشته شده و باعٍث صرفه جویی در وقت میشه هیچ شکی درش نیست .
    در کل مقاله جالبی بود و نگاه جالبی به مسئله داشتید . به خصوص در رابطه با اسمش!!
    سپاس.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز خواهش میکنم
      به نظر من قسمت نرم افزاریش حتی بهتر از سخت افزاریش هم هست ولی بله ide خیلی بدی برای کدنویسی حرفه ای داره
      آردوینو زبان خاصی نداره , همون c++ هست که استاندارده و البته لازمه بگم که c رو هم به شکل کامل پشتیبانی میکنه
      والا منم حقیقتش اینه که خیلی با توابع آردوینو راحت نیستم و نهایتا از سخت افزارش استفاده میکنم.
      ممنون برای کامنت خوبتونم ؛

      1. Avatar حسین گفت:

        سلام فرمایش شما کاملا درسته . زبانش c++ هست (کمپایلر gcc ) راستش ساختار برنامه نویسیش ظاهرا کمی باc و c++ فرق داره یک تابع به اسم setup داره که فقط یکبار اجرا میشه و یک تابع به اسم loop که همون کار while در تابع main زبان c استاندارد رو انجام میده . قبلا یک مقدار وقت گذاشته بودم و توی هدرها و یکسری از فایلهاش سرک کشیدم . این توابع setup & loop رو چطوری پیاده سازی کردن که کار تابع main رو انجام میده ؟ به نظرم با کتابخانه معمولی c نشه یک همچین کاری کرد ، برای همین به نظرم اومد یک لایه به زبان c , c++ اضافه کردن البته کماکان دستورات استاندارد هم اجرا میشن .( زیاد هم باهاش کار نکردم ، دیدم وضعیتش اینطوریه دیگه سمتش نرفتم ) .

        1. زئوس Zeus زئوس Zeus گفت:

          سلام
          واقعا چیز پیچیده ای نداره ، مثلا همین تابع setup و loop دقیقا میشه فرض کرد به شکل زیر نوشته شده

          void setup()
          {
          /*arduino setup function*/
          }

          void loop()
          {
          /*arduino loop function*/
          }

          int main(void)
          {
          setup();

          while(1)
          {
          loop();
          }
          }

          دقیقا همون C خودمون است ؛ فقط چون بک اندش رو ما بررسی نمی کنیم ممکنه به نظرمون بیاد که انگار خیلی متفاوته در صورتی که واقعا اینطور نیست
          دلیل این که اومدن از زبان c++ استفاده کردند دقیقا اینه که برنامه نویس های کامپیوتر خیلی با این زبان راحت تر هستند ؛ ولی در واقع زبان C++ زبان مناسبی برای سخت افزار نیست فکر میکنم یه سری مسائل پیش میاره مخصوصا تو جاهایی که باید با خود سخت افزار درگیر بشه
          حتی کرنل لینوکس هم با C نوشته شده نه C++ ؛ پس انتخاب زبان C++ صرفا برای راحتی استفاده بوده

          1. Avatar حسین گفت:

            فرمایش شما کاملا درسته . متوجه میشم چی میفرمایید .
            اونقدری که میفهمم زبان c )c++) یک زبان تابعی هست . درسته که عملکرد توابع setup و
            loop معادل با همون تابع main(void) که شما به درستی فرمودید.
            اما کمپایلر آردوینو چون اساس زبان c++ , c هست نمیتونه خودش تشخیص بده کهsetup و
            loop چی هستن ( راستش درک این هست ) پس باید یک چیزی این معادل سازی به تابعmain(void) رو انجام بده تا برای gcc معنی داشته باشه….خود gcc نمیتونه اینکار و بکنه ( وقتی کد هگز داره اجرا میشه فقط تابعی که اسمش main هست اجرا میشه بقیه توابع بر اساس فراخوانی از main شروع به کار میکنن ) کمپایلر آردوینو خودش این تابع معادل ازsetup و loop را تولید میکنه ؟ یا قبل از ترجمه خود ide میاد این اصلاح رو انجام میده ؟
            نقطه مبهم اینجاست .
            سپاس بابت وقتی که میگذارید . یکم طولانی شد .

          2. زئوس Zeus زئوس Zeus گفت:

            سلام (خوشم میآد از این که سوال گر هستید و به دنبال روشن کردن نقاط خاموش هستید)
            خوب بله شما درست میگید خود کامپایلر نمیتونه بفهمه چون همیشه کامپایلر های C برنامه رو از تابع Main شروع میکنند ؛ پس چطور وجود توابع setup و loop رو متوجه میشه ؟
            خوب خیلی ساده است ؛ آردینو یه فریمورک داره که همراه هر پروژه ای با پروژه کامپایل میشه و توی بکگراند هست و به همین دلیل ما نمی بینیمش ؛ مثلا وجود کلاس Serial از همینجا میآد ؛ یعنی توی اون فریمورک داره همراه با سورس ما کامپایل میشه ؛ خوب حالا سورس این فریمورک کجاست – معلومه دیگه توی گیت هاب آردوینو خوب حالا دقیقا مین برنامه کجاست ؟
            توی این آدرس میتونید تعریف Main فریمورک آردوینو رو ببینید 🙂
            که توی خط 33 دقیقا main به شکل زیر تعریف شده


            int main(void)
            {
            init();

            initVariant();

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

            setup();

            for (;;) {
            loop();
            if (serialEventRun) serialEventRun();
            }

            return 0;
            }

          3. Avatar حسین گفت:

            سلام .
            هوممممممممممممم!!
            گیرم دقیقا همین موضوع بود .
            ( به طور مثال توی یک کد دیدم از رابط سریال استفاده کرده بود ولی با توجه به کریستال 16 MHZ آردوینو واحد Uart دچار خطا میشه پس حدس میزدم احتمالا سریال رو نرم افزاری پیاده سازی کرده باشه . حالا که نرم افزاری هست ، تایمینگش رو چطوری پیاده کرده؟؟ با دیلی که دقیق نیست پس مجبور میشه از تایمر استفاده کنه و از کدوم تایمر استفاده ….. و هزار مسئله شبیه این که موقع کد نوشتن کلی درد سر ممکنه درست کنه )

            این راهنمایی که فرمودید مسئله مهمی هست .
            بررسیش میکنم ببینم چی از توش در میاد .

            سپاس فراوان جناب زئوس گرامی
            بابت زحمتی که میکشید و بابت وقتی که میگذارید .

          4. زئوس Zeus زئوس Zeus گفت:

            سلام
            البته توی آردوینو به دو شکل میشه واحد سریال رو پیاده سازی کرد
            پیشفرضش همون سخت افزاری است ولی به شکل نرم افزاری هم امکان تعریفش هست ِ دقیقا درست حدس زدید از تایمر برای زمان بندی استفاده میکنه
            ولی این که از کدوم تایمر داره استفاده میکنه منم نمیدونم باید سورسش رو دید 🙂
            خواهش میکنم دوست عزیز

  5. مقاله ای بسیار عالی نه افراط نه تفریط.
    من خودم خیلی جاها شده کتابخانه های پیچیده بعضی ماژول ها را به راحتی از آردوینو به میکرو مورد نظر پورت کردم و کارم رو چندین برابر جلو انداخته !

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز ، نظر لطف شماست
      بله دقیقا برای منم این موردی که میگید پیش اومده و بسیار کارم رو جلو انداخته