در برخی از شرایط، راه اندازی دو (یا بیشتر) برد آردینو برای اشتراک اطلاعات با یکدیگر می تواند مفید باشد. در این مثال ، دو آردینو برای برقراری ارتباط با یکدیگر در یک پیکربندی Master Writer/Slave Receiver از طریق پروتکل سنکرون I2C پروگرم شده اند. چندین توابع از کتابخانه Wire آردینو در انجام این کار استفاده شده اند. آردینو 1 ، به عنوان Master ، برای فرستادن ، 6 بایت از داده ی در هر ثانیه به آدرس منحصر به فرد آردینو Slave پروگرم شده است. به محض اینکه پیام دریافت شد، می تواند پس از آن در serial window آردینو مشاهده شود.
پروتکل I2C شامل استفاده از دو سیم برای ارسال و دریافت داده است: یک پین کلاک سریال (SCL) که پالس های آردینو در یک فاصله منظم است و یک پین دیتا سریال (SDA) دیگر ، که داده ها بین دو دستگاه فرستاده می شود. همانطور که پالس کلاک از پایین به بالا(شناخته شده به عنوان لبه بالا رونده کلاک) تغییر می کند، یک بیت از اطلاعات شامل آدرس یک دستگاه به خصوص و یک درخواست برای داده، از آردینو به دستگاه I2C بر روی خط SDA منتقل می شود. وقتی که پین کلاک از بالا به پایین (لبه پایین رونده کلاک) تغییر می کند. بر روی انتقال دستگاه نامیده می شود. داده های آن بر روی خط یکسان به آردینو دیگر برمی گردند. هشت بیت اولیه (یعنی هشت پالس کلاک) از Master به Slave شامل آدرس دستگاه Master که از آن داده
می خواهد. بیت های بعدی شامل آدرس حافظه روی Slave که Master می خواهد داده از آن بخواند یا که بنویسد، و داده های نوشته شده،اگر باشد.
هر دستگاه Slave باید آدرس منحصر به فرد خود را داشته باشد و هر دو دستگاه master و slave برای برقراری ارتباط روی خط داده یکسانی به نوبت
قرار بگیرند. در این راه، امکان دارد آردینو شما با بسیاری از دستگاه ها یا آدینو های دیگر ، تنها با استفاده از دو پین از میکروکنترلرتان و با استفاده از آدرس منحصر به فرد هر دستگاه ارتباط برقرار کند.
سخت افزار موردنیاز
(2) برد آردینو
سیم
مدار
پین 4 (پین کلاک ،یا SCL) و پین 5 (پین Data یا SDA) روی آردینو master به مقابل آن برد slave متصل کنید. ممطمئن باشید که هر دو برد به اشتراک گذاشته شده ؛ زمین مشترک داشته باشند. به منظور فعال کردن ارتباط سریال ، آردینو master باید به کامپیوترتان از طریق USB متصل باشد.
اگر تأمین تغذیه آردینو ها مستقلا دارای مشکل شد، خروجی آردینو Master را به پین VIN روی Slave وصل کنید.
شماتیک
کد:
Master Writer Code - Program for Arduino 1
// Wire Master نویسنده
// by Nicholas Zambetti <http://www.zambetti.com>
// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
}
byte x = 0;
void loop()
{
Wire.beginTransmission(4); // انتقال به دستگاه #4
Wire.write("x is "); // پنج بایت را ارسال می کند
Wire.write(x); // یک بایت را ارسال می کند
Wire.endTransmission(); // توقف انتقال
x++;
delay(500);
}
Slave Receiver Code - Program for Arduino 2
// Wire Slave Receiver
// by Nicholas Zambetti <http://www.zambetti.com>
// Demonstrates use of the Wire library
// Receives data as an I2C/TWI slave device
// Refer to the "Wire Master Writer" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include <Wire.h>
void setup()
{
Wire.begin(4); // پیوستن به درگاه I2C
// با آدرس #4
Wire.onReceive(receiveEvent); // event رجیستر
Serial.begin(9600); // شروع به کار سریال برای خروجی
}
void loop()
{
delay(100);
}
// تابعی که هر دیتا دریافت شده از مستر را اجرا می کند
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
while(1 < Wire.available()) // حلقه سراسری به جز آخر
{
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // دریافت بایت به عنوان اینتیجر
Serial.println(x); // چاپ اینتیجر
}
لینک سایت:Arduino - MasterWriter