با بخش دوم از توابع کتابخانه 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 می تواند شماره بایت های نوشته شده را برگرداند.
یک نمونه از برنامه فرستنده و گیرنده :
: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); }
سلام
مرسی از سایت خوب و مطالب فوق العادتون
یک سوال دارم
اینکه مثلا در همین برنامه ی بالا اگه ایکس به مقدار خاصی رسید، باس متوقف بشه و اسلیو بره داخل یک وقفه کاری رو انجام بده و وقتی تمام شد باس فعال شه و کار ادامه پیدا کنه