آردوینو آموزش آردوینو

آموزش آردوینو بخش شانزدهم – دستورات تکمیلی Advance

arduino-basic-tutorial-part-fifteen-advance-functions-digispark
نوشته شده توسط پریسا پوربلورچیان

در آموزش بخش پانزدهم به بررسی توابع کاربردی و دستورات تکمیلی برنامه نویسی آردوینو می‌پردازیم. هر یک از دستورات کاربرد خاصی در اجرای برنامه ها دارد. برای استفاده از چیپ های ۷۴HC595 و یا ۷۴HC516 از فانکشن های SHIFT بایستی استفاده کرد. برای تولید موج مربعی و تولید فرکانس از توابع TONE , NOTONE باید استفاده کرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


تابع noTone()


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

 روش فراخوانی

noTone(pin)

 

 منظور از pin همان پایه آردوینو است. به عنوان مثال آموزش ساخت میکسر صوتی با ماژول ولوم کشویی Slide Potentiometer آردوینو توسط یک بیزر و یک ولوم و ایجاد موج مربعی و فرکانس های مختلف میتوانید با دستور tone مقادیر را تغییر دهید.

#include "Tone.h"

void setup() {
}

void loop() {
  tone(11, 440);
  delay(1000);
  noTone(11);
  delay(4000);
}

 

دستورات تکمیلی Advance در آموزش مقدماتی آردوینو - دیجی اسپارک

 


تابع tone()


تولید موج مربعی در یک فرکانس خاص توسط دستور tone شکل میگیرد.

tone(pin, frequency)
tone(pin, frequency, duration)

 

//یک نمونه برنامه برای تعریف کردن تابع tone

//پایه آردوینو به پایه بیزر متصل است.
int piezoPin = 8; // انتخاب یک پایه برای بیزر 

void setup() {

}//پایان دستورات setup
void loop() {

  /*تابع tone دارای دو آرگومان است
    ۱) Pin#
    ۲) Frequency - this is in hertz (cycles per second) which determines the pitch of the noise made
    ۳) Duration - how long teh tone plays
  */
  tone(piezoPin, 1000, 500);

  //tone(piezoPin, 1000, 500); // انتخاب فرکانس 
  //delay(1000); // انتخاب تاخیر 

}

 

دستوارت مهم برنامه نویسی آردوینو تابع tone() - دیجی اسپارک

 

تابع tone() و راه اندازی بیزر با آردوینو - دیجی اسپارک

 


تابع pulsein()


 از تابع pulseIn() برای خواندن پالس از پین میکروکنترلر استفاده می‌شود. اگر مقدار value برابر با High باشد، منتظر می‌ماند تا پین از وضعیت LOW به  HIGH تغییر وضعیت دهد. سپس زمان اندازه گیری شده و منتظر می‌ماند تا پین به وضعیت LOW برگردد و سپس زمان متوقف میگردد. مقدار پالس بر حسب میکروثانیه برمیگردد. زمان بندی این تابع به صورت تجربی تعیین شده و ممکن است در پالس های طولانی خطا در اندازه گیری وجود داشته باشد.

 

روش فراخوانی

pulseIn(pin, value)
pulseIn(pin, value, timeout)

 

int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

 

استفاده از دستور pulsein برای srf

int TRIG_PIN=13;
 int ECHO_PIN=12;
void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);}
void loop() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  int duration= pulseIn(ECHO_PIN, HIGH);
 int distance= duration/29/2;
 if(duration==0){
   Serial.println("Warning: no pulse from sensor");
   } 
  else{
      Serial.print("distance to nearest object:");
      Serial.println(distance);
      Serial.println(" cm"); }
 delay(100);}

 

تابع pulsein() در راه اندازی سنسور آلتراسونیک آردوینو - دیجی اسپارک

 


تابع pulseInLong()


pulseInLong () جایگزینی برای pulseIn () است که در کنترل پالس طولانی و استفاده از اینتراپت بهتر است. پالس را از یک پایه خوانده و اگر دارای ارزش high باشد، تابع pulseinlog منتظر میماند تا پین از low به high برسد. زمان شروع شده و سپس منتظر میماند تا مجدد به low برسد. سپس مدت زمان پالس را بر حسب میکروثانیه ارسال می‌کند.

 روش فراخوانی

pulseInLong(pin, value)
pulseInLong(pin, value, timeout)

 

int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseInLong(pin, HIGH);
  Serial.println(duration);
}

 

تابع pulseInLong() در راه اندازی SRF با آردوینو - دیجی اسپارک

 


تابع shiftIn()


تابع shiftin برای دریافت دیتا استفاده می‌شود. این تابع از همه ی پایه های دیجیتال میتواند استفاده کند. از این تابع برای دریافت ورودی سریال از یک چیپ موازی به سریال است. تراشه ای مانند ۷۴hc165 که میتوانید تعداد پایه های ورودی پردازنده را فقط توسط دو پایه افزایش دهید. Arduino shiftIn یک پیاده سازی کاملا نرم افزاری از یک رابط ورودی سریال است. رابط سخت افزاری معادل SPI است اما توجه داشته باشید shiftIn () نیمی از آن رابط یعنی قسمت ورودی داده را نشان می دهد.

 روش فراخوانی

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

 

پارامترها

  • PIN = پایه ای که به عنوان بیت ورودی مشخص می‌شود.
  • CLOCKPIN = برای توگل شدن سیگنالی که از پایه ی ورودی دیتاپین خوانده می‌شود.
  • BITORDER = کدام دستور شیفت ها را انجام میدهد.

 

تابع shiftIn() در برنامه‌نویسی آردوینو برای خواندن داده‌ها از یک واسط سریال ساختارداده‌ای به نام “شیفت رجیستر” (Shift Register) استفاده می‌شود. شیفت رجیسترها به عنوان ورودی و خروجی‌های دیجیتال مورد استفاده قرار می‌گیرند و به شما امکان می‌دهند تعداد زیادی سیگنال دیجیتال را با استفاده از تنها یک تعداد کمتری پین دیجیتال مدیریت کنید.

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

سینتکس تابع shiftIn() به صورت زیر است:

int shiftIn(int dataPin, int clockPin, int bitOrder)

 

پارامترها:

  • dataPin: پین مربوط به ورودی داده شیفت رجیستر.
  • clockPin: پین مربوط به سیگنال کلاک شیفت رجیستر.
  • bitOrder: تعیین ترتیب بیت‌ها در خروجی (می‌تواند MSBFIRST یا LSBFIRST باشد).

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

int dataPin = 8;   // پین ورودی داده
int clockPin = 9;  // پین کلاک
int bitOrder = MSBFIRST; // ترتیب بیت‌ها از پایین به بالا

void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = shiftIn(dataPin, clockPin, bitOrder);
Serial.println(sensorValue);
delay(1000);
}

 

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

 


تابع shiftOut()


تابع shiftOut() در برنامه‌نویسی آردوینو برای ارسال داده‌ها به یک شیفت رجیستر (Shift Register) به منظور کنترل ارتباط داده‌ای با دستگاه‌های خارجی استفاده می‌شود. این تابع به شما امکان می‌دهد داده‌ها را به شیفت رجیستر ارسال کرده و کنترل بیت‌های مختلف آن را داشته باشید.سینتکس تابع shiftOut() به صورت زیر است:

void shiftOut(int dataPin, int clockPin, int bitOrder, byte value)

 

پارامترها:

dataPin: پین مربوط به ارسال داده به شیفت رجیستر.
clockPin: پین مربوط به سیگنال کلاک شیفت رجیستر.
bitOrder: تعیین ترتیب بیت‌ها در داده‌ها که می‌تواند MSBFIRST یا LSBFIRST باشد.
value: داده‌ای که باید به شیفت رجیستر ارسال شود.

به عنوان مثال، اگر می‌خواهید بایت ۰b11001010 را به یک شیفت رجیستر ارسال کنید، می‌توانید از تابع shiftOut() به این صورت استفاده کنید:

int dataPin = 8;   // پین ارسال داده
int clockPin = 9;  // پین کلاک

void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}

void loop() {
// ارسال بایت ۰b11001010 به شیفت رجیستر با ترتیب بیت‌های MSB به LSB
shiftOut(dataPin, clockPin, MSBFIRST, 0b11001010);
delay(1000);
}

 

در این مثال، با فراخوانی تابع shiftOut()، بایت ۰b11001010 به شیفت رجیستر ارسال شده و سپس با تاخیر یک ثانیه، دستگاه خارجی که به شیفت رجیستر متصل است، می‌تواند از این داده‌ها استفاده کند.توسط فانکشن SHIFTOUT بسیاری از چیپ ها را میتوانیم کنترل کنیم. به عنوان مثال کنترل دیوایس های سریال مثل سنسور BMP280 و یا تراشه ۷۴HC595 که هر دو در دو آموزش جداگانه کامل بر روی سایت تحلیل شده است. Arduino shiftOut یک پیاده سازی کاملا نرم افزاری از یک رابط خروجی سریال است. رابط سخت افزاری معادل SPI است. بسیاری از چیپ ها از یک رابط سریال برای کاهش استفاده ی فیزیکی از پین ها استفاده می‌کنند. از SHIFTOUT برای ارسال دیتا استفاده می‌شود و از همه ی پایه های دیجیتال برای فراخوانی میتوان استفاده کرد. در آموزش راه اندازی آی سی شیفت رجیستر روش استفاده از SHIFTOUT گفته شده است. روش فراخوانی فانکشن به صورت زیر است.

shiftOut(dataPin, clockPin, bitOrder, value)

 

آموزش شیفت رجیستر

تابع shiftIn() در بردهای آردوینو - دیجی اسپارک

 


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


آردوینو 

همین!

 


جمع بندی لیدی پای


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

 

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

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۱۹ دیدگاه