• شرح دستورات آردوینو برنامه نویسی آردوینو به زبان C در AVR Studio

    سلام! من آلیکین الکساندر سرگیویچ هستم، معلم آموزش اضافیمن رهبری باشگاه های "رباتیک" و "مهندسی رادیو" در مرکز فناوری جوانان و جوانان در لابینسک را بر عهده دارم. من می خواهم کمی در مورد یک روش ساده به شما بگویم برنامه نویسی آردوینوبا استفاده از برنامه ArduBlock

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

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

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

    بنابراین، ArduBlock چیست؟همانطور که قبلاً گفتم، این یک محیط برنامه نویسی گرافیکی است. تقریباً به طور کامل به روسی ترجمه شده است. اما نکته برجسته ArduBlock فقط این نیست، بلکه این واقعیت است که برنامه ArduBlock که ما نوشتیم به کد تبدیل می شود. آردوینو IDE. این برنامه در محیط برنامه نویسی Arduino IDE تعبیه شده است، یعنی یک افزونه است.

    در زیر نمونه ای از یک LED چشمک زن و یک برنامه تبدیل شده در Arduino IDE آورده شده است. تمام کار با برنامه بسیار ساده است و هر دانش آموزی می تواند آن را درک کند.

    در نتیجه کار با برنامه، شما نه تنها می توانید آردوینو را برنامه ریزی کنید، بلکه دستوراتی را که ما درک نمی کنیم را نیز مطالعه کنید. قالب متن Arduino IDE، اما اگر برای نوشتن دستورات استاندارد تنبل هستید، می توانید به سرعت از ماوس برای ترسیم یک برنامه ساده در ArduBlok و اشکال زدایی آن در Arduino IDE استفاده کنید.

    برای نصب ArduBlok، ابتدا باید Arduino IDE را از وب سایت رسمی آردوینو دانلود و نصب کنید و تنظیمات را هنگام کار با برد درک کنید. آردوینو UNO. نحوه انجام این کار در همان وب سایت یا در Amperka توضیح داده شده است، یا آن را در YouTube تماشا کنید. خوب، وقتی همه اینها مشخص شد، باید ArduBlok را از وب سایت رسمی، اینجا دانلود کنید. من دانلود آخرین نسخه ها را توصیه نمی کنم، آنها برای مبتدیان بسیار پیچیده هستند، اما نسخه 2013-07-12 بهترین است، این فایل در آنجا محبوب ترین است.

    سپس نام فایل دانلود شده را به ardublock-all و در پوشه “documents” تغییر دهید. پوشه های زیر را ایجاد می کنیم: Arduino > tools > ArduBlockTool > tool و در دومی فایل دانلود شده و تغییر نام داده شده را می اندازیم. ArduBlok روی همه کار می کند سیستم های عامل، حتی در لینوکس، خودم آن را در XP، Win7، Win8، همه نمونه ها برای Win7 بررسی کردم. نصب برنامه برای همه سیستم ها یکسان است.

    خوب، به بیان ساده، من یک بایگانی را روی دیسک 7z Mail آماده کردم که در آن 2 پوشه را باز می کنید. یکی در حال حاضر کار می کند برنامه آردوینو IDE و در یک پوشه دیگر محتویات باید به پوشه Documents ارسال شوند.

    برای کار در ArduBlok، باید Arduino IDE را اجرا کنید. سپس به تب Tools می رویم و در آنجا آیتم ArduBlok را پیدا می کنیم، روی آن کلیک می کنیم - و هدف ما اینجاست.

    حال به رابط کاربری برنامه می پردازیم. همانطور که قبلاً متوجه شدید، هیچ تنظیماتی در آن وجود ندارد، اما آیکون های زیادی برای برنامه نویسی وجود دارد و هر یک از آنها یک دستور را در قالب متن Arduino IDE حمل می کنند. حتی آیکون های بیشتری در نسخه های جدید وجود دارد، بنابراین با ArduBlok مقابله کنید آخرین نسخهدشوار است و برخی از نمادها به روسی ترجمه نشده اند.

    در بخش "مدیریت" انواع چرخه ها را خواهیم یافت.

    در قسمت "پورت ها" می توانیم مقادیر پورت ها و همچنین ساطع کننده صدا، سروو یا سنسور مجاورت اولتراسونیک متصل به آنها را مدیریت کنیم.

    در بخش «اعداد/ثابت»، می‌توانیم مقادیر دیجیتالی را انتخاب کنیم یا یک متغیر ایجاد کنیم، اما بعید است از آنچه در زیر آمده است استفاده کنید.

    در بخش "اپراتورها" ما تمام عملگرهای مقایسه و محاسبه لازم را خواهیم یافت.

    بخش Utilities بیشتر از آیکون ها در طول زمان استفاده می کند.

    "TinkerKit Bloks" بخشی برای سنسورهای خریداری شده TinkerKit است. البته ما چنین مجموعه ای نداریم، اما این به این معنی نیست که آیکون ها برای مجموعه های دیگر مناسب نیستند، برعکس، استفاده از آیکون هایی مانند روشن کردن LED یا یک LED برای بچه ها بسیار راحت است. دکمه. این علائم تقریبا در همه برنامه ها استفاده می شود. اما آنها یک ویژگی دارند - وقتی آنها را انتخاب می کنید، نمادهای نادرستی وجود دارد که پورت ها را نشان می دهد، بنابراین باید آنها را حذف کنید و نماد را از بخش "اعداد/ثابت" در بالای لیست جایگزین کنید.

    "DF Robot" - این بخش در صورت وجود سنسورهای مشخص شده در آن استفاده می شود، آنها گاهی اوقات پیدا می شوند. و مثال امروز ما مستثنی نیست، ما یک "سوئیچ IR قابل تنظیم" و یک "سنسور خط" داریم. "سنسور خط" با آنچه در تصویر است متفاوت است، همانطور که از Amperka است. عملکرد آنها یکسان است، اما سنسور Ampere بسیار بهتر است، زیرا دارای یک تنظیم کننده حساسیت است.

    "Seedstudio Grove" - ​​من هرگز از سنسورهای این بخش استفاده نکرده ام، اگرچه فقط جوی استیک وجود دارد. این بخش در نسخه های جدید گسترش یافته است.

    و آخرین بخشاین کیت لینکر است. سنسورهای ارائه شده در آن به من برخورد نکردند.

    من می خواهم نمونه ای از یک برنامه را بر روی رباتی که در امتداد نوار حرکت می کند نشان دهم. این ربات بسیار ساده است، هم در مونتاژ و هم در اکتساب، اما اول از همه. بیایید با به دست آوردن و مونتاژ آن شروع کنیم.

    این مجموعه خود قطعات است، همه چیز در سایت آمپرکا خریداری شده است.

    1. محافظ موتور AMP-B001 (2 کانال، 2 A) 1890 روبل
    2. AMP-B017 Troyka Shield 1690 روبل
    3. AMP-X053 محفظه باتری 3×2 AA 1 60 RUR
    4. سنسور خط دیجیتال AMP-B018 2580 روبل
    5. ROB0049 سکوی دو چرخ MiniQ 11890 روبل
    6. سنسور موانع مادون قرمز SEN0019 RUB 1390
    7. پایه FIT0032 برای سنسور موانع مادون قرمز RUB 1,90
    8. A000066 Arduino Uno 1 1150 RUR

    ابتدا بیایید سکوی چرخدار را مونتاژ کنیم و سیم ها را به موتورها لحیم کنیم.

    سپس قفسه هایی را برای نصب برد آردوینو UNO نصب می کنیم که از برد قدیمی گرفته شده است مادربردیا سایر بست های مشابه

    سپس برد Arduino UNO را به این قفسه ها وصل می کنیم، اما نمی توانیم یک پیچ را ببندیم - کانکتورها در راه هستند. البته می توانید آنها را از لحیم خارج کنید، اما این به صلاحدید شما است.

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

    حالا سنسورهای خط دیجیتال نصب می کنیم، اینجا باید دنبال یک جفت پیچ و 4 مهره برای آنها بگردید، دو مهره بین خود پلت فرم و سنسور خط نصب می کنیم و با بقیه سنسورها را تعمیر می کنیم.

    بعد موتور شیلد را نصب می کنیم، یا در غیر این صورت می توانید آن را درایور موتور بنامید. در مورد ما، به جامپر توجه کنید. ما از منبع تغذیه جداگانه برای موتورها استفاده نخواهیم کرد، بنابراین در این موقعیت نصب می شود. قسمت پایینی با نوار برق مهر و موم شده است تا در هر صورت اتصال کوتاه تصادفی از کانکتور USB Arduino UNO ایجاد نشود.

    ما Troyka Shield را در بالای موتور Shield نصب می کنیم. برای راحتی اتصال سنسورها لازم است. تمام سنسورهایی که ما استفاده می کنیم دیجیتال هستند، بنابراین سنسورهای خط به پورت های 8 و 9 متصل می شوند که به آنها پین نیز می گویند و سنسور مانع مادون قرمز به پورت 12 متصل می شود. حتما توجه داشته باشید که نمی توانید از پورت های 4، 5، 6، 7 استفاده کنید زیرا موتور شیلد از آنها برای کنترل موتور استفاده می کند. من حتی روی این پورت‌ها را با یک نشانگر قرمز رنگ زدم تا دانش‌آموزان بتوانند آن را بفهمند.

    اگر قبلاً متوجه شده اید، من یک بوش مشکی برای هر موردی اضافه کردم تا محفظه باتری که نصب کرده ایم خارج نشود. و در نهایت کل سازه را با یک کش معمولی محکم می کنیم.

    2 نوع اتصال محفظه باتری وجود دارد. اولین اتصال سیم به Troyka Shield. همچنین امکان لحیم کردن دوشاخه برق و اتصال آن به برق وجود دارد برد آردوینوسازمان ملل متحد

    ربات ما آماده است. قبل از شروع برنامه نویسی، باید یاد بگیرید که چگونه همه چیز کار می کند، یعنی:
    - موتورها:
    پورت 4 و 5 برای کنترل یک موتور و 6 و 7 دیگری استفاده می شود.
    سرعت چرخش موتورها را با PWM در پورت های 5 و 6 تنظیم می کنیم.
    جلو یا عقب با ارسال سیگنال به پورت های 4 و 7.
    - حسگرها:
    ما همه دیجیتال هستیم، بنابراین آنها سیگنال های منطقی را به شکل 1 یا 0 می دهند.
    و برای تنظیم آنها دارای رگلاتورهای مخصوص هستند و با کمک پیچ گوشتی مناسب می توان آنها را کالیبره کرد.

    جزئیات را می توان در Amperke یافت. چرا اینجا؟ زیرا اطلاعات زیادی در مورد کار با آردوینو وجود دارد.

    خوب، احتمالاً ما همه چیز را سطحی نگاه کردیم، آن را مطالعه کردیم و البته ربات را مونتاژ کردیم. اکنون باید برنامه ریزی شود، اینجاست - برنامه مدتها در انتظار!

    و برنامه به Arduino IDE تبدیل شد:

    Void setup() (pinMode(8, INPUT)؛ pinMode(12, INPUT)؛ pinMode(9, INPUT)؛ pinMode(4, OUTPUT)؛ pinMode(7 , OUTPUT)؛ pinMode(5، OUTPUT)؛ pinMode(6 , OUTPUT); ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4 , HIGH); analogWrite(5, 255) analogWrite( 6, 255)؛ digitalWrite(7 , HIGH); ) else (digitalWrite(4, HIGH)؛ analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , LOW); )) else (اگر (digitalRead) (9)) ( digitalWrite(4, LOW)؛ analogWrite(5, 50) analogWrite(6, 255)؛ digitalWrite(7, HIGH)؛ ) other ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 255)؛ digitalWrite (7 , HIGH); ) ) ) other (digitalWrite(4, HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7 , HIGH); ))

    در پایان، می خواهم بگویم که این برنامه به سادگی یک موهبت الهی برای آموزش است، حتی برای خودآموزی به شما کمک می کند تا یاد بگیرید دستورات آردوینو IDE. نکته اصلی این است که بیش از 50 نماد نصب وجود دارد، شروع به "اشکال" می کند. بله، در واقع، این نکته برجسته است، زیرا برنامه نویسی فقط در ArduBlok همیشه برنامه نویسی در Arduino IDE را به شما آموزش نمی دهد. به اصطلاح "شکلی" به شما این فرصت را می دهد که فکر کنید و سعی کنید دستورات را برای اشکال زدایی دقیق برنامه ها به خاطر بسپارید.

    آرزو می کنم موفق شوی.

    اساس زبان برنامه نویسی ماژول آردوینو زبان C است (به احتمال زیاد C++). به طور دقیق تر، این گویش زبان پردازش/سیم کشی نامیده می شود. یک نمای کلی خوب از زبان را در ضمیمه خواهید دید. اما من می خواهم بیشتر نه در مورد زبان، بلکه در مورد برنامه نویسی صحبت کنم.

    یک برنامه مجموعه خاصی از دستورات است که توسط پردازنده، پردازنده رایانه شما یا پردازنده میکروکنترلر ماژول آردوینو قابل درک است، مهم نیست. پردازنده دستورالعمل ها را می خواند و آنها را اجرا می کند. هر دستوری که پردازنده بفهمد اعداد باینری هستند. اینها فقط اعداد باینری هستند و چیز دیگری نیستند. انجام دادن عملیات حسابی، که زمانی پردازنده برای آن در نظر گرفته شده بود، پردازنده با اعداد کار می کند. اعداد باینری و معلوم می شود که هم دستورات و هم آنچه که به آن اشاره می کنند فقط اعداد باینری هستند. مثل این. اما پردازنده چگونه این "هپ" را مرتب می کند؟ اعداد باینری?

    اولاً، تمام این اعداد باینری در سلول های متوالی نوشته می شوند حافظه دسترسی تصادفیداشتن آدرس هنگامی که برنامه ای را بارگذاری می کنید و شروع به اجرا می کند، پردازنده اولین آدرس برنامه را دریافت می کند که دستور باید در آن نوشته شود. دستورالعمل‌هایی که پردازشگر را ملزم می‌کند با اعداد کار کند، «علامت‌های شناسایی» دارند، به عنوان مثال، در دو سلول حافظه بعدی دو عدد وجود دارد که باید اضافه شوند. و شمارنده، آن را یک شمارنده فرمان بنامیم، جایی که آدرس دستور بعدی در آن نوشته شده است در این موردآدرس را افزایش می دهد تا برنامه حاوی دستورالعمل بعدی در این آدرس باشد. در اشکال در عملکردبرنامه یا خرابی، پردازنده ممکن است اشتباه کند و سپس با خواندن یک عدد به جای دستور، پردازنده کاری کاملاً متفاوت از آنچه باید انجام دهد انجام می دهد و برنامه "یخ می زند".

    بنابراین، هر برنامه دنباله ای از اعداد باینری است. و برنامه نویسی توانایی نوشتن صحیح دنباله های صحیح اعداد باینری است. خیلی وقت پیش آنها شروع به استفاده کردند وسایل خاصکه به آنها زبان های برنامه نویسی می گویند.

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

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

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

    علاوه بر زبان های برنامه نویسی عمومی، همیشه زبان های برنامه نویسی تخصصی وجود داشته و زبان های تخصصی نیز وجود داشته است. زبان برنامه نویسی ماژول آردوینو را نیز در میان دومی قرار می دهم.

    هر چیزی که ما نیاز داریم به ماژول بگوییم کاری را انجام دهد که به آن نیاز داریم در مجموعه ای مناسب از دستورات سازماندهی شده است. اما ابتدا، چه چیزی از آردوینو نیاز داریم؟

    ماژول را می توان در کیفیت های مختلف- این قلب (یا سر) ربات است، این اساس دستگاه است، همچنین سازنده مناسبی برای تسلط بر کار با میکروکنترلرها و غیره است.

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

    بیایید ببینیم بیشترین چیزی که می تواند به ما بگوید برنامه ساده"چک زدن LED"

    int ledPin = 13;

    pinMode (ledPin، OUTPUT)؛

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    ابتدا بیایید به یاد بیاوریم که LED چیست. در اصل، این یک دیود معمولی است که در آن، به دلیل طراحی آن، هنگامی که جریان در جهت جلو جریان می یابد، اتصال شروع به درخشش می کند. یعنی برای اینکه یک LED بدرخشد، جریان باید از آن عبور کند، یعنی باید ولتاژ به LED اعمال شود. و برای اینکه جریان از مقدار مجاز تجاوز نکند، یک مقاومت باید به صورت سری به LED متصل شود که به آن مقاومت محدود کننده جریان می گویند (به پیوست A، خروجی دیجیتال مراجعه کنید). ولتاژ توسط میکروکنترلر به LED اعمال می شود که اساس ماژول آردوینو را تشکیل می دهد. میکروکنترلر علاوه بر پردازنده ای که دستورات ما را اجرا می کند، یک یا چند پورت I/O دارد. بدون پرداختن به جزئیات دستگاه خاصپورت، اجازه دهید آن را به این صورت بیان کنیم - وقتی پین پورت به عنوان یک خروجی کار می کند، می توان آن را به عنوان خروجی یک ریزمدار دیجیتال با دو حالت روشن و خاموش نشان داد (ولتاژ در خروجی وجود دارد، ولتاژی در خروجی وجود ندارد. ).

    اما همان پین پورت می تواند به عنوان ورودی نیز کار کند. در این مورد، می توان آن را، به عنوان مثال، به عنوان ورودی یک ریزمدار دیجیتال نشان داد - یک سطح منطقی، بالا یا پایین، به ورودی اعمال می شود (به پیوست A، ورودی دیجیتال مراجعه کنید).

    نحوه فلش LED:

    پین خروجی پورت را فعال کنید. خروجی پورت را خاموش کنید.

    اما پردازنده بسیار سریع است. ما وقت نخواهیم داشت که متوجه پلک زدن شویم. برای مشاهده این چشمک زدن، باید مکث اضافه کنیم. به این معنا که:

    پین خروجی پورت را فعال کنید. 1 ثانیه مکث کنید.

    خروجی پورت را خاموش کنید.

    1 ثانیه مکث کنید.

    این برنامه ماست پردازنده اولین فرمان را می خواند و خروجی را روشن می کند، LED روشن می شود. سپس پردازنده مکث می کند و خروجی را خاموش می کند، LED خاموش می شود. اما او فقط یک بار پلک زد.

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

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

    این دقیقا همان چیزی است که تابع void loop() می گوید، یک حلقه یک حلقه است، یک حلقه بسته. هیچ شرطی برای توقف چرخه وجود ندارد و بنابراین، هیچ شرطی برای تکمیل آن وجود ندارد.

    علاوه بر این باید اطلاع رسانی کنیم ماژول آردوینو، برای خروجی (OUTPUT) یا برای ورودی (INPUT) از کدام پین پورت و چگونه می خواهیم استفاده کنیم. این هدف توسط تابع void setup() که زبان آردوینوحتی اگر از آن استفاده نشود، و دستور pinMode() برای تنظیم حالت پین مورد نیاز است.

    pinMode (ledPin، OUTPUT)؛

    و با این حال، ساختار زبان از متغیرهایی برای تعیین عدد خروجی استفاده می کند:

    int ledPin = 13;

    استفاده از متغیرها راحت است. اگر تصمیم بگیرید که از خروجی 12 به جای 13 استفاده کنید، فقط در یک خط تغییر ایجاد می کنید. این امر به ویژه در مورد صادق است برنامه های بزرگ. نام متغیر را می توان به دلخواه انتخاب کرد، اما به طور کلی باید فقط کاراکتر باشد و تعداد کاراکترها اغلب محدود است. اگر نام متغیر را اشتباه تنظیم کنید، فکر می کنم کامپایلر شما را تصحیح کند.

    تابع digitalWrite(ledPin, HIGH) پین مشخص شده را روی حالت با تنظیم می کند سطح بالا، یعنی خروجی را روشن می کند.

    و تأخیر (1000) همانطور که قبلاً فهمیدید به معنای مکث 1000 میلی ثانیه یا 1 ثانیه است.

    باید بدانیم پیشوندهایی مانند int و void به چه معنا هستند. هر مقدار، هر متغیری مانند دستورات برنامه در حافظه قرار دارد. اعدادی که اغلب از 8 بیت تشکیل شده اند در سلول های حافظه نوشته می شوند. این یک بایت است. اما یک بایت عددی از 0 تا 255 است اعداد بزرگشما به دو بایت یا بیشتر نیاز دارید، یعنی دو یا چند سلول حافظه. برای اینکه پردازنده را بفهمید که چگونه شماره را پیدا کند، انواع متفاوتاعداد نام های مختلفی دارند بنابراین عددی به نام بایت یک سلول را اشغال می کند، int (عدد صحیح، عدد صحیح) بیشتر می گیرد. علاوه بر این، توابع مورد استفاده در زبان های برنامه نویسی نیز اعداد را برمی گرداند. برای تعیین نوع عددی که یک تابع باید برگرداند، پیشوند تابع را با آن نوع عدد برگردانده قرار دهید. اما برخی از توابع ممکن است اعداد را برنگردانند؛ این توابع قبل از علامت خالی هستند (به پیوست A، متغیرها مراجعه کنید).

    این چقدر جالب است که حتی ساده ترین برنامه هم می تواند بگوید.

    امیدوارم بتوانید همه این موارد را در پیوست بخوانید. حالا بیایید آزمایش‌های ساده‌ای انجام دهیم، فقط با استفاده از آنچه قبلاً از قابلیت‌های زبان می‌دانیم. ابتدا بیایید جایگزین کنیم متغیر نوع int، که فضای زیادی از حافظه را اشغال می کند، بایت - یک فضا، یک سلول حافظه. بیایید ببینیم چه کاری می توانیم انجام دهیم.

    ledPin بایت = 13;

    pinMode (ledPin، OUTPUT)؛

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    پس از کامپایل و بارگذاری برنامه در ماژول، هیچ تغییری در عملکرد برنامه مشاهده نخواهیم کرد. خوب. سپس برنامه را طوری تغییر می دهیم که متوجه تغییرات در عملکرد آن شویم.

    برای این کار عدد موجود در تابع تاخیر (1000) را با یک متغیر جایگزین می کنیم که آن را my_del می نامیم. این متغیر باید یک عدد صحیح یعنی int باشد.

    int my_del = 5000;

    به یاد داشته باشید که هر دستور را با یک نقطه ویرگول پایان دهید. تغییراتی در برنامه ایجاد کنید، آن را کامپایل کرده و در ماژول بارگذاری کنید. سپس متغیر را تغییر دهید و دوباره کامپایل کنید و دوباره بارگذاری کنید:

    بایت my_del = 5000;

    مطمئنم تفاوت محسوس خواهد بود.

    بیایید آزمایش دیگری با تغییر مدت زمان مکث ها انجام دهیم. بیایید مدت مکث ها را مثلاً پنج برابر کاهش دهیم. بیایید 2 ثانیه مکث کنیم و سپس آن را پنج برابر کنیم. و دوباره 2 ثانیه مکث می کنیم. حلقه ای که به تعداد مشخصی بارها اجرا می شود فراخوانی می شود برای حلقهو به این صورت نوشته شده است:

    برای (int i = 0; i<5; i++)

    چیزی که در یک حلقه for اجرا می شود

    برای اجرای حلقه، به یک متغیر نیاز دارد، برای ما i است، به متغیر باید یک مقدار اولیه داده شود که ما به آن اختصاص دادیم. سپس از شرط خاتمه حلقه پیروی می کند، i کمتر از 5 داریم. و ورودی i++ یک ورودی زبان C معمولی برای افزایش یک متغیر به یک است. پرانتزهای فرفری مجموعه دستوراتی را که می توان در یک حلقه for اجرا کرد محدود می کند. سایر زبان های برنامه نویسی ممکن است جداکننده های مختلفی برای برجسته کردن یک بلوک از کد تابع داشته باشند.

    در داخل حلقه ما همان کار قبلی را با چند تغییر جزئی انجام می دهیم:

    برای (int i = 0; i<5; i++)

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    my_del = my_del - 100;

    ما در مورد تغییر رکورد مکث بالا صحبت کردیم و تغییر خود مکث با کاهش 100 متغیر به دست می آید.

    برای حلقه دوم، همان بلوک کد را می نویسیم، اما متغیر مدت زمان مکث را 100 افزایش می دهیم.

    برای (int i = 0; i<5; i++)

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

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

    int ledPin = 13;

    int my_del = 1000;

    pinMode (ledPin، OUTPUT)؛

    برای (int i = 0; i<5; i++)

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    برای (int i = 0; i<5; i++)

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    بیایید کد برنامه خود را در برنامه آردوین کپی کرده، آن را کامپایل کرده و در ماژول بارگذاری کنیم. تغییر در مدت مکث قابل توجه است. و حتی بیشتر قابل توجه خواهد بود، اگر حلقه for مثلاً 8 بار اجرا شود، آن را امتحان کنید.

    کاری که ما به تازگی انجام داده ایم کاری است که برنامه نویسان حرفه ای انجام می دهند - با داشتن یک برنامه آماده، به راحتی می توان آن را مطابق با نیازها یا خواسته های شما تغییر داد. به همین دلیل تمام برنامه های خود را ذخیره می کنند. چیزی که من به شما توصیه می کنم انجام دهید.

    چه چیزی را در آزمایش خود از دست دادیم؟ ما در مورد کار خود اظهار نظر نکرده ایم. برای افزودن نظر، از اسلش دوبل به جلو یا تک اسلش، اما با ستاره استفاده کنید (پیوست A را ببینید). من به شما توصیه می کنم که این کار را خودتان انجام دهید، زیرا وقتی بعد از مدتی به برنامه برگشتید، اگر توضیحاتی در مورد کارهایی که در این یا آن مکان برنامه انجام می دهید وجود داشته باشد، راحت تر متوجه آن خواهید شد. و همچنین به شما توصیه می کنم که توضیحات آن را به زبان ساده، ساخته شده در هر ویرایشگر متنی، در پوشه هر برنامه ذخیره کنید.

    ساده ترین برنامه "چشمک زدن یک LED" می تواند برای ده ها آزمایش دیگر (حتی با یک LED) خدمت کند. به نظر من این بخش از کار، ارائه کارهای دیگری که می توان به روشی جالب انجام داد، جالب ترین است. اگر به پیوستی که در آن زبان برنامه نویسی توضیح داده شده است، به بخش "کنترل برنامه" مراجعه کنید، می توانید حلقه for را با نوع دیگری از حلقه جایگزین کنید. و نحوه عملکرد سایر انواع چرخه را امتحان کنید.

    اگرچه یک پردازنده میکروکنترلر، مانند هر دیگری، می تواند محاسبات را انجام دهد (به همین دلیل اختراع شد) و از این روش استفاده می شود، به عنوان مثال، در دستگاه ها، معمولی ترین عملیات برای یک میکروکنترلر تنظیم خروجی پورت روی مقدار زیاد یا پایین خواهد بود. حالت، یعنی "چشمک زدن LED" به عنوان یک واکنش به رویدادهای خارجی.

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

    ساده ترین مثال یک دکمه در ورودی است. هنگامی که دکمه فشار داده نمی شود، ورودی در حالت بالا است. اگر دکمه را فشار دهیم، ورودی کم می شود و می توانیم LED را در خروجی "روشن" کنیم. دفعه بعد که دکمه را فشار می دهید، LED می تواند خاموش شود.

    این دوباره نمونه ای از یک برنامه ساده است. حتی برای یک مبتدی هم ممکن است آن را غیر جالب بداند. با این حال، این برنامه ساده می تواند برنامه های کاربردی بسیار مفیدی نیز پیدا کند. من فقط یک مثال می زنم: پس از فشار دادن دکمه، LED را روشن نمی کنیم، بلکه چشمک می زند (به روشی خاص). و بیایید یک LED با تابش مادون قرمز بگیریم. در نتیجه یک کنترل پنل دریافت خواهیم کرد. این یک برنامه بسیار ساده است.

    در لیست نمونه ها در نسخه های مختلف برنامه تفاوت هایی وجود دارد. اما برای کار با ورودی می توانید به راهنمای زبان ضمیمه مراجعه کنید که دارای مثال و نمودار برنامه (در قسمت مثال ها به نام "پیوست") است. من برنامه را کپی می کنم:

    int ledPin = 13;

    pinMode (ledPin، OUTPUT)؛

    pinMode (inPin، INPUT)؛

    if (digitalRead(inPin) == HIGH)

    digitalWrite (ledPin، HIGH)؛

    digitalWrite (ledPin، LOW)؛

    و همانطور که می بینید، با تغییر برنامه قبلی، یک برنامه کاملا جدید دریافت می کنیم. ال ای دی فقط زمانی چشمک می زند که دکمه ای که به پین ​​2 وصل شده است فشار داده شود. پین 2 از طریق یک مقاومت 10 کیلو اهم به سیم مشترک (زمین، GND) وصل می شود. این دکمه از یک طرف به ولتاژ تغذیه +5 ولت و از طرف دیگر به پایه 2 متصل است.

    در برنامه با یک ساختار زبان جدید if از قسمت کنترل برنامه مواجه می شویم. به این صورت است: اگر شرط (محصور در پرانتز) برآورده شود، بلوک برنامه محصور در پرانتزهای فرفری اجرا می شود. توجه داشته باشید که در شرط (digitalRead(inPin) == HIGH) برابری ورودی با حالت بالا با استفاده از دو علامت مساوی انجام می شود! خیلی اوقات، با عجله، این موضوع فراموش می شود و شرایط نادرست است.

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

    سوال دوم این است که چگونه می توان پین های ماژول استفاده شده در برنامه را پیدا کرد؟

    عکسی که من از سایت گرفتم: http://robocraft.ru/ به شما در فهمیدن این موضوع کمک می کند.

    برنج. 4.1. محل و هدف کنترلر و پین های ماژول آردوینو

    همه پین‌های ماژول CraftDuino من دارای برچسب هستند، بنابراین پیدا کردن پین مناسب آسان است. می توانید یک دکمه و یک مقاومت وصل کنید و عملکرد برنامه را بررسی کنید. به هر حال، در وب سایت فوق الذکر RoboCraft، کل فرآیند در تصاویر نمایش داده می شود (اما برنامه دقیقاً از همان نتیجه گیری استفاده نمی کند!). من به شما توصیه می کنم نگاه کنید.

    بسیاری از میکروکنترلرها شامل دستگاه های سخت افزاری اضافی هستند. بنابراین Atmega168، که بر اساس آن ماژول Arduino مونتاژ شده است، دارای یک UART است، یک واحد داخلی برای ارتباط با دستگاه های دیگر با استفاده از تبادل داده سریال. به عنوان مثال، با یک کامپیوتر از طریق پورت COM. یا با میکروکنترلر دیگری که از بلوک UART داخلی آن استفاده می کند. یک مبدل آنالوگ به دیجیتال نیز وجود دارد. و یک شکل دهنده مدولاسیون عرض پالس.

    استفاده از دومی توسط برنامه ای نشان داده شده است که من همچنین از وب سایت RoboCraft کپی خواهم کرد. اما برنامه را می توان از برنامه نیز گرفت. و شاید در نمونه های برنامه آردوینو باشد.

    // محو شدن LED توسط BARRAGAN

    مقدار int = 0; // متغیر برای ذخیره مقدار مورد نظر

    int ledpin = 9; // LED متصل به پین ​​دیجیتال 9

    // نیازی به فراخوانی تابع pinMode نیست

    for(value = 0 ; value<= 255; value+=5) // постепенно зажигаем светодиод

    analogWrite (ledpin، value)؛ // مقدار خروجی (از 0 تا 255)

    تاخیر (30); // منتظر 🙂

    برای (value = 255; value >=0; value-=5) // به تدریج LED را خاموش کنید

    analogWrite (ledpin، value)؛

    اگر در برنامه قبلی تابع digitalRead(inPin)، خواندن ورودی دیجیتال، برای ما جدید بود، در این برنامه تابع analogWrite(ledpin, value) برای ما جدید است، اگرچه پارامترهای این تابع متغیرهایی هستند که قبلاً برای ما آشنا هستند. . بعداً در مورد استفاده از ورودی آنالوگ، استفاده از ADC (مبدل آنالوگ به دیجیتال) صحبت خواهیم کرد. و اکنون به سوالات کلی برنامه نویسی برمی گردیم.

    برنامه نویسی کاری است که همه می توانند انجام دهند، اما تسلط بر برنامه نویسی و هر زبان برنامه نویسی به زمان نیاز دارد. امروزه تعدادی برنامه وجود دارد که به تسلط بر برنامه نویسی کمک می کند. و یکی از آنها مستقیماً با ماژول آردوینو مرتبط است. Scratch for Arduino یا به اختصار S4A نامیده می شود. می توانید این برنامه را در: http://seaside.citilab.eu/scratch/arduino بیابید و دانلود کنید. نمی‌دانم دقیقاً نام برنامه چگونه ترجمه شده است، اما "شروع از ابتدا" به عنوان "شروع از ابتدا" ترجمه شده است.

    وب سایت پروژه S4A دارای نسخه هایی برای ویندوز و لینوکس است، اما برای سیستم عامل دوم، برنامه آماده نصب در نسخه توزیع دبیان است. نمی خواهم بگویم که نمی توان از آن با سایر توزیع های لینوکس استفاده کرد، اما ابتدا نحوه کار با ماژول آردوینو در ویندوز را خواهیم دید.

    پس از نصب برنامه به روش معمول، می توانید با استفاده از سوئیچ زبان، رابط را به روسی پیکربندی کنید.

    برنج. 4.2. سوئیچ زبان رابط برنامه

    اولین نماد نوار ابزار، با کلیک کردن، تمام زبان های ممکن رابط برنامه را نمایش می دهد. زبان روسی در بخش ...

    برنج. 4.3. لیست زبان های مورد استفاده در رابط برنامه

    ... علامت گذاری شده به عنوان "بیشتر...".

    اگر کاری انجام ندهید، کتیبه در پنجره سمت راست "جستجوی تابلو..." باقی می ماند، اما ماژول پیدا نمی شود. برای اتصال ماژول آردوینو به برنامه S4A، باید چیز دیگری را از وب سایت پروژه دانلود کنید.

    برنج. 4.4. فایل برای آپلود در ماژول آردوینو برای S4A

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

    برنج. 4.5. اتصال ماژول به برنامه

    ورودی های آنالوگ ماژول و همچنین ورودی های دیجیتال متصل نیستند، بنابراین مقادیر نمایش داده شده برای ماژول دائماً به صورت تصادفی تغییر می کنند.

    آردوینو یک برد توسعه آماده و یک زبان برنامه نویسی بسیار ساده است که شروع به کار با میکروکنترلرها را با هزینه اندازه و سرعت برنامه آسان می کند. اخیرا Atmel پشتیبانی از بوت لودر آردوینو را در AVR Studio اضافه کرده است، یعنی می توانید برنامه های نوشته شده با C، C++ یا Assembler را بدون برنامه نویس بنویسید و بارگذاری کنید. علاوه بر این، می توانید در AVR Studio کد را به زبان پردازش/سیم کشی بنویسید.
    توصیه می کنم خواندن مقاله را با به روز رسانی در پایان شروع کنید!
    در این مقاله به آموزش گام به گام نصب نرم افزار برنامه نویسی آردوینو با استفاده از AVR Studio می پردازیم. ما به عنوان یک بررسی از برنامه های افزودنی AVR Studio از سایت easyelectronics.ru استفاده کردیم. ما همه نمونه ها را روی تابلوی خود اجرا خواهیم کرد.

    نصب آردوینو IDE

    ما از آردوینو نسخه 1.5.2 استفاده می کنیم. می توانید آن را در وب سایت رسمی دانلود کنید. آخرین نسخه (1.6.2-r2 در زمان نگارش) به دلایلی با میکروکنترلر Atmega8 کار نمی کند.
    شما یک آرشیو فشرده با محیطی که قبلاً مستقر شده است دانلود خواهید کرد. تنها چیزی که باقی می ماند این است که آن را در فهرست برنامه باز کنید.

    نصب Atmel Studio

    UPD

    می بینم موضوع پرطرفدار است و می خواهم چند نکته را روشن کنم.
    سه راه وجود دارد که من سعی کردم یک برد سازگار با آردوینو در C برنامه ریزی کنم:

    1. مستقیماً در Arduino IDE در C بنویسید. باید بدانید که Processing/Wiring یک زبان نیست، بلکه صرفاً مجموعه ای از ماکروها و کتابخانه ها است. وقتی در آن می نویسید، در هدرهای آن نگاه می کند، کد قابل خواندن توسط انسان شما را به C تبدیل می کند و سپس با کامپایلر استاندارد AVR GCC کامپایل می کند. اگر کدی را به زبان C بنویسید، آنوقت به lib های آن دسترسی نخواهد داشت و بلافاصله همه چیز را همانطور که باید کامپایل می کند، BUT!... در عین حال، لینک دهنده هر آنچه را که بخواهد به پروژه شما اضافه می کند. مزیت این است که شما به چیزی غیر از Arduino IDE نیاز ندارید. نقطه ضعف جادویی است که از توسعه دهنده پنهان است. این روش اغلب در مواردی استفاده می شود که نیاز به پیاده سازی تابعی است که دوستان ایتالیایی ما در زبان خود ارائه نکرده اند.
    2. روش ارائه شده در این مقاله (در واقع عجیب ترین است، زیرا تمام کاستی ها را با هم ترکیب می کند). از نظر ایدئولوژیکی، این افزونه برای برنامه‌نویسی در پردازش/سیم‌کشی و استفاده از Atmel Studio به عنوان رابط مورد نیاز است. همچنین یک عملکرد پولی وجود دارد که به شما امکان می دهد کد را اشکال زدایی کنید، اما من آن را امتحان نکرده ام. بنابراین، اساسا، هنگام برنامه نویسی، همان چیزی که در گزینه اول رخ می دهد، اتفاق می افتد، اما شما در یک IDE متفاوت کار می کنید. در عین حال، از نقطه نظر نتیجه، شما همان چیزی را دریافت می کنید. اگر آردوینو را برنامه‌نویسی کرده‌اید و تصمیم گرفته‌اید آن را در C انجام دهید، راحت باشید که مستقیماً در Arduino IDE بنویسید. اگر رابط کاربری را دوست ندارید، می توانید از یک ویرایشگر معمولی استفاده کنید (من Sublime Text را توصیه می کنم). اگر در Atnel Studio کار می کنید و می خواهید برد خود را مستقیماً از رابط آن فلش کنید یا در آن بنویسید Processing/Wiring (به طور ناگهانی!)، پس این افزونه برای شما مناسب است. ضمنا استودیو فقط تحت ویندوز کار میکنه یعنی روش برای همه نیست. من این مقاله را فقط به این دلیل نوشتم که روش جدیدی برای خودم پیدا کردم، اما آن را دوست ندارم.
    3. روش سوم، به نظر من، بهترین روش برای یک کاربر پیشرفته است. در ابتدا، همه چیز طبق معمول اتفاق می افتد - شما کد را می نویسید، آن را کامپایل می کنید و یک فایل هگز دریافت می کنید. سپس، به یاد داشته باشید که یک برد اشکال زدایی معمولی با یک بوت لودر در دست دارید، ابزاری را دانلود کنید که می تواند به این بوت لودر دسترسی داشته باشد و کد شما را به حافظه منتقل کند. ما قبلاً دستورالعمل های گام به گام را ارسال کرده ایم. در این مورد، توسعه دهنده حداکثر کنترل را بر روی همه عملکردها دریافت می کند، اما ممکن است به دلیل استفاده از یک بوت لودر شخص ثالث، مشکلاتی ایجاد شود.

    من می خواهم یک چیز دیگر را که در آردوینو اتفاق می افتد فاش کنم. هر کاری که انجام دهید، Arduino IDE قطعا خود لوازم جانبی را روشن می کند. به عنوان مثال، تایمرها را شروع می کند. و اگر بخواهید با آنها در C کار کنید، ممکن است متوجه شوید که آنطور که انتظار داشتید کار نمی کنند. و این می تواند به یک مشکل واقعی تبدیل شود. و نمونه های زیادی از این دست وجود دارد، یعنی تعداد زیادی چنگک، عصا و حشرات بالقوه وجود دارد.
    اگر به سادگی یک فایل هگز را آپلود کنید، مشکلات فقط به دلیل بوت لودر ممکن است ایجاد شود. تا کنون فقط یک مورد پیدا کرده ام - پس از تکمیل بوت لودر، UART فعال باقی می ماند. اگر از طریق Arduino IDE بنویسید، آنگاه برای غیرفعال کردن آن در کد شما وارد می شود و چه کسی می داند چه چیز دیگری. اگر فقط می خواهید هگز خود را اجرا کنید، کنترل روی پاهای UART را نخواهید داشت. شما باید به صورت دستی یک غیرفعال کردن UART را به پروژه خود اضافه کنید. این مصنوع و نمونه کد به تفصیل در توضیح داده شده است.
    خب در جمع بندی اکثر بردهای سازگار با آردوینو یک کانکتور برای برنامه نویس ISP دارند. اگر این برنامه نویس را از چینی ها به قیمت 3-4 دلار خریداری کنید، به سرعت تمام این مشکلات را فراموش خواهید کرد.

    اگر از منبع ما حمایت کنید و از فروشگاه محصولات ما بازدید کنید، بسیار خوشحال خواهیم شد.

    اولین کاری که برای تسلط بر آردوینو باید انجام دهید خرید یک برد رفع اشکال است (خرید فوری برد مدار و غیره ایده خوبی خواهد بود). قبلاً توضیح داده ام که چه نوع بردهای آردوینو در بازار وجود دارد. اگر هنوز مقاله را نخوانده اید، توصیه می کنم آن را بخوانید. برای یادگیری اصول اولیه، ما یک برد استاندارد Arduino Uno (اصل یا یک کپی چینی خوب - بستگی به شما دارد) انتخاب می کنیم. هنگام اتصال تخته اصلی برای اولین بار، نباید هیچ مشکلی وجود داشته باشد، اما در مورد "چینی" باید کمی عمیق تر حفاری کنید (نگران نباشید - من همه چیز را نشان می دهم و به شما می گویم).

    آردوینو را با کابل USB به کامپیوتر وصل می کنیم. LED روی برد باید روشن شود بر". یک دستگاه جدید در مدیر دستگاه ظاهر می شود " دستگاه ناشناس". باید درایور را نصب کنید. در اینجا من یک مورد کوچک اضافه می کنم گنگ(گربه حواسش پرت شد - یادم نیست کدام راننده تصمیم گرفت " مشکل دستگاه ناشناخته».

    ابتدا محیط نرم افزار آردوینو را دانلود و از حالت بسته خارج کنید ( arduino-1.6.6-windows). بعد این یکی رو دانلود کردم خود استخراجی است. فایل را راه اندازی کرد CH341SER.EXE. انتخاب شد نصب (نصب). پس از نصب، یک پیام ظاهر شد، روی "کلیک کنید" خوب(وقتی برای خواندن آن نداشتم).

    سپس به ویژگی های دستگاه هنوز ناشناخته رفتم و دکمه "Update Driver" را انتخاب کردم. من گزینه "نصب از یک مکان مشخص" را انتخاب کردم - پوشه ای را با محیط نرم افزار آردوینو زیپ نشده نشان داد. و ببینید، همه چیز با موفقیت کار کرد ...

    ما برنامه آردوینو را راه اندازی می کنیم (در مورد من 1.6.6) و اجازه دسترسی را می دهیم.

    تمام پروژه ها (برنامه ها) برای آردوینو از دو بخش تشکیل شده است: تنظیم خالیو حلقه خالی. تنظیم خالیفقط یک بار انجام می شود و حلقه خالیبارها و بارها انجام می شود.

    قبل از ادامه، دو عملیات اجباری وجود دارد که باید تکمیل شوند:

    - در محیط نرم افزار آردوینو مشخص کنید که از کدام برد استفاده می کنید. Tool->board->Arduino Uno. اگر علامت از قبل روی تابلوی مورد نیاز شما وجود دارد، خوب است، اگر نه، علامت بگذارید.

    - در محیط نرم افزار مشخص کنید که از کدام پورت سریال برای ارتباط با برد استفاده می کنید. ابزار-> پورت-> COM3. اگر علامت قبلاً روی پورت است - خوب است، اگر نه - علامت بگذارید. اگر بیش از یک پورت در قسمت پورت ها ذکر شده است، چگونه می توانید بفهمید که کدام یک برای اتصال به برد استفاده می شود؟ تخته را می گیریم و سیم را از آن جدا می کنیم. دوباره به پورت ها می رویم و می بینیم کدام یک ناپدید شده است. در مورد من، تب "پورت ها" اصلا غیر فعال شد.

    کابل USB را دوباره وصل کنید.

    برای برنامه اول، هیچ ماژول اضافی مورد نیاز نیست. ما LED را که قبلاً روی برد نصب شده است (در پایه 13 میکروکنترلر) روشن می کنیم.

    ابتدا، اجازه دهید پین 13 (برای ورودی یا خروجی) را پیکربندی کنیم.

    برای انجام این کار، وارد بلوک شوید " تنظیم خالی» تیم pinMode ، در پرانتز پارامترها را نشان می دهد (13، خروجی) (کدام خروجی درگیر است، حالت عملیاتی). محیط نرم افزار کلمات / دستورات را با رنگ فونت مناسب برجسته می کند.

    برو به بلوک " حلقه خالی"و دستور را وارد کنید دیجیتال رایت با پارامترها (13، بالا) .


    اولین برنامه آماده است، اکنون باقی مانده است که آن را در میکروکنترلر دانلود کنید. روی دکمه UPLOAD کلیک کنید.

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

    LED را روشن کردیم، کمی درخشید، وقت آن است که آن را خاموش کنیم. برای این کار برنامه ای که نوشته ایم را اصلاح می کنیم. بجای " بالا "بیا بنویسیم" کم ».


    روی دکمه UPLOAD کلیک کنید. LED خاموش شد.

    ما قبلاً با مفهوم "" آشنا شده ایم، وقت آن است که از آن استفاده کنیم. برنامه های بعدی بیشتر و بیشتر حجیم تر و پیچیده تر می شوند و اگر به نوشتن کد به این شکل ادامه دهیم، کار روی تغییر آنها زمان بیشتری خواهد برد.

    ما به برنامه نگاه می کنیم (ال ای دی را دوباره روشن کنید). بیایید شماره پین ​​میکروکنترلر را به عنوان یک عدد تنظیم کنیم 13 ، اما متغیری است که مقدار خروجی مربوطه به آن اختصاص داده می شود (در مورد ما، 13). در آینده، تغییر مقادیر متغیرها در ابتدای برنامه بسیار راحت خواهد بود، به جای جستجوی کد در جستجوی مکان هایی که لازم است مقادیر را تغییر دهید.

    یک متغیر سراسری ایجاد کنید int LED_pin = 13; (نوع متغیر، نام متغیر، مقداری که به آن اختصاص داده شده است).


    روی دکمه UPLOAD کلیک کنید. LED روشن می شود. همه چیز عالی کار می کند.

    در این درس علاوه بر روشن/خاموش کردن LED، نحوه پلک زدن آن را نیز یاد خواهیم گرفت.

    برای انجام این کار، دستور دوم را وارد کنید " دیجیتال رایت» با پارامترها (LED_pin، LOW).


    روی دکمه UPLOAD کلیک کنید. و ما چه می بینیم؟ LED "در کف فرمان" می درخشد. دلیل آن در این واقعیت نهفته است که زمان تعویض دو حالت ( بالا و کم ) ناچیز است و چشم انسان نمی تواند این سوئیچینگ ها را تشخیص دهد. لازم است زمان صرف شده توسط LED در یکی از حالت ها افزایش یابد. برای این کار دستور را می نویسیم تاخیر انداختن با پارامتر (1000 ) . تاخیر در میلی ثانیه: 1000 میلی ثانیه - 1 ثانیه. الگوریتم برنامه به شرح زیر است: LED را روشن کنید - 1 ثانیه صبر کنید، LED را خاموش کنید - 1 ثانیه صبر کنید و غیره.


    روی دکمه UPLOAD کلیک کنید. LED شروع به سوسو زدن کرد. همه چیز کار می کند.

    بیایید برنامه را با ایجاد یک متغیر نهایی کنیم که به آن مقداری که مسئول مدت زمان تاخیر است اختصاص داده می شود.


    روی دکمه UPLOAD کلیک کنید. LED با سوسو زدن سوسو می زند.

    بیایید برنامه ای را که نوشته ایم نهایی کنیم. وظایف به شرح زیر است:

    • روشن شدن LED 0.2 ثانیه و خاموش شدن 0.8 ثانیه؛
    • LED به مدت 0.7 ثانیه روشن و 0.3 ثانیه خاموش می شود.

    این برنامه دارای 2 متغیر است که مسئول تاخیر زمانی هستند. یکی زمان کارکرد LED روشن و دومی زمان کارکرد LED خاموش را تعیین می کند.

    با تشکر از توجه شما. به زودی میبینمت!

    زبان برنامه نویسی آردوینو برای مبتدیان به تفصیل در جدول زیر ارائه شده است. میکروکنترلر آردوینو با یک زبان برنامه نویسی خاص بر اساس C/C++ برنامه ریزی شده است. زبان برنامه نویسی آردوینو گونه ای از C++ است، به عبارت دیگر، هیچ زبان برنامه نویسی جداگانه ای برای آردوینو وجود ندارد. می توانید کتاب PDF را در پایین صفحه دانلود کنید.

    در آردوینو IDE، تمام اسکچ های نوشته شده در یک برنامه به زبان C/C++ با حداقل تغییرات کامپایل می شوند. کامپایلر Arduino IDE نوشتن برنامه‌ها را برای این پلتفرم بسیار ساده می‌کند و ایجاد دستگاه‌ها در آردوینو برای افرادی که دانش گسترده‌ای از زبان C/C++ ندارند بسیار در دسترس‌تر می‌شود. در زیر یک مرجع کوتاه برای توصیف عملکردهای اصلی زبان آردوینو با مثال ارائه خواهیم داد.

    مرجع تفصیلی زبان آردوینو

    زبان را می توان به چهار بخش تقسیم کرد: عبارت ها، داده ها، توابع و کتابخانه ها.

    زبان آردوینو مثال شرح

    اپراتورها

    برپایی() تنظیم خالی ()
    {
    pinMode (3، INPUT)؛
    }
    این تابع برای مقداردهی اولیه متغیرها، تعیین حالت های عملکرد پین ها روی برد و غیره استفاده می شود. این عملکرد فقط یک بار بعد از هر منبع تغذیه به میکروکنترلر اجرا می شود.
    حلقه () حلقه خالی()
    {
    digitalWrite (3، HIGH);
    تاخیر (1000);
    digitalWrite (3، LOW)؛
    تاخیر (1000);
    }
    تابع حلقه در اطراف حلقه می شود و به برنامه اجازه می دهد محاسبات را انجام دهد و به آن واکنش نشان دهد. توابع setup() و loop() باید در هر طرحی وجود داشته باشند، حتی اگر این عبارات در برنامه استفاده نشده باشند.

    اظهارات کنترلی

    اگر
    if(x>
    اگر (x< 100) digitalWrite (3, LOW );
    دستور if در ترکیب با عملگرهای مقایسه استفاده می شود (==، !=،<, >) و درست بودن شرط را بررسی می کند. به عنوان مثال، اگر مقدار متغیر x بزرگتر از 100 باشد، LED در خروجی 13 روشن می شود و اگر کمتر باشد، LED خاموش می شود.
    اگر دیگری
    if (x > 100) digitalWrite (3, HIGH );
    else digitalWrite(3، LOW);
    عبارت else به شما اجازه می دهد تا چکی غیر از آنچه در if مشخص شده است، انجام دهید تا چندین بررسی متقابل را انجام دهید. اگر هیچ یک از بررسی ها نتیجه TRUE دریافت نکرد، بلوک عبارات در else اجرا می شود.
    سوئیچ ... مورد
    سوئیچ (x)
    {


    مورد 3: شکستن

    }
    مانند یک دستور if، یک دستور سوئیچ یک برنامه را کنترل می کند و به شما اجازه می دهد تا اقداماتی را که زمانی انجام می شوند را مشخص کنید. شرایط مختلف. Break فرمانی برای خروج از یک دستور است؛ پیش‌فرض اگر جایگزینی انتخاب نشده باشد اجرا می‌شود.
    برای تنظیم خالی ()
    {
    pinMode (3، OUTPUT)؛
    }
    حلقه خالی()
    {
    برای (int i=0; i<= 255; i++){
    analogWrite(3, i);
    تاخیر (10);
    }
    }
    ساختار for برای تکرار عبارات محصور شده در پرانتزهای فر استفاده می شود. به عنوان مثال، کم نور شدن نور LED. هدر حلقه for از سه قسمت تشکیل شده است: for (initialization; شرط؛ increment) - مقداردهی اولیه یک بار انجام می شود، سپس شرط بررسی می شود، اگر شرط درست باشد، افزایش انجام می شود. حلقه تکرار می شود تا زمانی که شرط شرط false شود.
    در حالی که حلقه خالی()
    {
    در حالی که (x< 10)
    {
    x = x + 1;
    Serial.println(x);
    تاخیر(200);
    }
    }
    دستور while به عنوان یک حلقه استفاده می شود که تا زمانی که شرط داخل پرانتز درست باشد اجرا می شود. در مثال، دستور حلقه while کد داخل پرانتز را تا زمانی که x کمتر از 10 شود، تکرار می‌کند.
    انجام در حالی که حلقه خالی()
    {
    انجام دادن
    {
    x = x + 1;
    تاخیر (100);
    Serial.println(x);
    }
    در حالی که (x< 10);
    تاخیر(900);
    }
    دستور حلقه do...while به همان روش حلقه while عمل می کند. با این حال، اگر عبارت داخل پرانتز درست باشد، حلقه به جای خروج از حلقه ادامه می یابد. در مثال بالا، اگر x بزرگتر از 10 باشد، عملیات جمع ادامه می یابد، اما با مکث 1000 میلی ثانیه.
    زنگ تفريح
    ادامه هید
    سوئیچ (x)
    {
    مورد 1: DigitalWrite (3، HIGH )؛
    مورد 2: DigitalWrite (3، LOW)؛
    مورد 3: شکستن
    مورد 4: ادامه
    پیش فرض: digitalWrite (4، HIGH )؛
    }
    Break برای خروج اجباری از حلقه های سوئیچ، do، for و while بدون انتظار برای تکمیل حلقه استفاده می شود.
    دستور continue از جملات باقیمانده در مرحله حلقه جاری می گذرد.

    نحو

    ;
    (نقطه ویرگول)

    digitalWrite (3، HIGH);
    نقطه ویرگول برای نشان دادن پایان یک عبارت استفاده می شود. فراموش کردن نقطه ویرگول در انتهای یک خط منجر به خطای کامپایل می شود.
    {}
    (پرانتز)
    تنظیم خالی ()
    {
    pinMode (3، INPUT)؛
    }
    پس از پرانتز آغازین "(" باید پرانتز پایانی ")" قرار گیرد. پرانتزهای بی همتا می تواند منجر به خطاهای پنهان و نامفهوم هنگام کامپایل یک طرح شود.
    //
    (یک نظر)
    x = 5; // یک نظر