آموزش آردوینو پروژه دوم
اینجا دیدید که چطور اولین گام رو برای شروع کارمون در آموزش آردوینو برداشتیم. شاید یک LED چشمکزن، ساده به نظر بیاد؛ اما طبق یک افسانهی قدیمی کسی که یکبار LEDD ها رو خاموش روشن کنه نفرین اونها تا پایان عمر گریبانش رو میگیره و نمیتونه هیچ پروژهای رو بدون روشن خاموش کردن اونها به پایان برسونه!
حالا که این نفرین گریبانمون رو گرفته، بهتره بیشتر باهاش آشنا بشیم!
توی نمونه کدی که استفاده کردیم دوتا تابع اصلی وجود داشت، یکی Setup و اون یکی هم Loop.
تابع Setup اینجا مختصری دربارهاش توضیح دادهشده و بهطور خلاصه ما توی این پروژه برای پیکربندی وضعیت پینها ازش استفاده کردیم. پین چیه؟ پین پینه دیگه! رو بوردتون نگاه کنید. توی دو طرفش تعداد زیادی ازش وجود داره. شما اول باید تو همین تابع Setup تکلیف خودتون و بوردتون رو با این پینها مشخص کنید. فعلاً همینقدر میدونم که میتونیم وضعیت ورودی یا خروجی بودنشون رو مشخص کنیم.
شاید برای شما مفید باشد: پروژه های آردوینو
طبیعتاً شما بهجای LED_BUILTIN میتونید بنویسید 5 که منظورتون همون پین شماره 5 هست.
تابع Loop هم که باز اینجا دربارهاش توضیح دادهشده و تا وقتی جان در بدن دارد مرتباً تکرار میشه!
ما توی این پروژه کار هیجانانگیزی کردیم و مقداری رو توی خروجی یک پایه قرار دادیم! با همین یک خط دستور digitalWrite اعلام کردیم مقدار HIGH که ۱ هست و یا مقدار LOW که همون صفر هست رو توی خروجی قرار بده.
1 2 3 4 5 6 7 8 9 10 11 12 | void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } |
برای پروژه دوم هم دست به دامان LED میشیم. این بار تلاش کردم نور LED رو بهجای خاموش روشن شدن یک باره، از کمنور به پرنور برسونم.
با جستجو متوجه شدم که بجای HIGH و LOW میشه مقداری بین 0 تا 255 رو بر روی خروجی پایه قرار داد بنابراین کد زیر رو نوشتم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int brightness=0; int steps=5; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, brightness); brightness+=steps; if(brightness<=0 || brightness>=255) steps=-steps; delay(30); } |
متأسفانه LED داخلی بورد بهقدری کوچیکه که با چشم غیرمسلح این تغییر نور رو نمیشه حس کرد! بنابراین وقتش رسیده که از دوست قدیمیمون، بِرِد بورد استفاده کنیم. اگه شما هم کلاً ریست فکتوری کردید و یادتون رفته اصلاً این موجود سوراخ سوراخ چی بود یه گوگل کوتاهی در مورد نحوه اتصال ردیفها و ستونها انجام بدین.
همونطور که میبینید، چند موجود عجیب و جدید وارد پروسهی پیچیدهی آموزش ما شدند! یک مقاومت شل و ول که بهم توصیه شد برای جلوگیری از سوختن LED ازش استفاده کنم و یک سیم که دوتا سرش پین داره و راحت توی برد بورد قرار میگیره.
پایه شماره ۳ رو با مقاومت به پایه مثبت LED متصل کردم و با اون سیم هم اتصالی بین پایه زمین بورد (که با GND مشخصشده) و پایه زمین LED برقرار کردم.
توی برنامه، LED_BULTIN رو با شماره ۳ (که میتونست هر پایه دیگهای باشه) جایگزین کردم و برنامه رو اجرا کردم.
LED روشن شد اما نه اونطور که باید میشد؛ یعنی همچنان مثل قبل بهصورت صفر و یک روشن میشد. بعد از حدود ۴۰ دقیقه کاوش فهمیدم که خوب طبیعتاً وقتی از تابع digitalWrite استفاده میکنید نمیتونید مقادیری غیر از صفر و یک داشته باشید، پس analogWrite رو جایگزین کردم و شد آنچه شد!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int brightness=0; int steps=5; void setup() { pinMode(3, OUTPUT); } void loop() { analogWrite(3, brightness); brightness+=steps; if(brightness<=0 || brightness>=255) steps=-steps; delay(30); } |