برد هوش مصنوعی Sipeed

راه اندازی و کار با برد Maixduino بخش چهارم: ورودی و خروجی دیجیتال I/O

getting-started-with-sipeed-m1-maixduino-step-three-digital-io-digispark
نوشته شده توسط معین صابری

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

 


نحوه خواندن ورودی دیجیتال


همانطور که اطلاع دارید، پایه های دیجیتال در پردازنده ها به صورت ورودی و یا خروجی تعریف می شوند. در این قسمت نیز ورودی را مورد بررسی قرار می دهیم. پیش از هر چیز به کمک تابع pinMode وضعیت خروجی یا ورودی را به شکل زیر تعیین می کنیم. کلیه این توابع و دستورات در نرم افزار Arduino IDE اجرا می‌شوند.

pinMode(pin number, mode)

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

توضیح مقدار
تعریف به صورت ورودی INPUT
ورودی با مقاومت داخلی پول آپ INPUT_PULLUP
ورودی با مقاومت داخلی پول داون INPUT_PULLDOWN
تعریف به صورت خروجی OUTPUT

 

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

VALUE= digitalRead(pin number)

 

 مطابق تابع فوق، خروجی برابر با HIGH یا LOW خواهد بود. همانطور که اطلاع دارید، HIGH به معنای یک منطقی و LOW به منزله صفر منطقی خواهد بود.

 


نحوه ایجاد خروجی دیجیتال


در قسمت پیشین در رابطه با نحوه خواندن ورودی دیجیتال صحبت کردیم. پایه های GPIO برد Maixduino قابلیت تعریف به عنوان خروجی نیز، دارند. به این منظور، ابتدا به کمک تابع pinMode باید وضعیت پایه مد نظر به عنوان خروجی تعیین شود. به عنوان مثال قطعه کد زیر پایه ۷ را به عنوان خروجی تعریف می کند.

PinMode(7,OUTPUT);

 

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

digitalWrite(pin_number, value);

 

 مطابق تابع فوق، ورودی نخست شماره پایه را تعیین می کند. ورودی دوم نیز دارای دو مقدار معتبر است. این دو مقدار، یکی HIGH برای یک منطقی و LOW برای صفر است. در ادامه جهت روشن تر شدن موضوع، مثالی قرار می گیرد.

 


اجرای یک نمونه برنامه


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

void setup()
{
  pinMode(7, OUTPUT);  //انتخاب پایه شماره ۷ به عنوان خروجی
  pinMode(8, INPUT_PULLUP); // انتخاب پایه ۸ به عنوان ورودی با مقاومت داخلی پول آپ شده
  //توجه: در صورت پول آپ، پیاه مقدار پیشفرضی برابر با ۱ منطقی خواهد داشت. با اتصال این پایه به GND، مقدار صفر خواهد شد.
}


void loop()
{
  if (digitalRead(8) == LOW)
    digitalWrite(7, LOW);
  else
    digitalWrite(7, HIGH);

}

 


 ایجاد فرکانس صوتی بر روی پایه های خروجی


پس از بررسی وضعیت پایه ها، به سراغ یک ویژگی جالب در برد sipeed می رویم. به کمک این قابلیت می توانید یک صدا با فرکانس دلخواه و مدت زمان مد نظر خود، ایجاد کنید. برای این مورد از تابعی به نام tone استفاده کنیم. برای این مورد داریم.

tone(pin_number ,frequency ,duration)

 

 در تابع فوق، ورودی نخست شماره پایه ای که قصد ایجاد صدا را دارید تعیین می نماید. ورودی دوم فرکانس صوت به هرتز و ورودی سوم نیز مدت زمان پخش صدا را به میلی ثانیه تعیین می نماید. توجه داشته باشید که ورودی سوم اختیاری است. ورودی دوم از نوع unsigned int و ورودی سوم از نوع unsigned long خواهد بود. در ادامه چنانچه قصد توقف پخش صدا را دارید، کافیست از تابع noTone استفاده کنید. این تابع در ورودی خود، شماره پایه را دریافت می نماید. برنامه زیر، صدایی را با فرکانس ۲۵۰ هرتز به مدت ۵ ثانیه روی پایه ۷ ایجاد می کند. برای شنیدن صدا کافیست یک بلندگو به به پایه ۷ متصل کنید تا صدا را بشنوید.

void setup() {
  tone(7,250,5000);
 

}

void loop() {
}

 


لوازم مورد نیاز


بردهای مبتنی بر هوش مصنوعی Sipeed

برد Maixduino

 


جمع بندی


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

 

چنانچه هرگونه ابهامی در مطالب درج شده وجود دارد، می توانید با ثبت نظر در انتهای همین پست سوال خود را بپرسید. تاکنون در دیجی اسپارک بیش از ۲۶ هزار سوال و پاسخ ثبت شده است؛ پس نظرات بی جواب نمی مانند! همچنین اگر ایراد و یا اشکالی در مطالب درج شده وجود دارد، لطفا آن را با ثبت نظر، مطرح کنید. همچنین اگر مشکلی در کدها وجود داشته و یا اجرا نمی شوند، مورد را حتما در انتهای همین آموزش مطرح نمایید. نظرات شما برای ما بسیار ارزشمند هسنند!! 

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه