×

هشدار

JFolder::create: حلقه بینهایت شناسایی شد

کنترل گنو/لینوکس با آردوینو(پارت ۴)

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

اگر هنوز آموزش های قبلی رو مشاهده نکرده اید از لینک های زیر کمک بگیرید.

مشاهده پارت اول

مشاهده پارت دوم

مشاهده پارت سوم

خب کد سخت افزار رو میتونین از این قسمت دانلود کنید:

دانلود کد سخت افزار

کد رو توسط برنامه آردوینو باز میکینم و در ادامه کدها رو با هم مرور میکنیم.

void setup() {
  pinMode(9, OUTPUT);
    pinMode(6, OUTPUT);
      pinMode(5, OUTPUT);
        pinMode(3, OUTPUT);
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  }

در کد بالا پایه های ۹،۶،۵  و ۳ به عنوان خروجی در نظر گرفته شده اند و نرخ ارسال روی ۹۶۰۰ برای پورت سریال تنظیم شده است.

 char i;
      char brt;
        char mess;

متغیر i برای ریست کردن بخشی از متغیر ها بکار برده شده است.متغیر brt  برای تنظیمات روشنایی و متغیر mess وظیفه ارسال پیغام رو بر عهده داره که همه این ۳ نوع متغیر از نوع کاراکتری میباشند.

void loop()

حلقه بی پایان هست که کابین برنامه ما رو تشکیل داده.

  int low=100;
    int hi=200;
      int mute=60;

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

int sensorValue1 = analogRead(A0);
    int sensorValue2 = analogRead(A1);
      int sensorValue3 = analogRead(A2);
        int sensorValue4 = analogRead(A3);

این دستورات هر کدام ورودی های آنالوگ رو برای ما میخونن و مقادیر اونها رو در sensorValueX ذخیره میکنند که بعدا بتونیم ازش استفاده کینم.پورت های A0,A1,A2,A3 چهار ورودی آنالوگ ما هستن که به سوزن ته گردها متصل شده اند!

 if(sensorValue1<=1000){
    analogWrite(9, 50);
      Serial.print(mute);
        Serial.print("\n");
          i=0;
      }

این یک شرط هست که میگه اگر ورودی آنالوگ ۱ زیر ۱۰۰۰ بود(در صورت لمس سوزن ته گرد مربوطه این مقدار از ۱۰۲۴ به زیر ۱۰۰۰ افت پیدا میکنه)روی پورت ۹ مقدار ۵۰ رو بنویس(مقدار روشنایی LED  که از صفر تا ۲۵۵ قابل تنظیم هست و ما برای مصرف کمتر انرژی روی ۵۰ ست کردیم)،و در دستور بعدی مقدار mute رو روی خروجی سریال پرینت میکنیم که توسط کنسول قابل مشاهده خواهد بود(مقدار mute  طبق مقداری که  بالاتر به آن اختصاص دادیم برابر ۶۰ میباشد) و در دستور سوم علامت "\n"رو پرینت میکنیم که به عنوان یک اینتر عمل میکنه(عامیانه بخواهیم بگیم بعد از نوشتن مقدار  mute  انگار کلید اینتر رو فشار میدیم تا به سطر بعدی برود!) و در نهایت i=0 قرار میدهیم.

 if(sensorValue2<=1000){
  analogWrite(6,50);
    Serial.print(hi);
      Serial.print("\n");
        i=0;
  }
 //********************************read input 3 & write on serial port
 if(sensorValue3<=1000){
  analogWrite(5,50);
    Serial.print(low);
      Serial.print("\n");
        i=0;
  }

کدهای بالا دقیقا همان کدی هست که در بالاتر توضیح دادیم فقط ورودی ها و خروجی ها رو تغییر دادیم که نیاز به توضیح مجدد ندارد و فقط به جای مقدار "mute" مقادیر "hi" و "low" نوشته میشه که در کنسول قابل مشاهده خواهد بود.

در حقیقت این ۳ بخش از کد،وظیفه پرینت مقادیر رو بر عهده دارند.

 if(sensorValue4<=1000){
     mess=10;
       brt=1;
         analogWrite(9,200);
           delay(100);
             analogWrite(9,0);
               delay(100);
                 analogWrite(6,70);
                   delay(100);
                     analogWrite(6,0);
                       delay(100);
                         analogWrite(5,70);
                           delay(100);
                             analogWrite(5,0);
                               delay(100);
                                 analogWrite(3,70);
                                   delay(100);
                                     analogWrite(3,0);
                                       delay(100);
                                         Serial.print(mess);
                                          Serial.print(mess);
                                           delay(100);
                                             Serial.print("\n");
                                               i=0;
     }

اما دکمه چهارم وظیفه سوییچ به حالت تنظیم روشنایی رو برعهده داره که یکسری کد تکراری هستن که توضیح میدیم. بعد از لمس دکمه چهارم مقدار mess روی ۱۰ و مقدار brt برابر ۱ میشه و روشنایی هر چهار LED رو با تاخیر ۱۰۰ میلی ثانیه ای به صورت منظم مشاهده خواهیم کرد که روشن و خاموش خواهند شد تا ما متوجه تغییر رویه از حالت صوت به روشنایی بشیم.دستور بعدی Serial.print(mess) هست که مقدار mess رو روی پورت سریال مینویسه و با دریافت مقدار ۱۰ یا همون  mess در بش، پیغام تغییر وضعیت به حالت روشنایی رو توسط نوتیفیکیشن متوجه خواهیم شد،این دستور ۲ بار ارسال میشه و بعد از تاخیر ۱۰۰ میلی ثانیه  ای عمل اینتر رو روی پورت سریال مینویسیم و مقدار i رو روی صفر قرار میدیم.

 i=i+1;
    if(i>=40){
    analogWrite(9,0);
    analogWrite(6,0);
    analogWrite(5,0);
     i=0;
     }
     

شاید تا اینجای کار مقدار i برای شما سوال باشه ولی با مشاهده دستور بالا متوجه خواهیم شد که بعد از لمس دکمه ها LED مربوطه روشن میشه و برای خاموش کردن دسته جمعی اونها این کدها رو نوشتیم. اگر شما دکمه ای رو لمس کنید LED متناظر با اون روشن میشه و ما نیاز داریم تا اون رو خاموش کنیم. در حالت عادی اگر دکمه ای رو لمس نکنیم مقدار i  تا ۴۰ شمرده میشه و بعد از ۴۰ سیکل مقادیر صفر روی پورت ۹،۶ و ۵ نوشته میشه و ما در بخش های بالایی بعد از لمس دکمه مقدار i رو مساوی صفر میگیریم تا ۴۰ سیکل LED ما روشن بمونه.

دستور اول شروع به اضافه نمودن مقدار i  میکنه و سطر بعدی منتظر میشه تا مقدار به بزرگتر از ۴۰ برسه تا عملیات خاموش کردن پورت های تعریف شده رو انجام بده و در نهایت نیاز داریم که مجدد i  رو برابر صفر بگیریم تا رویه ۴۰ سیکل منظم اجرا بشه.

while(brt==1)

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

دقیقا توی همین حلقه همون کدهای بالا رو کپی کردیم با این تفاوت که مقادیر و نوع متغیر ها رو تغییر دادیم تا تداخلی با حلقه ی اولی نداشته باشیم.

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

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

ویدیویی از سخت افزار:

با تشکر

فرم نظر دهی


تصویر امنیتی جدید تصویر امنیتی
116890
TodayToday84
YesterdayYesterday155
This_WeekThis_Week244
This_MonthThis_Month2678
All_DaysAll_Days116890