실행결과 : 1초에 한 번씩 slave쪽 시리얼 모니터에 hello가 출력됨
#include <Wire.h>
#define SLAVE 2
// master
//
void setup()
{
Wire.begin(); //매개변수없음-마스터모드로 동작
}
void loop()
{
const char *p = "hello\n";
//m -> s : beginTransmission, endTransmission
Wire.beginTransmission(SLAVE); //s에게 전송
for(int i=0; i<strlen(p); i++){
Wire.write(p[i]);
}
Wire.endTransmission(SLAVE);
delay(1000);
}
#include <Wire.h>
#define SLAVE 2
// slave
//
void setup()
{
Wire.begin(SLAVE);
//s에서 수신하는 함수 : onReceive
Wire.onReceive(fromMaster);
Serial.begin(9600);
}
void loop()
{
}
void fromMaster(int bytes) {
for(int i=0; i<bytes; i++){
char ch = Wire.read();
Serial.print(ch);
}
}
실행결과 : 1초에 한 번씩 master쪽 시리얼 모니터에 1씩 증가하며 정수가 출력됨. 1, 2, 3, ...
#include <Wire.h>
#define SLAVE 2
// master
//
void setup()
{
Wire.begin(); //매개변수없음-마스터모드로 동작
Serial.begin(9600);
}
void loop()
{
//master가 값 수신하는 함수 : requestFrom
Wire.requestFrom(SLAVE, 1); //1byte씩
char c = Wire.read();
Serial.println(String(c, DEC)); //string형으로 바꿔서 출력
delay(1000);
}
#include <Wire.h>
#define SLAVE 2
// slave
//
byte count = 0;
void setup()
{
Wire.begin(SLAVE);
//s에서 전송하는 함수 : onRequest
Wire.onRequest(sendToMaster);
Serial.begin(9600);
}
void loop()
{
}
void sendToMaster() {
Wire.write(++count);
}
실행결과 : 퍼텐셔미터를 조절하면 slave쪽 시리얼 모니터에 변경된 퍼텐셔미터 값들이 1초마다 출력됨. ex) 0, 153, 255, 13 ...
#include <Wire.h>
#define SLAVE 2
// master
//
void setup()
{
Wire.begin(); //매개변수없음-마스터모드로 동작
Serial.begin(9600);
}
void loop()
{
int a = analogRead(A0);
byte send = a/4; //최대값255 (원래는0-1023)
Wire.beginTransmission(SLAVE);//slave에게 전송
Wire.write(send);
Wire.endTransmission(SLAVE); //slave와 연결 끝냄
delay(1000);
}
#include <Wire.h>
#define SLAVE 2
// slave
//
byte count = 0;
void setup()
{
Wire.begin(SLAVE);
Wire.onReceive(fromMaster);
Serial.begin(9600);
}
void loop()
{
}
void fromMaster(int bytes){
byte a = Wire.read();
Serial.println(a);
}
실행결과 : master쪽의 퍼텐셔미터를 조절하면 slave쪽의 LED 밝기가 조절된다.
#include <Wire.h>
#define SLAVE 2
// master
//
void setup()
{
Wire.begin(); //매개변수없음-마스터모드로 동작
Serial.begin(9600);
}
void loop()
{
int a = analogRead(A0);
byte send = a/4; //최대값255 (원래는0-1023)
Wire.beginTransmission(SLAVE);//slave에게 전송
Wire.write(send);
Wire.endTransmission(SLAVE); //slave와 연결 끝냄
delay(1000);
}
#include <Wire.h>
#define SLAVE 2
// slave
//
byte count = 0;
void setup()
{
Wire.begin(SLAVE);
Wire.onReceive(fromMaster);
Serial.begin(9600);
pinMode(6, OUTPUT);
}
void loop()
{
}
void fromMaster(int bytes){
byte a = Wire.read();
analogWrite(6, a);
}
실행결과 : 4번의 기능 + 버튼을 누를 때 마다 slave2의 시리얼 모니터에 1이 출력됨.
#include <Wire.h>
#define SLAVE 2
#define SLAVE2 3
// master
//
int previous = 0;
void setup()
{
Wire.begin(); //매개변수없음-마스터모드로 동작
Serial.begin(9600);
pinMode(9, INPUT);
}
void loop()
{
int a = analogRead(A0);
int btn = digitalRead(9);
byte send = a/4; //최대값255 (원래는0-1023)
if(send != previous){
previous = send;
Wire.beginTransmission(SLAVE);//slave에게 전송
Wire.write(send);
Wire.endTransmission(SLAVE); //slave와 연결 끝냄
}
if(btn){
Wire.beginTransmission(SLAVE2);//slave2에게 전송
Wire.write(1);
Wire.endTransmission(SLAVE2); //slave2와 연결 끝냄
}
delay(50);
}
slave1
4와 동일
slave2
#include <Wire.h>
#define SLAVE2 3
// slave 2번째
//
void setup()
{
Wire.begin(SLAVE2);
Serial.begin(9600);
Wire.onReceive(fromMaster);
}
void loop()
{
}
void fromMaster(int bytes){
byte n = Wire.read();
Serial.println(n);
}