در برخی از شرایط، راه اندازی دو (یا بیشتر) برد آردینو برای اشتراک اطلاعات با یکدیگر می تواند مفید باشد. در این مثال ، دو آردینو برای برقراری ارتباط با یکدیگر در یک پیکربندی Master Reader/Slave sender از طریق پروتکل سنکرون I2C پروگرم شده اند. چندین توابع از کتابخانه Wire آردینو در انجام این کار استفاده شده اند. آردینو 1 ، به عنوان Master ، برای درخواست دادن، و سپس خواندن ، 6 بایت از داده ی فرستاده شده از آدرس منحصر به فرد آردینو Slave پروگرم شده است. به محض اینکه پیام دریافت شد، می تواند پس از آن در serial window آردینو مشاهده شود.
پروتکل I2C شامل استفاده از دو سیم برای ارسال و دریافت داده است: یک پین کلاک سریال (SCL) که پالس های آردینو در یک فاصله منظم باشد و دیگر یک پین سریال داده (SDA) ، که داده ها بین دو دستگاه فرستاده می شود. همانطور که پالس کلاک از پایین به بالا(شناخته شده به عنوان لبه بالا رونده کلاک) تغییر می کند، یک بیت از اطلاعات شامل آدرس یک دستگاه به خصوص و یک درخواست برای داده، از آردینو به دستگاه I2C بر روی خط SDA منتقل می شود. وقتی که پین کلاک از بالا به پایین (لبه پایین رونده کلاک) تغییر می کند. بر روی انتقال دستگاه نامیده می شود. داده های آن بر روی خط یکسان به آردینو دیگر برمی گردند. زیرا پروتکل I2C به هر دستگاه فعال اجازه داشتن یک آدرس منحصربه فرد را می دهد و مانند دو دستگاه maste و slave به برقراری به نوبت ارتباط بر روی یک خط تنها میسر می سازد، ممکن است آردینو شما با دستگاه های زیادی (به نوبت) ارتباط برقرار کند درحالی که تنها از دو پین از میکروکنترلر شما استفاده می شود.
سخت افزار موردنیاز
(2) برد آردینو
سیم
مدار
پین 4 (پین کلاک ،یا SCL) و پین 5 (پین Data یا SDA) روی آردینو master به مقابل آن برد slave متصل کنید. ممطمئن باشید که هر دو برد به اشتراک گذاشته شده ؛ زمین مشترک داشته باشند. به منظور فعال کردن ارتباط سریال ، آردینو master باید به کامپیوترتان از طریق USB متصل باشد.
اگر تأمین تغذیه آردینو ها مستقلا دارای مشکل شد، خروجی آردینو Master را به پین VIN روی Slave وصل کنید.
شماتیک
کد:
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop()
{
Wire.requestFrom(2, 6); // request 6 bytes from slave device #2
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // receive a byte as character
Serial.print(c); // print the character
}
delay(500);
}
لینک سایت:Arduino - MasterReader