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

آموزش پروتکل I2C با آردوینو Arduino – قسمت دوم

نوشته شده توسط اروند طباطبایی

با بخش دوم از توابع کتابخانه Wire.h در خدمت شما هستیم. پروتکل I2C را در ادامه با مرجع تخصصی آردوینو، دیجی اسپارک همراه باشید.

 

Wire.onReceive(handler)

هنگامی که فرستنده درخواست دیتا از گیرنده دارد، با فراخوانی یک تابع انجام میدهد. این تابع، تابع مورد نطر را تنظیم می کند.

 

پارامترها :

handler: تابعی که فراخوانی می شود. بدون آرگومان است و مقداری را هم بازگشت نمی دهد.

 

مثال :                                                                                                                   void myHandler()

Wire.onReceive(handler)

 

هنگامی که گیرنده دیتایی را از فرستده میگیرد؛ تابعی را فراخوانی میکند.این تابع، تابع مورد نظر را فراخوانی می کند.

پارامترها :

handlr : تابعی که هنگام دریافت گیرنده فراخوانده می شود. دارای یک آرگومان است ( شماره بایتی که از فرستنده می خواند.) اما مقداری را بازگشت نمی دهد.

 

مثال :                                                                                             void myHandler(int numBytes)

 

Wire.send()

دیتا را از گیرنده در پاسخ به درخواست فرستنده ویا بایت های ارسالی را از فرستنده به گیرنده ( بین دو تابع دیگر beginTransmission() و endTransmisson() ) می فرستد.

Syntax

Wire.send(value)

Wire.send(string)

Wire.send(data, quantity)

 

پارامترها :

value : یک بایت برای ارسال ( از نوع byte )

string : یک رشته برای ارسال ( از نوع char)

data: یک دیتای آرایه ای برای ارسال ( از نوع byte )

quantity : شماره بایت ارسال شونده ( از نوع byte )

تفاوت این تابع با تابع write در این است که تابع send  بدون مقدار بازگشتی است اما تابع write می تواند شماره بایت های نوشته شده را برگرداند.

یک نمونه از برنامه فرستنده و گیرنده :

 

آموزش پروتکل I2C با آردوینو ( قسمت دوم)

آموزش پروتکل I2C با آردوینو ( قسمت دوم)

 :master writer code

#include <Wire.h>

void setup() {
  Wire.begin(); // join i2c bus
}

byte x = 0;

void loop() {
  Wire.beginTransmission(8);
  Wire.write("x is ");
  Wire.write(x);
  Wire.endTransmission();

  x++;
  delay(500);
}

 : slave resiver code

#include <Wire.h>

void setup() {
  Wire.begin(8);
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
}

void loop() {
  delay(100);
}

void receiveEvent(int howMany) {
  while (1 < Wire.available()) {
    char c = Wire.read();
    Serial.print(c);
  }
  int x = Wire.read();
  Serial.println(x);
}

 

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

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

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

۱ دیدگاه

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